Вопрос о библиотеке с низким энергопотреблением
Я изучаю библиотеку Low-Power, чтобы лучше понять, как она работает.
В этой части кода у меня есть вопрос.
Иногда он использует такие команды, как:
power_timer1_disable();
power_timer0_disable();
но в другой части кода, например "TIMER2_OFF":
if (TCCR2B & CS22) clockSource |= (1 << CS22);
if (TCCR2B & CS21) clockSource |= (1 << CS21);
if (TCCR2B & CS20) clockSource |= (1 << CS20);
// Удаляем источник синхронизации для выключения Timer2
TCCR2B &= ~(1 << CS22);
TCCR2B &= ~(1 << CS21);
TCCR2B &= ~(1 << CS20);
power_timer2_disable();
он использует код регистра и, в конце концов, функцию.
Кто-нибудь может объяснить мне, почему?
@MarkCalaway, 👍1
1 ответ
Лучший ответ:
По сути, он делает следующее:
clockSource = TCCR2B & (_BV(CS22) | _BV(CS21) | _BV(CS20)); // сохраняем прескалер
TCCR2B &= ~(_BV(CS22) | _BV(CS21) | _BV(CS20)); // выбираем «нет источника»; - отключить источник синхронизации
power_timer2_disable(); // отключаем весь таймер2 в регистре снижения мощности
Определение макроса power_timer2_disable:
#define power_timer2_disable() (PRR |= (uint8_t)(1 << PRTIM2))
Короче говоря, вам необходимо отключить источник синхронизации до того, как питание будет отключено регистром PRR (во избежание неожиданного поведения).
Регистр снижения мощности
Регистр снижения мощности (PRR) обеспечивает метод остановки синхронизацию с отдельными периферийными устройствами для снижения энергопотребления. текущее состояние периферийного устройства замораживается, и регистры ввода-вывода могут не читать и не писать. Ресурсы, используемые периферийным устройством при остановке часы останутся занятыми, поэтому периферийное устройство в большинстве случаев должно случаях отключать перед остановкой часов. Пробуждение модуля, которое осуществляется очисткой бита в PRR, переводит модуль в то же состояние как и до выключения. Выключение модуля можно использовать в режиме ожидания и Активный режим, позволяющий значительно снизить общее энергопотребление. В во всех остальных режимах сна часы уже остановлены.
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Как перевести ATtiny/ATmega в режим глубокого сна (чтобы годами работать от батарей), но при этом обнаруживать нажатие кнопки?
- ESP8266 глубокий сон и MQTT
- ESP.deepSleep() — снова и снова?
- Пользовательская функция сна для Nextion
- Вывод ESP8266 из deepSleep с помощью кнопки
- PIR движение выводит ESP8266 из глубокого сна
- Память ESP8266 RTC (для загрузки)
Спасибо КИЕВ! Есть ли в таблице данных эти советы перед использованием, например, power_timer2_disable?, @MarkCalaway
@MarkCalaway Это определенно упоминается для модуля АЦП. Я не проверял это на предмет таймеров., @KIIV