您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>傳感器>

ds18b20負(fù)溫度,DS18B20數(shù)據(jù)處理支持負(fù)溫度

2017年11月06日 18:35 網(wǎng)絡(luò)整理 作者: 用戶評(píng)論(0

  單片機(jī)測溫芯片DS18B20 是一款常用的IC,那么它有何優(yōu)勢和特點(diǎn)呢?對(duì)于ds18b20 又是如何處理和支持負(fù)溫度的呢?一起來了解一下。

  ds18b20優(yōu)勢和特點(diǎn)

 ?。?)在溫度轉(zhuǎn)換精度為±0.5℃時(shí),電壓范圍:3.0~5.5V,寄生電源方式下可由數(shù)據(jù)線供電。既可以用寄生電源供電,也可采用外部電源供電。

  (2)獨(dú)特的單線接口方式:DS18B20與微處理器連接僅需一個(gè)I/O口線便可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。無需變換其他電路,即可直接輸出被測溫度值。

 ?。?)支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫。

 ?。?)溫度測量范圍為-55℃~+125℃,在-10~+85℃時(shí)精度為±0.5℃,固有測溫分辨率為0.5℃。

 ?。?)掉電保護(hù)功能:內(nèi)部有EEPROM(Electrically-Erasable Programmable Read-Only Memory,可擦可編程只讀存儲(chǔ)器),系統(tǒng)掉電后,它仍可保存分辨率及報(bào)警溫度的設(shè)定值。

 ?。?)在9位分辨率時(shí)最長轉(zhuǎn)換時(shí)間為93.75ms;12位分辨率時(shí),最長轉(zhuǎn)換時(shí)間為750ms。

 ?。?)直接以數(shù)字信號(hào)方式輸出溫度測量結(jié)果,以“一線總線”串行方式傳送給CPU (Central Processing Unit,中央處理器),同時(shí)可傳送校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。

 ?。?)負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)被燒毀,但不能正常工作。

 ?。?)可編程分辨率為9~12位,對(duì)應(yīng)的分辨溫度為0.5℃、0.25℃、0.125℃、和 0.0625℃。

  (10)每個(gè)芯片唯一編碼,支持聯(lián)網(wǎng)尋址,零功耗等待。

  DS18B20數(shù)據(jù)處理支持負(fù)溫度

  18B20片內(nèi)有一個(gè)9Byte的 SRAM 和一個(gè)3Byte的 EEPROM。如下圖:

  ds18b20 負(fù)溫度,DS18B20數(shù)據(jù)處理支持負(fù)溫度

  其中我們需要使用的就是SRAM中的前兩個(gè)字節(jié),這里儲(chǔ)存的就是我們要的溫度值。這兩個(gè)字節(jié)的結(jié)構(gòu)如下:

  ds18b20 負(fù)溫度,DS18B20數(shù)據(jù)處理支持負(fù)溫度

  我們可以看到,LS(低字節(jié))的高四位 和 MS(高字節(jié))的低四位共8個(gè)字節(jié)構(gòu)成了實(shí)際的一個(gè)帶符號(hào)位的字節(jié)數(shù)據(jù)可以表示(-128~127)足夠表示18B20的溫度范圍。MS的高四位為符號(hào)為的擴(kuò)展,當(dāng)溫度值為正時(shí)MS高5位(圖中S的五位)全為0,溫度值為負(fù)時(shí)全為1。LS的低四位為小數(shù)部分,不是要求太高的話可以忽略。我們這里暫不套路小數(shù)部分的處理方法。

  下面我們就來討論整數(shù)部分的數(shù)據(jù)處理方法。

  整數(shù)部分我們實(shí)際只要高字節(jié)的第四位和低字節(jié)的高四位。首先通過移位求或后生成一個(gè)無符號(hào)位的字節(jié)。然后判斷這個(gè)無符號(hào)的值是否大于127,如果大于128說明是個(gè)負(fù)溫度需要處理,否則就可以直接返回。

  18B20的負(fù)溫度使用補(bǔ)碼形式輸出,我們只需要對(duì)這個(gè)字節(jié)進(jìn)行取反加1后就是這個(gè)負(fù)溫度的絕對(duì)值,這時(shí)候我們需要一個(gè)符號(hào)標(biāo)記告訴輸出函數(shù)這是個(gè)負(fù)溫度需要顯示負(fù)號(hào)即可。

  下面貼出數(shù)據(jù)處理部分的代碼:

  uchar readtemp() //讀取溫度

  {

  uchar temp = 0;

  uchar tmp[2]

  reset();

  writebyte(0xCC); // 跳過序列號(hào)

  writebyte(0x44); // 啟動(dòng)溫度轉(zhuǎn)換

  delayms(1000);

  reset();

  writebyte(0xCC);

  writebyte(0xBE); //讀9個(gè)寄存器,前兩個(gè)為溫度

  tmp[0]=readbyte(); //低位

  tmp[1]=readbyte(); //高位

  temp = ((tmp[1]《《4)&0xF0)|((tmp[0]》》4)&0x0F);

  if(temp》127)

  {

  temp = ~temp + 1;

  }

  return (temp);

  }

非常好我支持^.^

(13) 92.9%

不好我反對(duì)

(1) 7.1%

( 發(fā)表人:陳翠 )

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?