DS18S20 的核心功能是它能直接讀取數字式溫度傳感器,用戶可設置溫度傳感器的分辨率 9,10,11或 12 bits,等於溫度增加 0.5℃,0.25℃,0.125℃,0.0625°C,默認分辨率是 12 bits。DS18S20 接上電源在一個低功耗的閒置狀態,啟動溫度測量和 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 1 和 bit 0 是未定義,9 bits 分辨率,bit 2,1,0是未定義。
溫度寄存器 (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=55(11111為負)
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 至 11 同 TH 和 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 所述。
請問一下,寫入DS18B20是LSB,那讀取DS18B20時是MSB開始的嗎?
回覆刪除先讀取LSB暫存器
刪除作者已經移除這則留言。
刪除謝謝您的回覆,我還有一些問題想再請教一下,不知道您是否有遇到這個問題「DS18B20讀取溫度為0xFFFF」,不知道這是延遲時間問題,還是程式設計問題?
刪除先謝謝你的留言!讀到0xFFFF的資料,代表所有 Data 都是在高電位,首先要確定是否可以讀取 DS18B20 的 ID? 如果可以,DS18B20 應該沒有問題,那麼可能是程式問題,包括DS18B20時間延遲問題,因為有些非 MAXIM 的 DS18B20 的有機會 Timing 是不同!
回覆刪除今天剛剛有確認過了,是DALLAS DS18B20,我想應該剩下來的就是延遲問題。
回覆刪除