基于A(yíng)VR單片機與串行時(shí)鐘器件DS3231的應用設計
1引言
由單片機構成的測控系統或智能顯示屏經(jīng)常需要用到實(shí)時(shí)日歷或時(shí)鐘信號。為節省CPU資源,本文介紹了串行時(shí)鐘器件DS3231的應用及其與AVR單片機ATmega8的接口,該系統具有抗干擾能力強,計時(shí)準確且不隨季節變化產(chǎn)生誤差的特點(diǎn)。
2 DS3231的結構及工作原理
DS3231是低成本、高精度I2C實(shí)時(shí)時(shí)鐘(RTC)器件,具有集成的溫度補償晶體振蕩器(TCXO)。該器件包含電池輸入端,斷開(kāi)主電源時(shí)仍可保持精確計時(shí)。集成的晶體振蕩器可提高器件的長(cháng)期精確度。DS3231的寄存器能保存秒、分、時(shí)、星期、日期、月、年和鬧鐘設置等信息。少于31天的月份,可自動(dòng)調整月末日期,包括閏年補償。時(shí)鐘的工作格式為24小時(shí)或帶AM/PM指示的12小時(shí)格式。DS3231提供兩個(gè)可編程日歷鬧鐘和一路可編程方波輸出。地址與數據通過(guò)I2C雙向串行總線(xiàn)傳輸。
2.1 DS3231的組成及工作原理
如圖1所示,DS3231的主要組成部分有8個(gè)模塊,劃分為4個(gè)功能組:TCXO、電源控制、按鈕復位和RTC。
2.1.1 32 kHz的TCXO
TCXO包括溫度傳感器、振蕩器和控制邏輯??刂破髯x取片上溫度傳感器輸出,使用查表法確定所需的電容,加上AGE寄存器的老化修正。然后設置電容選擇寄存器。僅在溫度變化或者用戶(hù)啟動(dòng)的溫度轉換完成時(shí),才加載包括AGE寄存器變化的新值。VCC初次上電時(shí)就會(huì )讀取溫度值,然后每隔64 s讀取一次。
2.1.2 電源控制
電源控制功能由溫度補償電壓基準(VPF)和監視VCC電平的比較器電路提供。當VCC高于VPF時(shí),DS3231由VCC供電,當VCC低于VPF但高于VBAT時(shí),DS3231由VCC供電;當VCC低于VPF并低于VBAT時(shí),DS3231由VBAT供電。為保護電池,VBAT首次加到器件時(shí)振蕩器并不啟動(dòng),除非加載VCC,或者向器件寫(xiě)入一個(gè)有效的I2C地址。典型的振蕩器啟動(dòng)時(shí)間在1 s以?xún)?。在VCC加電后或者有效的I2C地址寫(xiě)入后大約2 s,器件會(huì )測量一次溫度,并使用計算的修正值校準振蕩器。一旦振蕩器運行,只要電源(VCC或者VBAT)有效就會(huì )一直保持工作狀態(tài)。器件每隔64 s進(jìn)行一次溫度測量并校準振蕩器頻率。
2.1.3 按鈕復位
DS3231具有連接至RST輸出引腳的按鈕開(kāi)關(guān)功能。若DS3231不在復位周期,會(huì )持續監視RST信號的下降沿。如果檢測到一個(gè)邊沿轉換,DS3231通過(guò)拉低RST完成開(kāi)關(guān)去抖。內部定時(shí)器定時(shí)結束后,DS3231繼續監視RST信號。如果信號依舊保持低電平,DS3231持續監視信號線(xiàn)以檢測上升沿。一旦檢測到按鈕釋放,DS3231強制RST為低電平并保持tRST。RST還可用于指示電源故障報警情況。當VCC低于VPF時(shí),產(chǎn)生內部電源故障報警信號,并強制拉低RST引腳。當VCC返回至超過(guò)VPF電平時(shí)。RST保持低電平大約250 ms(tREC),使供電電源達到穩定。如果在VCC加載時(shí),振蕩器不工作,將跳過(guò)tREC,RST立刻變?yōu)楦唠娖健?BR>2.1.4 時(shí)鐘和日歷RTC
可以通過(guò)讀取適當的寄存器字節獲得時(shí)鐘和日歷信息。通過(guò)寫(xiě)入適當的寄存器字節設定或者初始化時(shí)鐘和日歷數據。時(shí)鐘和日歷寄存器的內容采用二-十進(jìn)制編碼(BCD)格式。DS3231運行于12小時(shí)或者24小時(shí)模式。小時(shí)寄存器的第6位定義為12或24小時(shí)模式選擇位。該位為高時(shí),選擇12小時(shí)模式。在12小時(shí)模式下,第5位為AM/PM指示位,邏輯高時(shí)為PM。
2.1.5 鬧鐘
DS3231包含2個(gè)定時(shí)/日期鬧鐘。鬧鐘1可通過(guò)寫(xiě)入寄存器07h~0Ah設定。鬧鐘2可通過(guò)寫(xiě)入寄存器0Bh~0Dh設定??蓪︳[鐘進(jìn)行編程(通過(guò)控制寄存器的鬧鐘使能位和INTCN位),從而在鬧鐘匹配條件下觸發(fā)INT/SQW輸出。每個(gè)定時(shí)/日期鬧鐘寄存器的第7位是屏蔽位。當每個(gè)鬧鐘的屏蔽位均為邏輯0時(shí),只有當計時(shí)寄存器中的值與存儲于定時(shí)/日期鬧鐘寄存器中的對應值相匹配時(shí)才會(huì )告警。鬧鐘也可以編程為每秒、分、時(shí)、星期或日期重復告警。當RTC寄存器值與鬧鐘寄存器的設定值相匹配時(shí),相應的鬧鐘標志位A1F或A2F置為邏輯1。如果對應的鬧鐘中斷使能位A1IE或A2IE也置為邏輯1,并且INTCN位置為邏輯1,鬧鐘條件將會(huì )觸發(fā)INT/SQW信號。RTC在時(shí)間和日期寄存器每秒更新時(shí)都會(huì )檢測匹配情況。
2.2 DS3231的內部寄存器及功能
DS3231寄存器地址為00h~12h,分別用于存放秒、分、時(shí)、星期、日期及鬧鐘設置信息。在多字節訪(fǎng)問(wèn)期間,如果地址達到RAM空間的結尾12h處,將發(fā)生卷繞,此時(shí)定位到開(kāi)始位置即00h單元。DS3231的時(shí)間和日歷信息通過(guò)讀取相應的寄存器來(lái)設置和初始化。輔助(用戶(hù))緩沖區用于防止內部寄存器更新時(shí)可能出現的錯誤。讀取時(shí)間和日歷寄存器時(shí),用戶(hù)緩沖區在任何START條件下或者寄存器指針?lè )祷氐搅銜r(shí)與內部寄存器同步。時(shí)間信息從這些輔助寄存器讀取,此時(shí)時(shí)鐘繼續保持運行狀態(tài)。這樣在讀操作期間發(fā)生主寄存器更新時(shí)可以避免重新讀取寄存器。以控制寄存器(地址為0EH)為例,可以控制實(shí)時(shí)時(shí)鐘、鬧鐘和方波輸出。其各位定義如表1。
BIT7位:使能振蕩器(EOEC)。設定為邏輯0時(shí),啟動(dòng)振蕩器。如果設定為邏輯1,在DS3231電源切換至VBAT時(shí),振蕩器停止。初次上電時(shí)該位清零(邏輯0)。當DS3231由VCC供電時(shí),振蕩器與EOSC位的狀態(tài)無(wú)關(guān),始終保持工作狀態(tài)。
BIT6位:電池備份的方波使能(BBSOW)。當設定為邏輯1并且DS3231由VBAT引腳供電時(shí),在沒(méi)有加載VCC的情況下,該位使能方波輸出。當BB-SQW設定為邏輯0時(shí),若VCC降至低于電源故障門(mén)限值,則INT/SQW引腳變?yōu)楦咦杩?。初次上電時(shí),該位清零(邏輯0)。
BIT5位:轉換溫度(CONV)。該位置為1時(shí),強制溫度傳感器將溫度轉換成數字,并執行TCXO算法更新振蕩器的電容陣列。只在空閑期間有效。狀態(tài)位BSY=1時(shí),禁止設定轉換溫度位。用戶(hù)在強制控制器開(kāi)始新的TCXO操作之前。應檢查狀態(tài)位BSY。用戶(hù)啟動(dòng)的溫度轉換不影響內部64 s更新周期。用戶(hù)啟動(dòng)的溫度轉換在大約2 ms內不會(huì )影響B(tài)SY位。CONV位從寫(xiě)入開(kāi)始直到轉換完成一直保持為1,轉換完后,CONV和BSY均變?yōu)?。在監視用戶(hù)啟動(dòng)轉換狀態(tài)時(shí),應使用CONV位。
BIT4和BIT3位:頻率選擇(RS2和RS1),初次上電時(shí),BIT4和BIT3設置為邏輯1。方波使能時(shí)用于控制方波輸出的頻率。RS1、RS2的邏輯值與方波輸出頻率的關(guān)系如表2所列。
評論