網頁

2012年6月11日 星期一

DIY - PIC:PIC18F4550 數字溫度計 – DS18B20 測溫操作 (一百三十一)

DIY - PICPIC18F4550 數字溫度計 – DS18B20 測溫操作 (一百三十一)

DS18S20 的核心功能是它能直接讀取數字式溫度傳感器,用戶可設置溫度傳感器的分辨率 9101112 bits,等於溫度增加 0.50.250.1250.0625°C,默認分辨率是 12 bitsDS18S20 接上電源在一個低功耗的閒置狀態,啟動溫度測量和 A-to-D 轉換,Master 必須發出一個T [44H] 轉換命令。轉換後,溫度數據會存儲在 2-byte 的暫存器 (scratchpad memory) 內的溫度寄存器 (temperature register) DS18S20 返回到空閒狀態。 如果 DS18S20 是外接電源供Master 會發出“讀取時段”(Read Time Slots) 後發出轉換T命令,當溫度轉換過程中 DS18S20 將回應發送0,當溫度完成 DS18S20 將回應發送1。如果 DS18S20 是寄生電源供電,在溫度轉換過程中總線會強行上拉,以至這個通知技術不能被使用。

 
DS18S20 輸出數據是用攝氏度表示,華氏度則會利用程式或對表轉換,溫度數據會存儲在 16-bit 符號擴展補數 (sign-extended two’s complement number) 溫度寄存器 (Figure2)Sign bit (S) 代表溫度的正負值,S=0 是正溫度、S=1 是負溫度。如果 DS18B20 的分辨率是 12 bits,在溫度寄存器的所有數據都是有效。但對於11 bits 分辨率,bit 0 是未定義。 10 bits 分辨率,bit 1bit 0 是未定義,9 bits 分辨率,bit 210是未定義。

溫度寄存器 (Temperature Register)

DS18B20 中的溫度感測器完成對溫度的測量,用 16-bit 符號擴展的二進位補數讀數形式提供,以0.0625/LSB 形式表達,其中 S 為符號位元。例如 +125 的數位輸出為 07D0H,+25.0625的數位輸出為 0191H,-25.0625的數位輸出為 FF6FH,-55的數位輸出為 FC90H

12位元解析度時的兩個溫度位元組的具體格式如下:


低位元組
2^3
2^2
2^1
2^0
2^-1
2^-2
2^-3
2^-4
高位元組
S
S
S
S
S
2^6
2^5
2^4


其中高位元組前5位元都是符號位元 S, 若解析度低於12 bit , 相應地使最低為0, : 當解析度為10 bit 時, 低位元組為:


低位元組
2^3
2^2
2^1
2^0
2^-1
2^-2
0
0
高位元組
S
S
S
S
S
2^6
2^5
2^4

Table 1給出了數字輸出數據的例子,12位分辨率轉換為相應的溫度讀數

測量資料以16位元帶符號位元擴展的二進位補數形式存放單片機讀取溫度,一次讀 2位元組16位元,讀完將低 11位元的二進位轉化為十進位後乘 0.0625 即為實際溫度,只需要判斷11位即可還需要判斷溫度正負:前5位元為符號位元,1為負,0為正。

1)前5位為1時,讀取溫度為負值,實際溫度=測得數值需要取反加1再乘0.0625
  -55 = 11111 10010010000 低11位取反 011 0110 1111(十進位879> 1(880) > 0.0625 > 實際溫度880*0.0625=5511111為負)  

2)前5位為0時,讀取溫度為正值,實際溫度=測得數值乘0.0625
  +125 = 00000 11111010000 低11位十進位為 2000 > 2000*0.0625=125  00000位正


警報信號操作 (Alarm Signaling)
DS18B20 的執行溫度轉換後,溫度數值會進行比較兩個用戶定義 (User-defined) 8-byte TH TL 寄存器的存儲數值,Sign bit (S) 代表溫度的正負值,S=0 是正溫度、S=1 是負溫度。TH TL 寄存器是非易失(Nonvolatile EEPROM),斷電仍能保存數據。只有溫度寄存器 bits 4 11TH TL  8-bit 寄存器作比較,如果測得的溫度是低於或等於 TL 或高於或等於 TH,觸發警報和 DS18B20 的內部設置警報標誌。每次溫度測量後標誌會被更新。

Master 在總線發出警報搜尋指令 [ECh] 後,Master 便可以檢查總線上的所有 DS18B20 的警報標誌狀態,任何 DS18B20 設置警報標誌會回應指令,Master 會準確地知道哪些 DS18B20 是有警報。如果存在警報條件或 TH TL 的設置已經改變,下一個溫度轉換時應做驗證警報狀態。

   
DS18B20 的功能指令
Master 使用了 ROM 指令與它希望的 DS18B20 溝通後,Master 可以發出的 DS18B20 功能指令,這些指令允許 Master 寫入和讀取 DS18B20 的暫存器,啟動溫度轉換,並確定電源模式。  DS18B20 的功能指令如下 Table 3 所述。

   

6 則留言:

  1. 請問一下,寫入DS18B20是LSB,那讀取DS18B20時是MSB開始的嗎?

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 謝謝您的回覆,我還有一些問題想再請教一下,不知道您是否有遇到這個問題「DS18B20讀取溫度為0xFFFF」,不知道這是延遲時間問題,還是程式設計問題?

      刪除
  2. 先謝謝你的留言!讀到0xFFFF的資料,代表所有 Data 都是在高電位,首先要確定是否可以讀取 DS18B20 的 ID? 如果可以,DS18B20 應該沒有問題,那麼可能是程式問題,包括DS18B20時間延遲問題,因為有些非 MAXIM 的 DS18B20 的有機會 Timing 是不同!

    回覆刪除
  3. 今天剛剛有確認過了,是DALLAS DS18B20,我想應該剩下來的就是延遲問題。

    回覆刪除