引 言
一般來說,,總線數越少,連接就越簡單,,因而串行總線嵌入式元件在許多應用場合頗受歡迎,。但正因為只有1根線,該類元件的編程要緊扣硬件和時鐘,,難度大于I2C總線和SPI總線,。本文以數字溫度傳感器DSl8B20為例,介紹一種實用和簡單的編程方案,。
1 DS18B20的精簡編程考慮
測溫分辨率:通過設置配置寄存器,,DS18B20有0.5℃、0.25℃,、0.125℃和0.062 5℃幾種溫度可供選擇,。如果不作選擇,缺省值為12位,,即最高分辨率0.062 5℃,,這樣可省去相關寫EEPROM的命令。圖1為溫度格式,。
溫度報警高限TH和低限TL:如果設置了TH和TL,,DS18B20將在溫度高于TH或低于TL時做出響應。這要用到寫入EEPROM的命令,,將可改寫RAM(Scratchpad RAM)拷入EEPROM,。其實,,在很多應用場合,這樣的報警設置完全可以在MASTER(如單片機)中完成,,從而節(jié)省DS18B20的編程,。這只要不使用報警搜索命令(Alarm search command)即可。
光刻ROM(lasered ROM)命令:一共有6個,。對于只要單個DS18B20的場合,,如果不考慮讀ROM中的序列號代碼,不允許報警等功能,,只要進行測溫的話,,用一個跳過ROM(Skip ROM)命令就足夠了。
RAM有關的命令:一共有6個,。如果在DS18B20的電源端專配電源,,不設置高低溫報警,只需使用“ConvertT”和“Read Scratch”命令即可,。前者開始進行溫度轉換(時間約需750 ms),,后者將溫度值及循環(huán)冗余校驗碼CRC等9字節(jié)讀入MASTER(如單片機)。
關鍵時序:盡管測量時可以作上述簡化,,但DS18B20的時序必須嚴格遵循,。最苛刻的時間要求應是讀時槽(read time slots):MASTER在數據線上發(fā)出一個下降沿表示讀時槽開始,時間至少保持1μs,,然后停止驅動數據總線,。DS18B20在數據線上輸出約15 μs的數據。在這一時間段內,,MASTER必須及時采樣數據線,。這樣的定時要求與之相連的單片機必須工作在較高的頻率,如主頻為32 kHz就無法滿足15μs內完成采樣的要求,。
2 一個簡單實用的程序設計方案
采用上述精簡方案后,,基于單片機PIC16F628A(主頻為4 MHz)實現的測溫程序如下:
到此開始讀9個字節(jié)scratchpad,并檢查CRC,。如無誤,,再次調用rp子程序復位DS18B20,結束本次測量;如出錯,,轉出錯處理子程序,。為使系統(tǒng)具有一定的容錯能力,出錯時也可將上述程序再試一遍,,如連續(xù)3次都出現CRC檢查錯則轉出錯處理子程序,。
以上方案已長期(數月)用于氣象溫度測量,正常可靠,。