0

我正在开发一个数据记录器,它应该尽可能保证电池寿命。因此记录器(芯片 ATmega 328P)进入睡眠状态,一切正常。现在我想使用 RTC 模块 (DS3231) 扩展设置,以获取每次测量的时间信息。

现在我的问题是:我怎样才能通过外部 RTC 唤醒芯片,或者这是不可能的。我发现,即使在掉电模式下,芯片也可以被外部事件唤醒。但我没有找到使用 RTC 的方法。记录器设置为每小时进行一次测量可能会很有趣。

感谢您的每一个提示!

(PS:对于所有的超级英雄,在你开始对我的问题投反对票之前:是的,我一文不值,我很愚蠢被允许问任何问题,但我不在乎!)

4

1 回答 1

2

正如评论中已经提到的,您可以使用 INT/SQW 信号通过外部中断定期唤醒您的 ATmega。DS3231 RTC 模块的 INT/SQW 信号可由两个内置时间/日期警报之一触发(DS3231 数据表):

可以对警报进行编程(通过控制寄存器的警报启用和 INTCN 位)以在警报匹配条件下激活 INT/SQW 输出。

每整小时触发一次 DS3231 的中断信号所需的步骤是

  • 清除寄存器 0x​​0B(报警 2 分钟)(包括屏蔽位A2M2
  • 设置屏蔽位A2M3(0x0C 中的位 7)
  • 设置屏蔽位A2M4(0x0D 中的位 7)
  • 通过设置启用警报 2 A2IE(0x0E 中的位 1)
  • INTCN通过设置(0x0E 中的位 2)启用 DS3231 中断信号。

这将每隔一整小时将 INT/SQW 引脚拉低。也可以使用警报 1,但需要设置一个额外的寄存器。

将 ATmega 的中断 INT0 或 INT1 配置为低电平触发应该可以解决问题。

ATmega 328P 数据表第 12 节:

INT0 和 INT1 上的低电平中断被异步检测。这意味着该中断也可用于将部件从空闲模式以外的睡眠模式唤醒。

于 2015-12-22T16:49:12.937 回答