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

Глава 1 4. Режимы энергосбережения и сторожевой таймер ldi temp, high ( RAМEND ) out SPH, temp ldi temp, ObO O O O O l O O ; дпя второго разряда порта D out PORTD , temp ; подтягивающий резистор на всякий случай ldi temp, ObO O O O O O O l ; порт В контакт РВО на выход out DDRВ , temp ldi temp , ( 1<< SMl ) 1 ( l<<SE ) ; разрешение Sleep , режим Power Down out MCUCR , temp ldi temp, ( l<<INTO ) ; разрешаем прерывание INTO по уровню out GICR, temp sei ; разрешаем прерывания Gcykle : ; цикл отслеживания кнопки s leep ; уходим в сон rjmp Gcykle ; вернуться обратно , 371 Эту тестовую программу вы найдете в архиве по адресу, указанному во введении (файл Sleep_I NTO_test .asm). Напоминаю, что при пробуждении после выполнения прерывания, в котором све­ тодиод зажигается на одну секунду, контроллер выполнит как минимум одну команду после s leep. Это команда rjmp, возвращающая опять к sleep. Но так как у нас и прерывание по уровню (которое захочет повторяться, пока этот самый уро­ вень висит), и еще и неизбежный дребезг кнопки, то к моменту возврата флаг прерывания INTO почти наверняка будет опять установлен, и прерывание захочет выполниться повторно. Чтобы этого не произошло, мы перед выходом из прерыва­ ния чистим регистр флагов внешних прерываний, предотвращая возможность ново­ го срабатывания. Измеренный мной ток потребления контроллера АTmega8A в таком режиме, без каких-либо дополнительных мер по снижению потребления, составил около 1 50 мкА. Его можно дополнительно снизить (отключением системы BOD, аналого­ вого компаратора, АЦП и т. д.), но и без того это вполне приличная величина для устройств с автономным питанием. Если бы можно было удержать потребление всего прибора на таком уровне, то от комплекта батареек ААА (емкость около 1 200- 1 500 мА · ч) он бы проработал примерно год, от АА - года два с половиной, а то и три . Потому стоит сосредоточиться на минимальном потреблении при подборе остальных компонентов реальной схемы. Например, как мы уже говорили, ЖК-дисплей MT- l OТ l 0- 1 1 (см. далее) с потреблением 30 мкА вписывается в такую схему, а куда более богатые по возможностям строчные (знакосинтезирующие) ЖК-дисплеи со встроенными контроллерами типа HD44780 - нет, поскольку та­ кой контроллер или любой его аналог потребляют не менее 1 мА. Во всем этом деле неприятной занозой остается только прерывание по уровню. В нашем случае все просто: после нажатия кнопки контроллер целую секунду ни­ чего не делает, причем застывает он в процедуре прерывания, куда другие преры­ вания вмешаться не могут. А потом мы сразу чистим флаги, даже если они устано-

RkJQdWJsaXNoZXIy MTExODQxMg==