Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
278 Часть 111. Практическое программирование микроконтроллеров АVR ной в листинге 1 0 . 1 , команд запрета/разрешения прерываний нет, но в общем слу чае об этом забывать не следует. Учитывая еЩе ограниченное числом 1 00 ООО допус тимое количество обращений к этой памяти, воистину не захочешь лишний раз обращаться к такой капризной сущности, как EEPROM. И это правильно - лиш ний раз к ней обращаться и не следует, только по необходимости. ПОДРОБНОСТИ Вообще говоря , запись в любую разновидность энергонезависимой памяти осуществ ляется в два приема: сначала очистка , потом запись нового значения . В ряде моделей контроллеров (в «нашем» ATt iпy231 3, в «ардуиновских» ATmega88/1 68/328 и др. ) в ре гистре EECR есть дополнительные биты EEPMl и ЕЕРМО , которые могут делить единую операцию записи в EEPROM на эти отдельные операции . При этом установка этих би тов в нули (по умолчанию) означает как раз единую т. н. «атомарную» операцию (т. е. неделимую на части) , как и во всех остальных контроллерах, где эти биты отсутству ют. То есть вы можете ни о чем не думать и делать все точно так же , за исключением того , что бит EEWE может носить название ЕЕРЕ, а бит ЕЕМWЕ - ЕЕМРЕ (впрочем, в некото рых случаях в iпс-файлах указаны оба как синонимы) . Процедуры очистки и записи по отдельности протекают вдвое быстрее, чем совмещенная атомарная операция, и их можно разнести по времени : например, перед записью новых значений , когда про грамма может быть заторможена безболезненно, очистить всю EEPROM и уже потом по очереди заносить в нее новые значения из буфера в SRAM или прямо из последо вательного порта. Здесь также стоит отметить (см. главу 14), что инициализация режима Power Down в момент записи в EEPROM не приведет к обрыву этой операции и порче данных, т. к. EEPROM управляется собственным RС-генератором: сначала закончится за пись, и лишь потом МК перейдет в состояние «сна>> . Однако при этом RС-гене ратор может продолжить работу, и, следовательно, режим Power Down будет вве ден неполностью. Во избежание такого случая следует сначала закончить запись в EEPROM и только потом устанавливать режим энергосбереж�ния . Регулируемый светильник с запоминанием состояния Пример чтения и записи EEPROM мы рассмотрим на основе практического приме ра использования ШИМ, освоенного нами в предыдущей главе. Для разнообразия построим схему с применением контроллера АTtiny23 l 3 , который более уместен в малогабаритном устройстве . Здесь стопроцентная гарантия сохранности данных в EEPROM, которую мы так долго обсуждали в начале главы, нам не требуется, потому будет достаточно включения штатной системы BOD на порог 2,7 вольта (в ATtiny23 1 3 для этого нужно установить одну ячейку BODLEVEL I ) . Регулятор для светодиодного светильника мы составим из двух кнопок: «больше» и «меньше», подключенных к прерыванию INTO и INTl (PD2 и РDЗ - выводы мик росхемы АTtiny23 l 3 6 и 7) . Схема подключения кнопок и контрольного светодиода к АTtiny23 l 3 приведена на рис. 1 0 .2. Выход управления светодиодом - по прежнему OC l A (РВЗ в нашем случае, вывод 1 5 микросхемы), подключение осве тительных светодиодов или гирлянды - через ключ, как на рис. 9 . 1 О в главе 9 (на схеме, приведенной на рис. 1 0 .2, этот ключ не показан).
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==