четверг, 21 марта 2013 г.

Режимы пониженного энергопотребления

Микроконтроллер ATmega328 имеет 6 режимов пониженного энергопотребления. Различия между ними в количестве работающих периферийных устройств, а также в количестве потребляемой энергии.

  1. Idle (ждущий режим) - режим, в котором прекращается тактирование процессора и памяти программ. При этом вся остальная периферия микроконтроллера (АЦП, таймеры/счетчики, и пр.) продолжает функционировать. Благодаря этому при поступлении прерываний, как внешних, так и внутренних пробуждают микроконтроллер и он продолжает функционировать в нормальном режиме.
  2. ADC Noise Reduction (режим снижения шумов АЦП) - режим, в котором прекращается тактирование процессора, памяти программ, а также системы ввода/вывода. Это необходимо для того, чтобы снизить шумы и повысить точность преобразования АЦП. Если АЦП включен, то преобразование начинается сразу после перехода в данный режим. Выход из данного режима осуществляется по прерыванию от сторожевого таймера, при аппаратном сбросе, сбросе от системы BOD, по внешнему прерыванию, прерыванию от АЦП, EEPROM и STM, а также  по совпадению адреса по интерфейсу I2C (TWI).
  3. Power-down (режим микропотребления) - в данном режиме прекращают работу все устройства микроконтроллера кроме тех, которые работают в асинхронном режиме. Выход из данного режима может осуществляться при аппаратном сбросе, сбросе от системы BOD, внешние прерывания, прерывания от сторожевого таймера, и прерывание по совпадению адреса по интерфейсу I2C (TWI).
  4. Power-save (экономичный режим) - данный режим полностью повторяет режим Power-down, но в нем еще продолжает свою работу таймер/счетчик 2 в асинхронном режиме.
  5. Standby (режим ожидания) - полностью повторяет режим Power-down, но микроконтроллер пробуждается всего за 6 машинных циклов. Данный режим работает только с внешним резонатором.
  6. Extended Standby (расширенный режим ожидания) - полностью повторяет режим Power-save, но микроконтроллер пробуждается всего за 6 машинных циклов. Данный режим работает только с внешним резонатором.
Для выбора режима пониженного энергопотребления используется регистр SMCR:
7
6
5
4
3
2
1
0
-
-
-
-
SM2
SM1
SM0
SE
Биты SM2 - SM0 (3 - 1) позволяют выбрать режим пониженного энергопотребления:
  • 000 - Idle
  • 001 - ADC Noise Reduction
  • 010 - Power-down
  • 011 - Power-save
  • 100 - 101 - резерв
  • 110 - Standby
  • 111 - Extended Standby
Бит SE (0) разрешает перевод микроконтроллера в режим пониженного энергопотребления по команде SLEEP при записи в него 1.

Помимо режимов пониженного энергопотребления, колличество потребляемой энергии микроконтроллера можно уменьшить отключением неиспользуемых устройств. Для отключения периферии микроконтроллера существует регистр PRR:
7
6
5
4
3
2
1
0
PRTWI
PRTIM2
PRTIM0
-
PRTIM1
PRSPI
PRUSART0
PRADC
Бит PRTWI (7) отключает модуль I2C (TWI) при установке в него 1. После включения модуля I2C (TWI), для корректной работы нужна его повторная инициализация.
Биты PRTIM2 (6), PRTIM0 (5), PRTIM1 (3) отключают соответствующие таймеры/счетчики. При этом после включения таймеров/счетчиков они продолжают выполнение операций, которые выполняли до выключения.
Бит PRSPI (2) отключает интерфейс SPI. После включения модуля SPI, для корректной работы нужна его повторная инициализация.
Бит PRUSART0 (1) отключает интерфейс USART0. После включения модуля USART0, для корректной работы нужна его повторная инициализация.
Бит PRADC (0) отключает АЦП. При этом АЦП не должен выполнять преобразований во время выключения. Мультиплексор АЦП не может быть использован при отключении АЦП.