寻求一些关于睡眠和唤醒 ATTINY816 的最佳方式的建议,在 arduino 中运行 megatinycore。
我的内置比较器配置如下:
#include <Comparator.h>
// 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 手册中的这一部分:
在待机睡眠模式下,AC 默认处于禁用状态。如果控制 A 中的运行在待机模式 (RUNSTDBY) 位 (ACn.CTRLA)寄存器写入‘1’,AC将继续工作,但状态寄存器不会更新,并且 如果没有其他模块请求 CLK_PER,则不会生成中断,但事件和焊盘输出将 已更新。
因此我猜测,我需要启用其他一些模块/外设以在待机状态下保持活动状态,但我的问题是我还应该在待机状态下启用什么来满足此要求,并且还使用最少的电池量?我如何在 Arduino 中启用它?
我发现空闲电源模式也可以工作,但理想情况下我希望它使用尽可能少的电池。
对于tinyAVR 0,1和2系列,有3种睡眠模式,空闲,待机和掉电模式,掉电模式下唯一可以通过中断唤醒的外设是PIT(作为RTC的一部分)。您可以设置 PIT 以中断唤醒并处理 AC。阅读数据表第 11 章,或者查看我的一张名片 + ATtiny3227 开发板,了解如何设置 PIT 并将睡眠电流保持在低至 1uA。