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

ГЛ А В А 1 4 Режимы э нергосбережения и сторожевой таймер В различных моделях МК AVR имеется от 2-3 (семейство Tiny) до 5--6 (старшие Mega) режимов энергосбережения . Оrметим, что к режимам энергосбережения иногда относят специальный режим ADC Noise Reduction, который мы упоминали в главе 1 1 , хотя он не совсем связан именно с энергосбережением. При его выборе, как только контроллер «уснет», АЦП заработает, сделает преобразование и «про­ снется» на прерывании АЦП, т. е. преобразование теоретически произойдет в от­ сутствие цифровых шумов. Так что цель этого режима совсем другая . При практическом использовании режимов энергосбережения следует учесть, что команду s leep нельзя вызывать из процедуры прерывания - только из основной программы (подробнее см. описание команды в главе 7). Есть два базовых режима энергосбережения, общие для всех моделей АVR: Idle mode и Power Down mode. В большинстве моделей МК АVR имеются и другие разновидности режимов энер­ госбережения, рассмотренные далее. Изо всех без исключения режимов контроллер может выводиться некоторыми прерываниями, в том числе прерыванием готовно­ сти TWI, которое мы не применяли (см. главу 13), потому далее оно среди прочих не упоминается. В ldle mode (режиме ожидания) останавливается GPU, а также устройство управ­ ления выборкой команд из памяти. Все периферийные устройства: таймеры, АЦП, порты - продолжают функционировать . Поэтому значительной экономии не по­ лучается - потребление снижается лишь на 30--50%. Для ввода в режим Idle mode в программе достаточно просто вызвать команду s leep, больше ничего делать не требуется . Из этого состояния контроллер выводится прерыванием от многих источников : Timer2, внешних выводов INTO/INT l , готовности АЦП и др. Очевидно, что с точки зрения экономии энергии режим Idle имеет смысл использо­ вать тогда, когда контроллер обязательно должен находиться в состоянии постоян­ ной готовности, а общее потребление устройства лимитируется именно им . Кроме того, это самый простой способ предохранить контроллер от выполнения «недо­ пустимых» операций при снижении питания (жаль только, не во всех случаях воз­ можный). Во всех остальных ситуациях следует выбирать режимы «глубокого» энергосбережения, когда собственное потребление МК снижается до единиц или десятков микроампер.

RkJQdWJsaXNoZXIy MTExODQxMg==