Attini816 Резервный компаратор, пробуждение по прерываниюC++

Программы на C++. Форум разработчиков
Anonymous
Attini816 Резервный компаратор, пробуждение по прерыванию

Сообщение Anonymous »

Ищу совет о том, как лучше всего переходить в режим сна и пробуждения ATTINY816 с запуском megatinycore в Arduino.
У меня встроенный компаратор настроен следующим образом:

Код: Выделить всё

  #include 
// Configure Piezo knock detection comparator parameters
Comparator.input_p = comparator::in_p::in0;
Comparator.reference = comparator::ref::vref_0v55;
Comparator.input_n = comparator::in_n::vref;
Comparator.hysteresis = comparator::hyst::large;
// Initialize comparator
Comparator.init();
Comparator.attachInterrupt(tapInterrupt, RISING);
// Enable the Analog Comparator to run in standby mode, and set to low power mode
AC_t& AC_struct = Comparator.getPeripheral();
AC_struct.CTRLA |= AC_LPMODE_bm | AC_RUNSTDBY_bm;
// Start comparator
Comparator.start();
Это прекрасно работает и запускает TapInterrupt нормально. Проблема в том, что теперь я хочу перевести чип в режим ожидания, чтобы сэкономить заряд батареи, вот так:

Код: Выделить всё

  wdt_disable();
set_sleep_mode(SLEEP_MODE_STANDBY);
sleep_enable();
sleep_cpu();
sleep_disable();
Проблема в том, что, несмотря на то, что я настроил компаратор на продолжение работы в режиме ожидания, прерывание не срабатывает, что, как я предполагаю, связано с этим разделом в руководстве ATTINY816:

В режиме ожидания кондиционер по умолчанию отключен. Если бит «Работа в режиме ожидания» (RUNSTDBY) в регистре управления A
(ACn.CTRLA) записан в «1», AC продолжит работать, но регистр состояния не будет обновляться, и
прерывания не генерируются, если другие модули не запрашивают CLK_PER, но события и вывод пэда будут
обновлены.

Так я думаю поэтому мне нужно, чтобы какой-то другой модуль/периферийное устройство оставалось активным в режиме ожидания, но мой вопрос в том, что еще мне следует включить в режиме ожидания, чтобы выполнить это требование, а также использовать наименьшее количество батареи?, и как мне включить это в Arduino?
Я видел, что режим простоя также будет работать, но в идеале я хочу, чтобы он использовал как можно меньше заряда батареи.

Подробнее здесь: https://stackoverflow.com/questions/786 ... n-interupt

Вернуться в «C++»