Почему происходят сбои информации в EEPROM и как от них избавиться?
Ответ:
[Вернуться в категорию "Микроконтроллеры семейства PIC"]
При использовании внутренней или внешней EEPROM иногда наблюдаются случаи самопроизвольного изменения содержимого ячеек памяти. Происходит это, в основном, в моменты включения/выключения напряжения питания. Возможно, причина в случайном ходе выполнения программы во время переходных процессов. Кстати, данная проблема актуальная и для микроконтроллеров других производителей, например ATMEL.
Если выключение питания происходит в моменты обращения к EEPROM, как внутренней (в микросхемах 16F84), так и внешней (типа 24CXX и т. п.) с шиной управления I2C, то тоже существует вероятность нарушения хранимой информации. Сбои могут происходить при проникновении импульсных помех через питающие цепи в процессе работы. Могу предложить несколько способов увеличения надежности сохранности данных: программный и схемотехнические.
- В программном способе если приходится хранить всего одну-две ячейки, то можно записывать каждое значение три раза подряд. При считывании проверять попарно на равенство и, если значения отличаются, то сравнивать с третьим и, в зависимости от результатов, можно выявить в какой ячейки данные нарушены. При хранении области данных можно поступить так: во-первых хранить две одинаковых области данных (для восстановления одной в случае сбоя во второй), во-вторых, при каждом изменении данных подсчитывать контрольную сумму области и записывать ее в отдельных ячейках EEPROM. При чтении, чтобы удостовериться в целостности информации нужно тоже подсчитывать контрольную сумму и сверять результат со значением, хранящимся там же. Проделывать такую операцию можно во время инициализации после включения прибора один раз, а можно и всякий раз при чтении данных.
- При схемотехническом способе решения проблемы можно добавить несколько элементов, как показано синим цветом на рисунке ниже, для контроля момента выключения или аварии напряжения питания для того, чтобы не производить чтение или запись в EEPROM. В принципе схемотехническое решение может быть любым, выполненным как по приведенной схеме, так и с использованием специализированных микросхем мониторов напряжения или другим способом. Элементы нужно подобрать таким образом, чтобы при уменьшении питающего напряжения ниже порогового уровня на выводе PORTn микроконтроллера появлялся лог "0". А в подпрограммах обращения к EEPROM прежде чем начать цикл записи или чтения опрашивать этот вывод.
Еще одно возможное решение этой проблемы, предложенное Ждановым Михаилом из Великого Новгорода, практически полностью исключает сбои. Это решение основано на дешевой микросхеме LP2951. Сигнал сброса поступает на PIC когда напряжение питания достигнет 5,7 вольта, а также и при выключении (задаётся диодом). Конденсатор на VCC PICа поддерживает питание некоторое время, срезая переходные процессы.
Для надежного сброса микроконтроллера можно использовать схему на м/с DS1233 фирмы Dallas, приведенную ниже. Она надежно отслеживает питание, и запускает микроконтроллер PIC через 0,1 сек после установки номинального. Чтобы помехи по питанию не вызывали ложные сбросы м/с DS1233 включается через цепочку R1C1C2.
Для уменьшения влияния внешних воздействий желательно неиспользуемые выводы микроконтроллера программировать как входы и подключать к шине питания или земли (это уменьшает и энергопотребление за счет отсутствия случайных переключений входных ключей портов). Еще можно оставить неиспользуемые выводы свободными, но при этом запрограммировать их как выходы. А при разводке печатной платы желательно разместить фильтрующий керамический конденсатор, емкостью 0,01-0,1 мкф, между выводами питания микроконтроллера. Обычно эти выводы расположены напротив друг друга. Цепи генератора тактовых импульсов (кварцевый резонатор, RC цепочка) и цепи сброса микроконтроллера лучше делать как можно короче. Вокруг печатной платы по периметру желательно провести шину земли. При такой конфигурации ни включение/выключение рядом силовых приборов, ни подключение осциллографа не вызовет ложных срабатываний или пересбросов процессора. При разводке печатной платы следует учитывать некоторые моменты. Во-первых, входные сигналы следует вести "к" микроконтроллеру, а не "сквозь" него. Не доводя сигнал до ножки желательно поставить небольшой керамический фильтрующий конденсатор, чтобы короткая импульсная помеха уходила в землю. Затем, для ограничения тока можно поставить сопротивление. Во-вторых, не плохо обвести "землю" вокруг микроконтроллера.
Источник: disall.narod.ru [Микроконтроллеры семейства PIC]
|