ATTINY816 备用比较器中断唤醒

问题描述 投票:0回答:1

寻求一些关于睡眠和唤醒 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 中启用它?

我发现空闲电源模式也可以工作,但理想情况下我希望它使用尽可能少的电池。

arduino avr
1个回答
0
投票

对于tinyAVR 0,1和2系列,有3种睡眠模式,空闲,待机和掉电模式,掉电模式下唯一可以通过中断唤醒的外设是PIT(作为RTC的一部分)。您可以设置 PIT 以中断唤醒并处理 AC。阅读数据表第 11 章,或者查看我的一张名片 + ATtiny3227 开发板,了解如何设置 PIT 并将睡眠电流保持在低至 1uA。

© www.soinside.com 2019 - 2024. All rights reserved.