方潔,陳偉
(武漢理工大學(xué) 信息工程學(xué)院,湖北 武漢 430070)
隨著科技的迅猛發(fā)展,一些相應(yīng)的精密儀器也隨之問世,這些儀器中通常都需要設(shè)置準(zhǔn)確的時(shí)鐘,以保證時(shí)段的正確切換。DS3231是Maxim/Dallas公司生產(chǎn)的一款低成本、超高精度的I2C實(shí)時(shí)時(shí)鐘芯片,該器件不僅能夠在一定溫度范圍內(nèi)提供優(yōu)于±2 min/a的計(jì)時(shí)精度,而且省去制造過程中晶體安裝和布線校準(zhǔn)工序。這里給出一種基于DS3231的高精度時(shí)鐘接口設(shè)計(jì)方案。
DS3231是低成本,高精度I2C實(shí)時(shí)時(shí)鐘(RTC),具有集成的溫補(bǔ)晶體振蕩器(TCXO)和1個(gè)32.768 kHz的晶體。該晶體包含電池輸入端,斷開主電源仍可保持精確計(jì)時(shí)。集成晶體振蕩器可提高器件的長(zhǎng)期精確度,并減少生產(chǎn)的元件數(shù)。DS3231提供商級(jí)和工業(yè)級(jí)溫度范圍,采用16引腳、300 mil的SO封裝。RTC保持秒、分、時(shí)、星期、日期、月和年信息。當(dāng)遇到少于31天的月份,將自動(dòng)調(diào)整月末日期,包括閏年補(bǔ)償。時(shí)鐘的工作格式可以是24小時(shí)或帶-AM/PM指示的12小時(shí)格式。提供2個(gè)可編程日歷鬧鐘和1路可編程方波輸出。地址與數(shù)據(jù)通過I2C雙向串行傳輸。通過精密的、經(jīng)過溫度補(bǔ)償?shù)碾妷夯鶞?zhǔn)和比較器來監(jiān)視VCC狀態(tài),檢測(cè)電源故障,提供復(fù)位輸出,并在必要時(shí)自動(dòng)切換到備用電源。另外,監(jiān)視引腳可作為手動(dòng)按鈕輸入,以產(chǎn)生外部復(fù)位信號(hào)。
DS3231的引腳功能說明[1]如下:32 kHz是32 kHz頻率輸出;VCC用于主電源的DC引腳;SQW為低電平有效中斷或方波輸出;是低電平有效復(fù)位引腳;N.C.表示無連接,外部必須接地;GND為地;VBAT為備用電源輸入;SDA為串行數(shù)據(jù)輸入、輸出;SCL為串行時(shí)鐘輸入。
圖1為DS3231時(shí)鐘與微控制器連接的典型接口電路[1-2]。
圖1 D3231時(shí)鐘與微控制器連接的接口電路
微控制器通過I2C總線與DS3231連接,DS3231的RST與微控制器的相連。DS3231的VCC接系統(tǒng)電源VCC,VBAT為備用電池輸入,該引腳應(yīng)連接一個(gè)低泄漏電容進(jìn)行去耦。為低電平有效中斷或方波輸出,該漏極開路輸出要求外接上拉電阻,如果不使用,可保持開路。微控制器主要通過I2C總線向時(shí)鐘芯片DS3231寫時(shí)間信息,DS3231以寫入的時(shí)間信息為基準(zhǔn)精確走時(shí)。上電后,微控制器從時(shí)鐘芯片讀取時(shí)間信息并存入內(nèi)存供系統(tǒng)使用,器件每隔64 s測(cè)量一次溫度,通過調(diào)節(jié)晶體的負(fù)載電容,使其在指定溫度達(dá)到0 ppm的精度,最終達(dá)到提高時(shí)鐘精度的目的[3]。即使系統(tǒng)斷電一段時(shí)間后重新上電,時(shí)鐘芯片內(nèi)的實(shí)時(shí)數(shù)據(jù)仍能被正確讀出。
DS3231采用I2C總線與系統(tǒng)微控制器進(jìn)行通信,I2C總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備,由于接口直接在組件之上,因此I2C總線占用空間少,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本。它支持多主控,任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線[4]。一個(gè)主控能夠控制信號(hào)的傳輸和時(shí)鐘頻率。I2C總線通過兩根連線(串行時(shí)鐘線SCL和雙向傳送SDA)實(shí)現(xiàn)半雙工同步數(shù)據(jù)傳輸,確保兩器件之間地址和數(shù)據(jù)信息的雙向傳輸。它采用器件地址的硬件設(shè)置方法(即每個(gè)器件具有一個(gè)確定的ID),通過軟件尋址,從而避免器件的片選信號(hào)線尋址,使硬件系統(tǒng)擴(kuò)展靈活簡(jiǎn)便[5]。為保證通信正常,必須保證I2C總線上的數(shù)據(jù)能夠順利傳送。在數(shù)據(jù)開始傳送前,首先讓I2C接口進(jìn)行初始化。圖2為I2C總線初始化流程。
圖2 初始化DS3231接口程序流程
DS3231的I2C接口的初始化操作可通過微控制器在總線上發(fā)送一個(gè)有效START條件來實(shí)現(xiàn),因?yàn)槲⒖刂破鳟a(chǎn)生的START信號(hào)能夠終止DS3231的I2C接口當(dāng)前的數(shù)據(jù)收、發(fā)過程,并將該接口置于START條件后的待命狀態(tài)。但要發(fā)送一個(gè)有效的START條件,必須在DS3231釋放SDA數(shù)據(jù)線時(shí)才能實(shí)現(xiàn)。如果SDA數(shù)據(jù)線處于低電平狀態(tài),這時(shí),可以讓系統(tǒng)微控制器產(chǎn)生一個(gè)附加的SCL脈沖來迫使DS3231接口送出下一位數(shù)據(jù)。假設(shè)下一位數(shù)據(jù)仍然為邏輯“0”,就繼續(xù)產(chǎn)生附加的SCL脈沖,經(jīng)過多個(gè)SCL脈沖后,DS3231就會(huì)釋放SDA數(shù)據(jù)總線[6]。
完成I2C總線的初始化后,接著進(jìn)行控制和狀態(tài)寄存器的初始化設(shè)置,確定正確的數(shù)據(jù)范圍,就可以運(yùn)行相應(yīng)的測(cè)控程序。
本文首先簡(jiǎn)介DS3231的特點(diǎn)、工作原理及引腳功能,設(shè)計(jì)了高精度時(shí)鐘器件DS3231與微控制器之間通信的硬件接口與軟件接口,本設(shè)計(jì)具有一定的通用性,對(duì)應(yīng)用DS3231器件進(jìn)行系統(tǒng)設(shè)計(jì)有一定的借鑒意義[7]。
[1]黃勤河,李景新.RX-8025及其在微機(jī)系統(tǒng)中的應(yīng)用[J].電子設(shè)計(jì),2004(5):87-89.
[2]田春雨,張旭輝,趙玉梅,等.實(shí)時(shí)時(shí)鐘RX-8025的原理及其應(yīng)用[J].電測(cè)與儀表,2003(5):48-51.
[3]高美珍,毛欲民,劉進(jìn)軍.AVR單片機(jī)與串行時(shí)鐘器件DS3231的接口設(shè)計(jì)[J].電子設(shè)計(jì)工程,2007,15(5):47-51.
[4]趙 輝,董德存.I2C總線技術(shù)及其應(yīng)用實(shí)例[J].徽型電胎應(yīng)用,2005,21(4):61-63
[5]杜剛強(qiáng),張 雪,施明賢,等.實(shí)時(shí)時(shí)鐘DS3231讀取信息出錯(cuò)的分析[J].單片機(jī)與嵌入式,2008(6):70-71.
[6]李根岱.可校準(zhǔn)實(shí)時(shí)時(shí)鐘芯片的研究和設(shè)計(jì)[D].武漢:華中科技大學(xué),2007.
[7]陳 斌.RCT DS1511在信息記錄中的應(yīng)用[J].電子設(shè)計(jì)工程,2009,17(2):85-86.