Thu Aug 12 2004 10:21, Valery Klisenko wrote to All:
VK> Есть некое устpойство на АТ89С52 и мелкой логике сеpии 74HС. Устpойство VK> питается от сети. Пpи выключении питания, данные из ОЗУ сохpаняются в VK> внешней EEPROM 24c08 по сигналу супеpвизоpа. Всё pаботает хоpошо. Hо пpи VK> пеpеходе на АТ89S8252 и записи во внутpенюю EEPROM появились ошибки. VK> Подскажите, пожалуйста, каким обpазом осуществить сабж, для более VK> опеpативной записи?
Не совсем понятно что ты делаешь. Обычно супервизор ставится на основную шину питания проца (т.е. 5В или 3.3В). Его порог срабатывания обычно выбирается таким, чтобы супервизор выдавал СБРОС процу, когда напряжение питания ниже чем рабочий диапазон напряжения питания проца (и других компонентов). Например, если проц может работать в диапазоне 5В +-10% (т.е. от 4.5В до 5.5В) то супервизор должен выдать сброс когда напряжение питания упадет ниже 4.5В. Поскольку в супервизоре обычно есть гистерезис, то при включение питания он снимет сброс позже, когда напряжение поднимется примерно до 4.6В и более (плюс к этому у него есть задержка снятия сброса, но это уже к твоему вопросу совсем не относится)
Ты пишешь, что "данные из ОЗУ сохpаняются в внешней EEPROM 24c08 по сигналу супеpвизоpа". Из этого, очевидно, следует, что супервизор в твоей схеме выдает не сброс, а (в лучшем случае) всего лишь прерывание процу (т.е. прерывание "плохое питание"). Значит, ты используешь супервизор как компаратор со встроенной опорой, а не как супервизор. Похоже что у тебя проц продолжает пахать даже когда его напряжение питания упало до уровня ниже предельно допустимого. В это время он пытается переписать данные из ОЗУ в ЕЕПРОМ. Однако запись в ЕЕПРОМ занимает много времени, т.к.надо ждать 5-10мс пока запишется каждый блок данных. В это время проц работает при питании ниже предельно допустимого, и имеет полное право "свихнуться" и испортить данные, записываемые в ЕЕПРОМ.
Предположим, что ты используешь проц с широким диапазоном питающих напряжений, который может работать, скажем, от 3В до 5.5В. И предположим, что твой супервизор (который по сути компаратор) имеет порог, максимально близкий к напр. питания, скажем, 4.75В. При выключении питания твой проц получит прерывание, когда питание упало до 4.75В. После этого он начинает процедуру сохранения данных в ЕЕПРОМ, и должен ее закончить прежде, чем питание упадет ниже 3В (ЕЕПРОМ обычно имеет широкий диапазон напр. питания, поэтому для простоты здесь я его характеристики не рассматриваю). Успеет ли он закончить запись - зависит от емкости конденсаторов на шине питания 5В и суммарного потребляемого тока. Возможно и успеет, но, если ты не померял токи, не посчитал это время и не поставил кондер соотв. емкости, то ты ходишь по граблям и надеешься на авось.
Советы тебе будут такие:
-- Поставь супервизор на питание. Настоящий, который выдаст процу сброс, а не прерывание.
-- Компаратор, вырабатывающий процу прерывание "плохое питание", перенеси с 5В на линию входного питания. Например, если твой прибор питается от сети через транс, мониторь питание на входе регулятора 5В
-- Питание желательно мониторить до кондеров, чтобы сразу ущучить, если оно пропало. То есть, сделай, например, так:
+--------------
*-----диод---*-----к регулятору 5В | | | диодный
*------------------к комаратору мост | | | R C | | | +--------------*------------*-- общ
Где С - кондер фильтра питания
-- Померяй токи, посчитай время, необходимое для записи в ЕЕПРОМ, посчитай мин. необходимую емкость кондеров в питании. Поставь их с большим запасом по емкости и несколько в параллель (электролиты со временем, бывает, высыхают и теряют емкость)
Пока, Алексей