環境監測通常需要小巧靈活的微控制器。如果在這類應用中使用PC機,那么對其計算能力和存儲容量來說都是一種浪費??刹捎靡粋€專用微控制器與溫、濕度傳感器或其他環境監測傳感器通信,讀取并存儲監測數據。為實現更高的靈活性,這些微控制器可連成網絡,各自將監測數據上傳到功能更強大的系統中,對整體環境參數進行分析記錄。本文介紹如何使用低功耗微控制器MAXQ3210實現環境監測應用。增加一個通過一根1-Wire總線實現供電和通信的數字溫度傳感器DS1822,即可用少的元器件構建一個電池供電的非易失溫度記錄系統。
圖1 MAXQ3210 1-Wire溫度記錄儀演示電路所需的元器件
1 設計目標
代碼采用MAXQ匯編語言編寫,在MAXIDE開發環境自帶的標準宏匯編預處理器和匯編器中編譯。該代碼是為MAXQ3210評估板編寫的,因此還需要以下器件(如圖1所示)。
◆ 溫度傳感器: DS1822 經濟型1-Wire 數字溫度傳感器(TO92 封裝)。
◆ RS-232 電平裝換: MAX233ACWP。演示代碼要完成以下任務(如圖2所示):
◆ 通過1-Wire網絡(BitBang)與溫度傳感器DS1822 通信。
◆ 每秒喚醒一次測量溫度。
◆ 將溫度數據存儲在MAXQ3210內部的EEPROM中。
◆ 上電后,以9 600 bps的速率通過串口以Bit-Bang方式發送溫度記錄數據。
◆ 在發送前將溫度數據轉換成容易識別的ASCII格式(十進制華氏度)。
◆ 根據主機要求清空存儲器(擦除在EEPROM中存儲的溫度數據)。
圖2 溫度記錄應用的程序流程圖
幾乎所有低功耗MAXQ 微控制器都可實現這一應用,但MAXQ3210更適用于溫度記錄。(MAXQ3210的內部構成及特點略——編者注)
2 驅動1-Wire網絡
Dallas/Maxim提供一系列使用1-Wire網絡接口的傳感器和其他器件。該接口數據通信和供電僅需一根數據線和一根地線。1- Wire網絡工作在“一主多從”模式(多點網絡),時序非常靈活,允許從機以高達16 kbps的速率與主機通信。每個1-Wire器件都有一個全球的64位ROM ID,允許主機精確選擇位于網絡任何位置的一個從機通信。
1-Wire總線采用漏極開路模式工作,主機(或需要輸出數據的從機)將數據線拉低到地表示數據“0”,將數據線釋放為高表示數據“1”。這通常通過在數據線和Vcc之間連一個分立電阻實現,但MAXQ3210端口引腳支持弱上拉模式,只需將引腳切換到弱上拉模式,數據線即可浮高。因此 MAXQ3210無須外接電阻。由于主機和從機僅需將數據線拉低,而從不將數據線主動拉高,因此數據線可以實現“線或”功能,這可防止多個從機試圖同時通過1-Wire總線發送數據時出現沖突。
為驅動1-Wire網絡,MAXQ3210利用軟件在一個引腳上實現以下類型的時隙。由于1-Wire所有時隙由主機啟動,因此當MAXQ3210 不與從機通信時不需要監測1-Wire線路,有關1-Wire 時序的更多詳細信息請參考DS1822的數據資料。
由于MAXQ3210 每毫秒約等于3個半指令周期(約3.58 MHz),軟件可利用一個端口引腳(P1.6)方便地實現1-Wire協議。實現讀時隙的功能與之類似。注意,在1-Wire總線上所有數據均為低有效位(LSB)先發。
3 用DS1822測量溫度
3.1 DS1822簡介
盡管MAXQ3210可以使用上面的代碼與多數1-Wire 從機器件通信,但在本應用中將主要考慮與DS1822通信。DS1822 是一個1-Wire從機器件,可實現9~12位的攝氏溫度測量,測量結果可被1-Wire主機讀取。與多數1-Wire從機一樣,DS1822可以完全由 1-Wire總線供電,稱為“寄生供電”。DS1822的測量范圍可達-55~+125 ℃,適用于多數的室內外溫度測量應用;溫度分辨率在9位下為0.5 ℃,12位下0.062 5 ℃。進行一次溫度轉換所需時間在低分辨率下約為94 ms,在分辨率下約為750 ms。由于這是一個簡單應用,因此選擇9位分辨率,并忽略小位(0.5 ℃)。這樣就可使整個8位帶符號溫度數據與MAXQ3210的8位累加器匹配。
所有的1-Wire從機器件都支持一個通用指令集,從而使得主機可以判斷總線上的從機數目,讀取ROM ID;并且可以與某一個從機或一組從機進行通信,一旦某個1-Wire從機被激活,主機可以針對該從機類型向其發送特殊指令。其他所有未被激活的從機均處于等待狀態,直到下一個復位脈沖出現,才開始再次監測1-Wire總線。
由于本應用中總線上僅有一個器件,因此可使用簡單的指令集訪問從機器件,而無須讀取從機的ROM ID。當總線上有多個從機器件時,ROM ID被用來區分不同的從機器件。我們的程序中也讀取了一次DS1822的ROM ID,但僅為了演示。
3.2 將測量結果存儲在數據EEPROM中
為防止1-Wire總線偶然出現數據錯誤,演示代碼每次測量都執行3次溫度轉換(A,B和C) ,并從中選擇一個結果存儲。選擇的依據為:
◆ 如果所有數據相同,則存儲該數據。
◆ 如果3個中有兩個數據相同(A = B,B = C或A = C),則選擇該數據存儲。
◆ 如果沒有數據相同,則取中間值存儲。例如,如果A>B>C,則存儲B。
被選中的值被寫入數據EEPROM的一個字中。由于采樣結果為一個字節,每個字的高字節被用來指示該記錄(如字)是否為空。如果高字節為0,則該記錄/字為空;如果高字節非0,則低字節為有效溫度數據。這樣就能區分空記錄和存儲數據為0 ℃的有效數據。
記錄采用循環方式,從數據EEPROM地址020h開始到05Fh結束,然后再回到開始處。 之后每寫入一個新記錄,將擦除一個舊的記錄。當通過串行接口向外發送數據時,應用程序通過查找前面是否又有空記錄的方式定位舊的記錄數據。
3.3 溫度記錄數據
每次上電復位后,應用程序向主機系統發送溫度記錄數據,數據通過10位異步串行接口以9 600 bps的速率發送(1位開始位,8位數據位,1位停止位)。MAXQ3210不帶硬件UART串口,需要使用一個端口引腳模擬。由于本應用只須發送,無須接收,所以實現起來比較簡單。相關程序可從Maxim網站獲得。
4 結論
封裝小、功耗低、I/O靈活的MAXQ3210是電池供電的環境監測應用的選擇。許多1-Wire傳感器可被用來測量溫度、濕度等環境參數,而這些傳感器又可僅通過一個端口實現與MAX3210的接口。,數據還可以被存儲在MAXQ3210自帶的非易失EEPROM 存儲器中,供以后查詢和分析。