摘? 要: 具有串行傳輸總線I2C接口的實時時鐘/日歷芯片RS5C372A/B在以微處理器PIC16F877為核心的無功補償節(jié)能控制系統(tǒng)中的應(yīng)用實例,并對其與主控CPU PIC16F877的硬件接口電路,、軟件編程設(shè)計中的關(guān)鍵問題作了闡述,。
????關(guān)鍵詞: 串口I2C BUS? 實時時鐘/日歷芯片? RS5C372A/B? PIC16F877
?
隨著微處理器構(gòu)成的控制系統(tǒng)在工業(yè)領(lǐng)域的廣泛應(yīng)用,一些控制系統(tǒng)需要掌握日期和年份信息或更精確的時間顯示及固定時間的報警,。一個控制系統(tǒng)需要高性能,、低功耗,、帶RAM的專用芯片來完成其體積,、功耗,、功能,、精確性及可靠性等因素的控制,而利用實時時鐘/日歷芯片就能很好地解決這些問題。本文主要介紹串行I2C實時時鐘/日歷芯片RS5C372A/B作為控制系統(tǒng)時鐘單元模塊的使用特點,、操作方式及與主CPU的硬件電路接口和軟件編程設(shè)計技術(shù),。
1?無功補償節(jié)能系統(tǒng)結(jié)構(gòu)簡介
由微處理器組成的微控制系統(tǒng)在某些場合需要精確的時間、日期,、日歷顯示和預(yù)定時間報警功能,。準(zhǔn)確地記錄設(shè)備事故發(fā)生的時間或在預(yù)定時間內(nèi)給主系統(tǒng)報警,以便提醒工作人員監(jiān)測機器的工作狀態(tài)和及時發(fā)現(xiàn)故障,對避免設(shè)備的損壞具有重要作用。如電飯鍋,、洗衣機,、空調(diào)等家用電器需要時間的監(jiān)控和報警。專用實時時鐘/日歷芯片組成的時鐘模塊單元就能很好地完成這些功能,。圖1是筆者開發(fā)電力系統(tǒng)無功補償節(jié)能系統(tǒng)的結(jié)構(gòu)框圖,。該系統(tǒng)主要功能:三相交流電壓、電流經(jīng)過諧波電壓,、電流信號檢測,、采樣,經(jīng)A/D轉(zhuǎn)換后傳送到主CPU處理后算出無功補償量,發(fā)出指令投切電容器補償無功功率以達到節(jié)能效果;時鐘模塊單元可以記錄控制系統(tǒng)的運行時間,并通過液晶顯示器顯示;如果控制系統(tǒng)發(fā)生故障,可以記錄故障發(fā)生的時間,以便監(jiān)測人員查清事故發(fā)生的具體時間和原因。
在該控制系統(tǒng)中,主CPU選用PIC系列的16F877型號的單片機,該芯片采用雙列直插,、40pin封裝形式,。主要特征:工作頻率DC20MHz,片內(nèi)有8KBFlash程序存儲器(ROM)、368B數(shù)據(jù)存儲器(RAM),、256B E2PROM程序存儲器(ROM),、14個中斷源、I/O端口(A,、B,、C、D,、E),、3個定時器/計數(shù)器、同步串行通信口MSSP模塊,、異步串行通信口USART,、并行通信口PSP、8個通道的10位模數(shù)轉(zhuǎn)換模塊,。由于PIC16F877片內(nèi)資源比較豐富,能很好地滿足系統(tǒng)的要求,。時鐘模塊單元選用日本RICOH公司的RS5C372A/B實時時鐘/日歷芯片,該芯片具有自動識別閏年到2099年,有12小時制或24小時制時間顯示,同時還可以通過輸出引腳向主CPU定時報警(可以設(shè)定為分鐘、小時,、一星期中的某天)和定時中斷請求(從秒到月份的中斷)等功能,。RS5C372A/B芯片的主要特點是:高性能、低價格,、低功耗和小體積,。
2? 硬件接口電路
在本系統(tǒng)中,由于主控CPU16F877有串行MSSP模塊,具有硬件I2C功能,因此它和RS5C372A/B時鐘芯片之間的通信可以用主控硬件I2C方式實現(xiàn),也可以用其2個普通的I/O端口作為SCL/SDA,按照I2C的時序編寫模擬I2C通信軟件,。模擬I2C靈活方便,移植性強。PIC16F877和RS5C372硬件電路接口示意圖如圖2所示,。
?
為了方便討論,在圖2中,主CPU16F877只畫出和時鐘系統(tǒng)有關(guān)的引腳。RS5C372A/B實時時鐘/日歷芯片內(nèi)部帶有I2C總線協(xié)議,遵循PHILIPS公司的I2C總線協(xié)議進行通信,并通過SCL,、SDA二引腳和主控芯片相通信,且連線簡單,。I2C總線和主CPU的電源及時鐘芯片可以由同一個電源供電,但應(yīng)盡可能用獨立的電源獨自供電,如果是獨立供電,原則上要求向SCL、SDA供電的電源電壓大小不能小于各供電電源,。最好RS5C372A/B芯片有一個獨立的電源,以防系統(tǒng)電源出故障后仍能正常運行,。圖2中,RB4、RB5為PIC16F877外部中斷請求I/O口,接RS5C372A/B芯片的中斷輸出引腳,。由于SCL,、SDA、引腳是開漏極輸出,在實際應(yīng)用電路中,SCL,、SDA,、引腳都應(yīng)該接上拉電阻,其阻值約為10kΩ,以保證信號傳輸?shù)姆€(wěn)定。而時鐘芯片必須接0.1μF的普通電容和22μF的電解電容或4.7μF的鉭電容各1個,以消除毛刺,、噪聲信號的干擾;6,、7腳可以接32.768kHz或32.000kHz的外部時鐘,并通過設(shè)定片內(nèi)寄存器值控制。
3 軟件程序設(shè)計
RS5C372A/B芯片總共有16個計數(shù)器和寄存器,其內(nèi)部器件地址為0H~FH,。這些計數(shù)器和寄存器在缺省狀態(tài),、起始狀態(tài)和讀寫狀態(tài)都各不相同,上電后必須對芯片進行初始化操作,使芯片工作正常后才能對其進行正常的讀寫。RS5C372A/B芯片上電后約要1~2秒才進入開始狀態(tài),然后調(diào)用一個初始化RS5C372A時鐘芯片子程序,讀控制寄存器2中XSTP位的狀態(tài),如果XSTP=0,則可以進入正常的操作程序;若XSTP=1,則把初值賦給控制寄存器2和各個時鐘日歷計數(shù)器,。當(dāng)成功寫入控制寄存器2時,則XSTP=0,。在這個過程中主CPU如沒有ACK回應(yīng)或剛在開始時讀出數(shù)據(jù)為FFH值,則說明主CPU和RS5C372A/B之間的通信沒有成功。RS5C372A/B芯片的監(jiān)測振蕩器停止振蕩功能也是用控制寄存器2所存儲的振蕩器停止標(biāo)志位XSTP的狀態(tài)信息,來檢測RS5C372A/B芯片是不是從0伏起供電或已經(jīng)上電,。這一功能對判斷時鐘芯片內(nèi)部數(shù)據(jù)是否有效極其有用,。
????RS5C372A/B芯片上電初始化流程圖如圖3所示。XSTP位的狀態(tài)很關(guān)鍵,它是在控制寄存器2(內(nèi)部地址為FH)的第4位,。因此在時鐘通信模塊程序中必須編寫一個讀XSTP位的狀態(tài)子程序,以便在通信過程中可以隨時監(jiān)控XSTP位的狀態(tài),。如果XSTP=1,說明芯片運行一段時間后,晶振曾發(fā)生過停振,時鐘芯片數(shù)字已經(jīng)不準(zhǔn)確,需要重新調(diào)整。
?
在程序調(diào)試階段,為了最后確認(rèn)時鐘芯片是不是正常工作,可以在上電后讀出16個寄存器的值和它的缺省值(默認(rèn)值)進行比較,如二值相同則為正常通信,。例如:時間微調(diào)寄存器(07H)和控制寄存器1(0EH)的系統(tǒng)默認(rèn)值都為0,若讀出數(shù)據(jù)不為0,則認(rèn)為工作不正常,應(yīng)重新檢查程序,。RS5C372A/B芯片還有一個內(nèi)部振蕩器(具有高精度的時間微調(diào)電路),通過內(nèi)部的寄存器配置可以方便地調(diào)整因晶體振蕩起伏過寬、季節(jié)變化或溫度變化而造成的時鐘精確性的變化,其調(diào)整精度可達到189ppm(在32.000kHz時可以近似到±194ppm),。
RS5C372A/B器件地址為0110010,雖然遵循I2C協(xié)議進行通信,但因為芯片只有16個寄存器,讀寫數(shù)據(jù)方式和一般的具有I2C的E2PROM和其他的時鐘芯片相比,更靈活且多樣,。RS5C372A/B芯片讀數(shù)據(jù)有以下3種方式。
(1)指定地址讀
指定地址讀I2C的E2PROM和其他時鐘芯片操作方式相同,其區(qū)別是:它通過操作內(nèi)部的地址指針寄存器和組織寄存器來設(shè)定讀寫數(shù)據(jù)的起始地址和字節(jié)數(shù),。
(2)非I2C方式讀
非I2C方式讀是指寫完后不用重新啟動起始位,可直接讀,。雖然不遵循I2C的協(xié)議,但RS5C372A/B芯片允許這樣的讀法,以提高讀數(shù)據(jù)的速度,。
(3)從指針起始處(FH)讀的方式
RS5C372A/B芯片在缺省下指針指向內(nèi)部地址FH起始處,在這種情況下主CPU可以直接讀時鐘芯片的數(shù)據(jù)。特別要注意的是:在讀時間數(shù)據(jù)時要一次連續(xù)讀完,才能得到正確的時間,。一個讀/寫周期應(yīng)該在0.5秒內(nèi)完成,否則容易造成錯誤,即讀出的數(shù)據(jù)是錯誤的卻認(rèn)為是對的,。
RS5C372A/B芯片在I2C模式下,以7位地址方式傳送數(shù)據(jù),最高速率可以達到400kHz。不過據(jù)筆者的經(jīng)驗,在200kHz速率下,RS5C372A/B芯片和主控芯片之間的通信更穩(wěn)定,。
以下是筆者用模擬I2C的方式和通過PIC系列單片機匯編語言編寫的PIC16F877和RS5C372A/B實時時鐘/日歷芯片的通信子程序模塊(但也可以用硬件MSSP模塊中的I2C功能來實現(xiàn)),已經(jīng)通過調(diào)試,。模擬I2C的關(guān)鍵在于按硬件電路時序圖的要求來編寫。在這個通信程序模塊里又可以分為讀/寫N個字節(jié)子程序,、初始化RS5C372A時鐘芯片子程序,監(jiān)測XSTP位狀態(tài)子程序,、讀秒/分/小時子程序、讀星期幾/日/月/年子程序,。讀寫子程序又可以分為編寫通用的啟動起始位子程序,、停止位子程序、位接收(位發(fā)送)子程序,、發(fā)送和接收(8位)數(shù)據(jù)子程序,。限于篇幅,不能寫出所有源代碼。讀的方式可以采用上面三種方式中的一種,。主程序流程圖如圖4所示,讀子程序流程圖如圖5所示(讀子程序采用第1種方式),。
?
4 ?結(jié)? 論
??? 本文介紹了實時時鐘/日歷芯片RS5C372A/B在無功補償控制系統(tǒng)中的具體應(yīng)用,并給出了硬件電路接口和程序設(shè)計。RS5C372A/B芯片編程方便,、靈活,、價格低廉,廣泛應(yīng)用于便攜式儀器(如數(shù)碼相機、遠程控制器,、攝像機)及家用電器等,。相對于其他的時鐘芯片,RS5C372A/B芯片有著很高的性能價格比,不失為一種系統(tǒng)時鐘單元的首選芯片。
?
參考文獻
1? 何立民.I2C總線應(yīng)用系統(tǒng)設(shè)計.北京:北京航空航天大學(xué)出版社,1995
2? 劉和平,黃開長,嚴(yán)利平等譯.PIC16F877X數(shù)據(jù)手冊——28/40腳8位FLASH單片機.北京:北京航空航天大學(xué)出版社,2001
3? Philips Semiconductor.The I2C-BUS Specification Version 2.1.2000
4? RICOH.I2C Bus Serial Interface Real-time Clock ICs?RS5C372A/B Application Manual.1995