Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

272 Часть 111. Практическое программирование микроконтроллеров AVR мой самого МК. В этом состоит и ее слабость - как мы уже говорили (см. главу 2), при снижении питания до определенного уровня МК начинает совершать непред­ сказуемые операции, и, если не принимать меры, EEPROM с большой вероят­ ностью может быть повреждена. Для защиты от этой напасти (и вообще от выпол­ нения каких-либо операций, которые иногда могут навредить внешним устройст­ вам) в AVR предусмотрена система мониторинга питания BOD (см. главы 2 и 5), которая при снижении напряжения питания до некоторого порога (4 или 2,7 В) «загоняет» МК в состояние сброса. Это помогает, но, как показывает опыт, для обеспечения абсолютной защиты данных в EEPROM встроенной системы BOD, к сожалению, недостаточно. Впрочем, нахождение в любом из режимов энергосбережения исключает выполне­ ние контроллером недопустимых операций и потому может служить способом обеспечения сохранности EEPROM. В этом смысле наиболее удобен режим Idle (см. главу 14), который не требует никакой предварительной настройки и выключа­ ется многими прерываниями: и внешними, и внутренними . Однако применение его , не всегда возможно и целесообразно - так, в программе управления яркостью све­ тильников, которую мы рассмотрим в конце этой главы, вводить контроллер в ре­ жим Idle нельзя, т. к. при этом остановится главный цикл программы, в котором мы отслеживаем состояние кнопок. Самый надежный и проверенный способ предохранения данных в EEPROM- до­ бавить к схеме внешний монитор питания (супервизор) . Это небольшая микросхе­ ма, которая при снижении питания ниже допустимого закорачивает свой выход на «землю» . Если питание в норме, то выход находится в состоянии «разрыва» и ни­ как не влияет на работу схемы. Присоединив этот выход к выводу RESET , мы по­ лучаем надежный предохранитель . Вопрос о том, какие именно мониторы питания предпочесть, мы уже обсуждали в главе 2, а здесь немного добавим в плане практи­ ческого применения . При сетевом питании и обычном стабилизаторе типа LM293 1 (см. главу 4) или го­ товом стабилизированном 5-вольтовом адаптере вообще-то можно обойтись и встроенной схемой BOD. Для ее включения служит ячейка BODEN (см. рис. 5 . 7- 5 .9 и комментарии к ним в главе 5). В такой ситуации схему BOD включают на по­ роговое напряжение 2,7 вольта и больше об этом не думают. Можно включить и на 4, 1 вольта (дополнительно BODLEVEL = О), но до 2,7 вольта любой АVR все равно будет работать стабильно, и мы застрахованы от случайных колебаний питания . Но так можно поступать, только если у вас : а) в EEPROM не хранятся данные, существенные для выполнения программы с самого начала (например, калибровоч­ ные коэффициенты датчиков), б) если у вас питание от стационарной электриче­ ской сети, а не от батареек или аккумуляторов. Потому что в первом случае даже доли процента вероятности нарушения целостности данных в EEPROM недопусти­ мы, т. к. могут нарушить работу устройства до полной его неработоспособности. А во втором случае важно то, что электрохимические источники тока «умирают» медленно, причем даже с точки зрения человека, а не только микроконтроллера с его микросекундами. И длящееся часами колебание напряжения вблизи порога стабильной работы устройства может разрушить данные в EEPROM почти гаран­ тированно, и никакие BOD не помогут.

RkJQdWJsaXNoZXIy MTExODQxMg==