1-Wire溫度傳感器的快速編程
一般來(lái)說(shuō),總線(xiàn)數越少,連接就越簡(jiǎn)單,因而串行總線(xiàn)嵌入式元件在許多應用場(chǎng)合頗受歡迎。但正因為只有1根線(xiàn),該類(lèi)元件的編程要緊扣硬件和時(shí)鐘,難度大于I2C總線(xiàn)和SPI總線(xiàn)。本文以數字溫度傳感器DSl8B20為例,介紹一種實(shí)用和簡(jiǎn)單的編程方案。
1 DS18B20的精簡(jiǎn)編程考慮
測溫分辨率:通過(guò)設置配置寄存器,DS18B20有0.5℃、0.25℃、0.125℃和0.062 5℃幾種溫度可供選擇。如果不作選擇,缺省值為12位,即最高分辨率0.062 5℃,這樣可省去相關(guān)寫(xiě)EEPROM的命令。圖1為溫度格式。

溫度報警高限TH和低限TL:如果設置了TH和TL,DS18B20將在溫度高于TH或低于TL時(shí)做出響應。這要用到寫(xiě)入EEPROM的命令,將可改寫(xiě)RAM(Scratchpad RAM)拷入EEPROM。其實(shí),在很多應用場(chǎng)合,這樣的報警設置完全可以在MASTER(如單片機)中完成,從而節省DS18B20的編程。這只要不使用報警搜索命令(Alarm search command)即可。
光刻ROM(lasered ROM)命令:一共有6個(gè)。對于只要單個(gè)DS18B20的場(chǎng)合,如果不考慮讀ROM中的序列號代碼,不允許報警等功能,只要進(jìn)行測溫的話(huà),用一個(gè)跳過(guò)ROM(Skip ROM)命令就足夠了。
RAM有關(guān)的命令:一共有6個(gè)。如果在DS18B20的電源端專(zhuān)配電源,不設置高低溫報警,只需使用“ConvertT”和“Read Scratch”命令即可。前者開(kāi)始進(jìn)行溫度轉換(時(shí)間約需750 ms),后者將溫度值及循環(huán)冗余校驗碼CRC等9字節讀入MASTER(如單片機)。
關(guān)鍵時(shí)序:盡管測量時(shí)可以作上述簡(jiǎn)化,但DS18B20的時(shí)序必須嚴格遵循。最苛刻的時(shí)間要求應是讀時(shí)槽(read time slots):MASTER在數據線(xiàn)上發(fā)出一個(gè)下降沿表示讀時(shí)槽開(kāi)始,時(shí)間至少保持1μs,然后停止驅動(dòng)數據總線(xiàn)。DS18B20在數據線(xiàn)上輸出約15 μs的數據。在這一時(shí)間段內,MASTER必須及時(shí)采樣數據線(xiàn)。這樣的定時(shí)要求與之相連的單片機必須工作在較高的頻率,如主頻為32 kHz就無(wú)法滿(mǎn)足15μs內完成采樣的要求。
2 一個(gè)簡(jiǎn)單實(shí)用的程序設計方案
采用上述精簡(jiǎn)方案后,基于單片機PIC16F628A(主頻為4 MHz)實(shí)現的測溫程序如下:

到此開(kāi)始讀9個(gè)字節scratchpad,并檢查CRC。如無(wú)誤,再次調用rp子程序復位DS18B20,結束本次測量;如出錯,轉出錯處理子程序。為使系統具有一定的容錯能力,出錯時(shí)也可將上述程序再試一遍,如連續3次都出現CRC檢查錯則轉出錯處理子程序。
以上方案已長(cháng)期(數月)用于氣象溫度測量,正??煽?。
評論