單片機測溫芯片DS18B20 是一款常用的IC,那么它有何優勢和特點呢?對于ds18b20 又是如何處理和支持負溫度的呢?一起來了解一下。
ds18b20優勢和特點
(1)在溫度轉換精度為±0.5℃時,電壓范圍:3.0~5.5V,寄生電源方式下可由數據線供電。既可以用寄生電源供電,也可采用外部電源供電。
(2)獨特的單線接口方式:DS18B20與微處理器連接僅需一個I/O口線便可實現微處理器與DS18B20的雙向通訊。無需變換其他電路,即可直接輸出被測溫度值。
(3)支持多點組網功能,多個DS18B20可以并聯在唯一的三線上,實現組網多點測溫。
(4)溫度測量范圍為-55℃~+125℃,在-10~+85℃時精度為±0.5℃,固有測溫分辨率為0.5℃。
(5)掉電保護功能:內部有EEPROM(Electrically-Erasable Programmable Read-Only Memory,可擦可編程只讀存儲器),系統掉電后,它仍可保存分辨率及報警溫度的設定值。
(6)在9位分辨率時最長轉換時間為93.75ms;12位分辨率時,最長轉換時間為750ms。
(7)直接以數字信號方式輸出溫度測量結果,以“一線總線”串行方式傳送給CPU (Central Processing Unit,中央處理器),同時可傳送校驗碼,具有極強的抗干擾糾錯能力。
(8)負壓特性:電源極性接反時,芯片不會被燒毀,但不能正常工作。
(9)可編程分辨率為9~12位,對應的分辨溫度為0.5℃、0.25℃、0.125℃、和 0.0625℃。
(10)每個芯片唯一編碼,支持聯網尋址,零功耗等待。
DS18B20數據處理支持負溫度
18B20片內有一個9Byte的 SRAM 和一個3Byte的 EEPROM。如下圖:
其中我們需要使用的就是SRAM中的前兩個字節,這里儲存的就是我們要的溫度值。這兩個字節的結構如下:
我們可以看到,LS(低字節)的高四位 和 MS(高字節)的低四位共8個字節構成了實際的一個帶符號位的字節數據可以表示(-128~127)足夠表示18B20的溫度范圍。MS的高四位為符號為的擴展,當溫度值為正時MS高5位(圖中S的五位)全為0,溫度值為負時全為1。LS的低四位為小數部分,不是要求太高的話可以忽略。我們這里暫不套路小數部分的處理方法。
下面我們就來討論整數部分的數據處理方法。
整數部分我們實際只要高字節的第四位和低字節的高四位。首先通過移位求或后生成一個無符號位的字節。然后判斷這個無符號的值是否大于127,如果大于128說明是個負溫度需要處理,否則就可以直接返回。
18B20的負溫度使用補碼形式輸出,我們只需要對這個字節進行取反加1后就是這個負溫度的絕對值,這時候我們需要一個符號標記告訴輸出函數這是個負溫度需要顯示負號即可。
下面貼出數據處理部分的代碼:
uchar readtemp() //讀取溫度
{
uchar temp = 0;
uchar tmp[2]
reset();
writebyte(0xCC); // 跳過序列號
writebyte(0x44); // 啟動溫度轉換
delayms(1000);
reset();
writebyte(0xCC);
writebyte(0xBE); //讀9個寄存器,前兩個為溫度
tmp[0]=readbyte(); //低位
tmp[1]=readbyte(); //高位
temp = ((tmp[1]《《4)&0xF0)|((tmp[0]》》4)&0x0F);
if(temp》127)
{
temp = ~temp + 1;
}
return (temp);
}