基于PIC單片機的便攜式測試記錄儀設計
2 軟件設計
本文引用地址:http://dyxdggzs.com/article/87442.htm本記錄儀軟件由實(shí)時(shí)處理程序和組成記錄儀諸功能部件的驅動(dòng)程序組成。
2.1 實(shí)時(shí)處理程序
實(shí)時(shí)處理程序調用相關(guān)驅動(dòng)程序完成模擬量采集、數字濾波、插值運算、實(shí)時(shí)顯示、記錄合成及記錄保存。本記錄儀采用的記錄格式從高至低依序為:傳感器號,量程,采集值,年,月,日,時(shí),分,秒。
2.2 驅動(dòng)程序設計
驅動(dòng)程序設計的基本思想是:首先完成相關(guān)接口、寄存器的初始化,然后根據具體物理部件產(chǎn)生微操作時(shí)序,并對操作過(guò)程中遇到的異常事件進(jìn)行容錯處理。
2.2.1 讀/寫(xiě)E2PROM 驅動(dòng)程序
I2C總線(xiàn)由時(shí)鐘線(xiàn)(SCL)和數據線(xiàn)(SDA)組成。根據I2C總線(xiàn)協(xié)議,將圖1所采用的24LC65芯片的讀/寫(xiě)操作按操作順序分解為:使總線(xiàn)處于空閑狀態(tài)(SCL、SDA均為高電平);發(fā)送讀/寫(xiě)啟動(dòng)信號(SCL保持高電平,SDA從高變低產(chǎn)生下降沿);在數據線(xiàn)SDA上讀或寫(xiě)數據位(SCL高電平時(shí),SDA狀態(tài)為有效的讀或寫(xiě)數據位,SDA狀態(tài),即0或1的變化必須在 SCL低電平期間完成);發(fā)送讀/寫(xiě)結束信號(SCL保持高電平,SDA從低變高產(chǎn)生上升沿)。如果為寫(xiě)操作,每寫(xiě)完1字節數據后,24LC65在數據線(xiàn)SDA上回送握手應答信號,表示該字節數據已被可靠寫(xiě)入。以上微操作通過(guò)匯編語(yǔ)言編程實(shí)現。
本記錄儀以記錄方式讀/寫(xiě)數據片。因此,對寫(xiě)來(lái)說(shuō),首先讀字典片,以便用其中的表頭參數判斷當前數據片是否已寫(xiě)滿(mǎn)。若已寫(xiě)滿(mǎn),則在LCD上顯示無(wú)寫(xiě)空間標記代碼,然后返回休眠狀態(tài);否則,將記錄寫(xiě)入記錄指針所指向的數據片中,同時(shí)對表頭參數進(jìn)行修改。在寫(xiě)過(guò)程中,重要的是處理疵點(diǎn)單元。盡管24LC65在寫(xiě)過(guò)程中出現的疵點(diǎn)概率極少,但若不正確處理,則會(huì )導致目標數據丟失甚至出現系統死機現象。作者曾采用數據輪詢(xún)技術(shù)進(jìn)行容錯處理,收到了良好的效果。其基本思想是:每當在數據線(xiàn)上寫(xiě)完1字節數據后,便反復查詢(xún)24LC65回送的應答信號,但最多不超過(guò)50次(此數足夠24LC65寫(xiě)入時(shí)間);若超過(guò)查詢(xún)次數仍無(wú)應答信號,便認為該單元為疵點(diǎn)單元,將其地址記入疵點(diǎn)單元地址隊列,并使疵點(diǎn)單元計數器加1,然后在下一比鄰單元繼續寫(xiě)入原數據。如果連續兩單元為疵點(diǎn)單元,則認為整個(gè)芯片有問(wèn)題,此時(shí),在LCD上顯示該單元所在的芯片號(芯片號參見(jiàn)圖1),然后,返回休眠狀態(tài)。
對讀來(lái)說(shuō),首先判斷數據片是否為空。若為空,則在LCD上顯示無(wú)記錄標記代碼,然后返回休眠狀態(tài)。否則,繼續判斷數據片是否有疵點(diǎn),如果無(wú)疵點(diǎn),則從數據片首址開(kāi)始按序讀出所有記錄;否則,在按序讀記錄過(guò)程中,根據疵點(diǎn)單元地址隊列內容,跳過(guò)所有疵點(diǎn)單元,以保證讀出的記錄連續、真實(shí)、可靠。
2.2.2 采集驅動(dòng)程序設計
A/D轉換器MAX189所帶串口與單片機PIC16C74的SPI口完全兼容。因此,在A(yíng)/D轉換完成后,只要啟動(dòng)單片機SPI口產(chǎn)生13個(gè)同步時(shí)鐘脈沖便可連續兩次從SPI數據緩沖器上獲得12位轉換結果。由于本記錄儀采集的參數個(gè)數依現場(chǎng)安裝的傳感器數不同而不同,因此,驅動(dòng)程序必須能予以自動(dòng)識別。圖2為采集驅動(dòng)程序流程,其基本設計思想是:首先讀識別片,以確定實(shí)際安裝的傳感器數量,然后從0通道傳感器開(kāi)始進(jìn)行采集,直到實(shí)際安裝的最后一個(gè)傳感器采集完畢為止。圖2中:CHAN:通道寄存器;COUNT:傳感器數量寄存器。
3 測試設計
測試設計是通過(guò)測試程序完成對記錄儀本身各功能硬件的性能測試。測試程序獨立于實(shí)際應用程序,在單獨的單片機中,使用時(shí)只要拔掉記錄儀模板上的單片機而用其代之即可。測試程序設計的基本思想是:首先根據不同測試對象(即部件)產(chǎn)生不同的測試數據和測試期望數據,然后以測試數據為入口參數,調度相關(guān)驅動(dòng)程序產(chǎn)生目標數據,最后用測試期望數據與目標數據進(jìn)行比較,以此判斷所測硬件性能之良劣。
3.1 E2PROM測試設計
E2PROM測試需要與PC機通訊。其基本原理是:首先產(chǎn)生8種測試數據:0x00、0xff、0x55、0xaa、0x0f、0xf0、0x5a、0xa5(0x表示16進(jìn)制數),然后分別以此8種測試數據為入口參數,交替調度寫(xiě)、讀E2PROM驅動(dòng)程序3次(即先寫(xiě)后讀3次)。每讀一次,與測試期望數據(此處測試數據與測試期望數據相同)進(jìn)行比較,若不相等,則對相應片錯誤計數器加1。測試結果實(shí)時(shí)地顯示在記錄儀LCD和PC機上。LCD只顯示總錯誤個(gè)數,PC機則依次顯示、保存總錯誤個(gè)數及錯誤單元地址。
3.2 A/D測試設計
A/D測試也需要與PC機通訊。由于本記錄儀最多可采集8路傳感器參數,因此,測試程序對鍵盤(pán)重新定義如下:當手動(dòng)、自動(dòng)、通訊、打印、清零鍵有鍵按下時(shí),對應測試0~4通道傳感器;當手動(dòng)、自動(dòng)、通訊鍵其中之一與清零鍵同時(shí)按下時(shí),則對應測試5~7通道傳感器。測試只對放大器滿(mǎn)量程的10%、50%、90%等3點(diǎn)進(jìn)行采集。其原理是:首先,測試程序掃描鍵盤(pán),當掃描到有鍵按下時(shí),則調度采集驅動(dòng)程序對該鍵盤(pán)定義的通道傳感器進(jìn)行連續采集,采集結果不作任何處理,實(shí)時(shí)地顯示在記錄儀LCD和PC機上。LCD只顯示當前的A/D轉換碼值,PC機則顯示并保存當前A/D轉換碼值、各點(diǎn)最大、最小轉換碼值及兩者絕對差值。技術(shù)人員可以此判斷前向通道(傳感器、放大器、A/D)工作性能的好壞。筆者曾連續測試0通道傳感器6個(gè)半小時(shí),發(fā)現最大碼差為9,表明前向通道工作相當穩定。
3.3 實(shí)時(shí)時(shí)鐘測試設計
實(shí)時(shí)時(shí)鐘DS1302測試需要借助PC機完成。其測試原理是:首先PC機上的測試程序讀PC系統日歷信息─年、月、日、時(shí)、分、秒、星期,并進(jìn)行發(fā)送。記錄儀在接收后,立即調度寫(xiě)DS1302驅動(dòng)程序將接收的PC系統日歷信息寫(xiě)入DS1302相關(guān)功能寄存器中,并使DS1302以此為時(shí)基進(jìn)行計時(shí)。此后,進(jìn)入記錄儀發(fā)送、PC接收的無(wú)限循環(huán)狀態(tài),即:每隔10ms,記錄儀調度一次讀DS1302驅動(dòng)程序,并將獲得的最近日歷信息予以迅速發(fā)送;而處于接收狀態(tài)的PC接收后,立即與PC系統當前日歷信息進(jìn)行比較,如此循環(huán),直到人工干預結束測試為止。在上述測試過(guò)程中,記錄儀LCD只實(shí)時(shí)地顯示日歷信息的分、秒兩位,PC機則實(shí)時(shí)地顯示記錄儀和PC機兩端完整的日期、時(shí)間及兩者比較差。另外,通過(guò)觀(guān)察記錄儀LCD上顯示的分、秒位變化,也可初步判定DS1302的性能。筆者曾連續運行該測試程序24小時(shí),偏差極小,足以滿(mǎn)足本系統的需要。
4 實(shí)際應用
本記錄儀已投入實(shí)際應用一年多,其可靠性、穩定性、操作性和精度均受用戶(hù)歡迎。不足之處是:目前功耗還比較大,作者在+12V供電時(shí)測得電流為45.5mA,尚需進(jìn)一步改進(jìn)。
參考文獻
1 竇振忠. PIC系列單片機原理和程序設計.北京:北京航空航天大學(xué)出版社,1998
2 王福瑞. 單片機測控系統設計大全. 北京:北京航空航天大學(xué)出版社,1999
3 王幸之. 單片機應用系統抗干擾技術(shù). 北京:北京航空航天大學(xué)出版社,2000
評論