基于AVR單片機和DS18B20的多點溫度測量系統(tǒng)
1DS18B20和BASCOM-AVR簡介
DS18B20是美國DALLAS公司生產的單總線數(shù)字溫度傳感器,從DS18B20讀出或寫入的信息僅需要一根口線。在單總線工作方式下,允許一條信號線上掛接多個DS18B20,特別適合于構成遠距離多點溫度測控系統(tǒng),從而大大簡化了系統(tǒng)布線,提高了可靠性,降低了成本,而實現(xiàn)這些的關鍵在于每片DS18B20都有唯一的ROM代碼(64位產品序列號)。在多點溫度測控系統(tǒng)中,ROM代碼是識別和操作DS18B20的基礎;無論讀取還是選擇對某一個傳感器進行操作,主機必須發(fā)送64位ROM代碼。
BASCOM-AVR是MSC Electronics公司推出的基于AVR系統(tǒng)的軟件開發(fā)仿真平臺。程序語句和Micrsoft VB/QB高度兼容;為標準LCD顯示器、I2C芯片和單總線協(xié)議芯片等擴充了專用語句;內置模擬終端和程序下載功能;內置軟件仿真平臺用于測試;編譯產生的運行代碼可在所有帶內部存儲器的AVR微控制器中運行。DEMO版本可生成2KB程序代碼。BASCOM-AVRDEMO版安裝軟件包可到http://www.mcselec.com免費下載。
3.1獲取序列號(64位ROM代碼)
操作單總線數(shù)字溫度傳感器必須嚴格按規(guī)定的協(xié)議操作,即應按以下順序操作:初始化、ROM操作命令、暫存存儲器操作命令、數(shù)據(jù)傳輸。在ROM操作命令中,有兩條命令專門用于獲取傳感器序列號:讀ROM命令(33H)和搜索ROM命令(F0H)。讀ROM命令只能在總線上僅有一個傳感器的情況下使用。搜索ROM命令則允許總線主機使用一種“消去”處理方法來識別總線上所有的傳感器序列號。為了建立64位ROM代碼和測量位置點傳感器之間的關系,我們選用讀ROM命令(33H)。DS18B20的64位ROM代碼結構如圖2所示:
如果某一傳感器損壞,只需按上述連接方法,撥動開關K2輸入損壞傳感器的位置編號,將新的DS18B20插入Z1插座重新測試,單片機自動根據(jù)讀取的編號值將測得的ROM代碼取代E2PROM中相同位置編號處的原ROM代碼即可。
3.2多點溫度的巡回測量
開關K1打開,將T斷開處接上。由于已經在上面獲取了多個DS18B20的ROM代碼并在AVR單片機內部的E2PROM中建立了測量位置點和傳感器64位ROM代碼之間的關系表,因此對多個溫度的巡回測量的步驟如下:
(1)發(fā)跳過ROM命令CCH。
(2)發(fā)啟動所有在線的DS18B20進行溫度轉換命令44H。
(3)延遲1s。
(4)發(fā)匹配ROM命令55H。
(5)按照E2PROM中建立的關系表的順序取出64位ROM代碼發(fā)送到單總線。
(6)發(fā)讀溫度值命令BEH,讀取溫度值。
(7)進行CRC校驗和數(shù)據(jù)處理后送LCD顯示器顯示。
(8)重復第4步到第7步,直到所有的DS18B20測量處理完。
(9)再重復第1步到第8步,進行下一輪的巡回測量。
如果只對某一個DS18B20進行溫度測量,只要將第1步的跳過ROM命令CCH,改為匹配ROM命令55H,將撥動開關撥到和要測量的DS18B20的編號相對應的數(shù)值上,單片機90S8515讀取撥動開關的數(shù)值(編號)n,到E?2PROM建立的關系表中從(n-1)×8開始的單元取出ROM代碼發(fā)送到總線,去掉第8步,其余和上面步驟相似即可。
測試中,DS18B20選擇芯片出廠時默認的12位轉換精度,轉換的結果用16位符號擴展的二進制補碼讀數(shù)形式提供。關于DS18B20可參考DALLAS公司的數(shù)據(jù)手冊。
多點溫度巡回測量的主要程序如下:
上述兩個程序可以編寫為兩個子程序,主程序在初始化工作完成后,讀開關K1的狀態(tài),如為打開狀態(tài)調用溫度巡回測量部分的子程序;如為閉合狀態(tài)調用獲取ROM代碼子程序。
4.1設置報警限值
DS18B20設有溫度高低限報警功能。DSl8B20的存儲器由兩部分組成:一個是9字節(jié)的靜態(tài)RAM,其中第0和第1字節(jié)用于存儲16位的溫度轉換值,第2(高溫限TH)和第3字節(jié)(低溫限TL)作為溫度報警限值或通用存儲器單元供用戶使用;另一個是非易失性的E2PROM。當靜態(tài)RAM作為溫度報警限值使用時,可以在系統(tǒng)安裝和工作前,用寫RAM命令4EH將高溫限TH和低溫限TL寫入第2和第3字節(jié)單元。由于靜態(tài)RAM掉電后信息即丟失,因此需要再通過拷貝RAM命令48H將第2和第3字節(jié)單元的溫度報警限值拷貝到E2PROM中。主程序只要在初始化部分使用重調E2PROM命令B8H,就可以將E?2PROM中的溫度報警限值重新拷貝到靜態(tài)RAM中。
4.2報警處理
系統(tǒng)正常工作時,在啟動所有的DS18B20作溫度轉換后,可以使用報警搜索命令ECH,發(fā)現(xiàn)溫度值高于TH或低于TL的數(shù)值時,則讀取報警的DS18B20的ROM代碼,通過查AVR單片機內部E2PROM中測量位置點和傳感器64位ROM代碼之間的關系表即可得到報警的DS18B20的位置編號,從而啟動語音報警或在LCD上顯示報警點的位置編號。
本文的設計方法,將DS18B20 ROM代碼的獲取和溫度的測量融為一體,利用單片機內部的E2PROM建立了測量位置點和ROM代碼之間的關系表,用簡單的硬件及編程方法實現(xiàn)了多點溫度的測量、數(shù)字溫度傳感器的出錯指示和識別,大大有利于系統(tǒng)的調試和擴充,能有效降低成本,縮短開發(fā)周期。在糧庫測溫系統(tǒng)、冷庫測溫系統(tǒng)、中央空調系統(tǒng)、智能建筑自控系統(tǒng)等多點溫度測量系統(tǒng)中將獲得廣泛的應用。