Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 1О. Использование EEPROM +5 8 R2 5,1 к + 5 8 "боп•ше" Кн 1 1 RЗ 5,1 к к н r)_ • мен ь ше • 1 Reset 2 RXD (PDO) 3 TXD (PD1 ) 4 ХТАL2 (РА1 ) 5 XTAL1 (РАО) 6 INТO (PD2) 7 INT1 (РDЗ) 8 PD4 (TO) 9 PD5 (Т1 ) 10 GND Vcc 20 SCK 1 9 MISO 1 8 MOSI 1 7 (ОС1 8) РВ4 1 6 (ОС1А) РВЗ 1 5 Р82 14 (PCINT1 ) РВ1 1 3 (PCINTO) Р80 1 2 PD6 1 1 AТtlny231 3 + 5 8 С2 т 1 ,о к светильнину R4 Рис. 1 0.2. Схема соединений ATt iny231 3 для управления светильником 279 Из материала предыдущей главы, где активно использовались прерывания, у вас могло сложиться ложное впечатление, что они необходимы для успешной реализа цииШИМ . Это неправильное впечатление: точно так же, как в примере с генера цией частоты (см. листинг 9 . 3), ШИМ вполне работает и безо всяких прерываний. Так как контроллер в нашем случае ничего не делает, кроме вывода ШИМ-сигнала, который после задания режима генерируется аппаратно, то можно реагирование на кнопки вынести в основной цикл. Реагирование будет происходить так: если нажа та кнопка «больше», то некая переменная porog с задержкой в 20 мс увеличивается на единицу, записывается в регистр сравнения таймера, и программа возвращается к началу цикла. То же самое происходит, если нажата кнопка «меньше», - только в сторону уменьшения . Дойдя до крайних значений ( $FF при увеличении и о при уменьшении), переменная больше не изменяется . При таком подходе за 256 · 20 мс ::::: ::::: 5 секунд каждая кнопка, если ее не отпускать, «пробегает» весь диапазон (вместо двух кнопок, конечно, можно установить одну перекидную клавишу без фиксации). Но у нас есть еще задача сохранять текущее значение порога в EEPROM- как это сделать так, чтобы не тратить дефицитный ресурс энергонезависимой памяти по количеству перезаписей? Это только кажется, что 1 00 тыс . перезаписей - много. Если мы будем записывать каждое изменение счетчика на одну ступеньку из 256-ти, и в сторону увеличения, и в сторону уменьшения, то один прогон обеих кнопок «больше»/«меньше» от начала до конца и обратно даст нам 5 1 2 перезаписей. То есть контроллер имеет шанс отказать после 200 таких циклов, что вполне обозри мое количество. Можно использовать прием, который с целью увеличения ресурса применяется в хороших флеш-картах, - текущие адреса записи время от времени сдвигаются по кристаллу в случайном. порядке, чтобы равномерно использовать ресурс. Но можете себе представить, во что выльется этот прием, и целесообразно ли применять его в таком простом устройстве?
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==