2015-01-09 113 views
0

我正在開發一款數據記錄器,儘可能保證電池的使用壽命。因此,記錄器(芯片ATmega328P)進入睡眠狀態,一切正常。現在我想用一個RTC模塊(DS3231)擴展設置,以獲取每次測量的時間信息。ATmega:喚醒ATmega與外部RTC

現在我的問題:我怎樣才能通過外部RTC喚醒芯片或者它是不可能的。我發現,即使在關機模式下,芯片也可以被外部事件喚醒。但我沒有找到如何使用RTC做到這一點的方法。可能有趣的是,記錄器設置爲在一小時內進行一次測量。

感謝您的每一個提示!

(PS:對於所有的超級英雄在那裏,你開始往下表決權我的問​​題之前:是的,我不值錢,我很愚蠢被允許問任何問題,但我不在乎)

+1

DS3231有一個INT/SQW信號,您可以編程並將其與MCU上的引腳電平變化中斷連接(漏極開路,因此不要忘記上拉)。或者,您可能想要完全關閉穩壓器/電源,讓RTC中斷再次喚醒 – doynax 2015-01-09 20:35:21

回答

2

正如已經在評論中提到的那樣,您可以使用INT/SQW信號通過外部中斷來定期喚醒ATmega。

的警報可以被編程(通過報警啓用和控制寄存器的INTCN位):該DS3231 RTC內的INT/SQW信號可通過兩個內置的時間/日期報警(DS3231 datasheet)中的一個來觸發在報警匹配條件下激活INT/SQW輸出。

用於觸發DS3231的中斷信號每個整點所需的步驟是

  • 明確寄存器0x0B(報警2分鐘)(包括屏蔽位A2M2
  • 設置屏蔽位A2M3(位7在0x0C)
  • 通過0x0E的設定A2IE(位1設定在0X0D屏蔽位A2M4(位7)
  • 使報警2)
  • 通過設置INTCN(0x0E的位2)來啓用DS3231中斷信號。

這將每整整一個小時將INT/SQW引腳拉低。報警1也可以用來代替,但需要設置一個額外的寄存器。

配置ATmega的中斷INT0或INT1在低電平觸發應該有所訣竅。

ATmega 328P datasheet部12:上INT0和INT1

低電平中斷檢測是異步的。這意味着這個中斷可以用於喚醒除了空閒模式以外的睡眠模式的部分。