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