Режим Power-down микроконтроллеров серии Tiny

Озадачился недавно созданием небольшой платы сопряжения для автоматизированного управления шторами. Решил делать платку на ATTiny13 с питанием от 3-вольтовой батареи CR2032. Встал вопрос энергосбережения, вроде как тини много и не жрет, но повесил на МК две кнопки, два транзистора и 3-вольтовой батарейки хватило ровно на неделю.
Посмотрев даташит, понял что режимов энергосбережения не так уж и много: Idle Mode, Power-down Mode и ADC Noise Reduction Mode. Не буду тут описывать чем один от другого отличается, это можно прочитать в даташите, скажу лишь что самый экономичный из них это Power-down Mode. 

Power-down — наиболее экономный режим, при котором микроконтроллеры серии Tiny фактически отключаются от энергопотребления. В этом состоянии происходит остановка тактового генератора, выключается вся периферия. Активным остается лишь модуль обработки прерываний от внешнего источника. При обнаружении прерывания микроконтроллер выходит из режима Power-down и переходит в рабочий режим, останавливается на 4 машинных цикла, выполняет подпрограмму обработки прерывания, после чего выполнение программы возобновляется с инструкции, следующей за командой SLEEP. Содержимое РОН, ОЗУ и РВВ при этом не изменяется. Следует помнить, что между наступлением события, приводящего к выходу микроконтроллера из режима Power-down, и началом работы микроконтроллера проходит некоторое время, в течение которого тактовый генератор микроконтроллера выходит на рабочий режим.

немного о прерываниях

Микроконтроллеры без использования прерываний практически ничего не стоят. Прерывание (interrupt) получило свое название из того факта, что при срабатывании прерывания по какому-нибудь событию нормальное выполнение программы прерывается, и выполняется особый код — код обработчика прерывания (interrupt handler). Прерывания можно рассматривать просто как подпрограммы, которые приостанавливают нормальный процесс выполнения программы до тех пор, пока код подпрограммы обработчика прерывания не будет завершен. После того, как обработчик прерывания завершит свою работу, ядро микроконтроллера вернется к исполнению основной программы точно в той точке, где она была прервана прерыванием. События прерывания обычно происходят от каких-то внешних асинхронных воздействий на микроконтроллер — например, переключение логического уровня на внешнем выводе порта, либо переполнение регистра таймера, что означает истечение заданного интервала времени, и т. д.

схема

Схема очень простая и не заслуживает описания, просто приведу ее здесь:

tiny13 power down mode

Программа

Чтобы активировать режим Power-down достаточно биты SM[1:0] регистра MCUCR установить в 10 и разрешить спящий режим МК (бит SE регистра MCUCR в 1). Усыпляется МК командой asm («sleep»);
Остается только настроить прерывание по нажатию кнопок и написать его обработчик. Далее привожу полный код:

Прописан программный антидребезг контактов, флаги zakr и otkr используются для отлавливания повторного нажатия на кнопку (повторное нажатие останавливает мотор).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *