DS1820 Digital Thermometer

DS1820這顆感測器在市面上還蠻常見的

他的家族中還有一顆也是頗為被大家使用的是DS1821

這兩顆感測器最大的差別在於DS1821解析度為1度

而DS1820解析度為0.5度...

至於在使用上我個人覺得DS1821應該會比DS1820來的好用一點...

雖然差了0.5度的解析...但是足夠做一般的室溫溫度計...

在控制上來說,DS1820與DS1821是一樣的,唯獨我看到的一個較不同的地方

是在DS1820的輸出值為16bit,而DS1821為8bit

這裡就以DS1821做為介紹

1.OVERVIEW

單以溫度感測而言,DS1820算是一個簡單好用的感測器,市面上的溫度感測器很多,

但是很多都需要透過使用者自行進行A/D的轉換從電壓去計算溫度,在使用上可能較為麻煩

DS1821基本分為TO-92與SO 8pin包裝為主,如下圖

ds1820packing

由上圖所見,不管為TO-92包裝或是SO包裝,其實都只有三隻腳而已,

扣除GND與VDD後便剩下DQ腳

對於這種只有一隻腳的控制方式在datasheet中稱為1-Wire Interface,

網路上也有許多人就直接翻譯成單線控制模式,

(其中DS1820在1-Wire模式中也是屬感溫模式,可以將溫度讀出)

此模式最大特色就是必須使用串列輸入或輸出方式控制...

(其實個人覺得還蠻麻煩的,串列輸出入必須考慮時序問題,但是相對的整體看起來比較簡潔)

綜合以上概述簡單做以下幾點整理

a.DS1820使用單線控制模式(1-Wire)以串列方式輸入或輸出資料

b.其溫度輸出為18bit值,比起一般電壓輸出在進行A/D運算要來的方便

c.DS1821有兩大工作模式,除了第一種溫度轉換以外,可設定溫度上下限值,作為溫度開關

2.DS1820相關指令

*注意:我曾在網路上找到資料,有網友說DS1821與1820可以互用,我認為這是錯的

很簡單的原因是,光是輸出的結果就不同,如前提到的DS1821為8bit而DS1820為16bit

且指令上DS1820與DS1821也是不同的...所以應該是無法直接共用的

a.ROM COMMANDS

˙Read ROM(讀取ROM資料)-[33H]

˙Match ROM(相符ROM資料)-[55H]

˙Skip ROM(跳過ROM)-[CCH]

˙Search ROM(搜尋ROM)-[F0]

˙Alarm Search(警報搜索)-[ECH]

b.FUNCTION COMMANDS

˙CONVERT T(啟動溫度轉換)-[44H]

˙READ SCRATCHPAD(讀取溫度暫存器)-[BEH]

(44H指令執行後,即使用BEH指令將溫度讀出)

˙Write Scratchpad(寫入TH與TL資料)-[4E]

˙Copy Scratchpad(複製TH與TL資料)-[48H]

˙Recall E2(從EEPROM中把TH與TL重新回傳)-[B8H]

˙Read Power Supply(讀取電源狀態)-[B4]

嚴格來說,小弟我英文也很破,所以很多東西我也不知道怎麼翻

也或許可以說有很多東西我可能根本也看不懂...笑...

3.INITIALIZATION 初始化/重置

DS1820在經過Reset後即會進入1-Wire模式,即可對DS1820下達指令

a.Initialization timing / 初始化時序圖

 ds1820inttiming

從時序圖上所見,粗黑線為Master Pulling low即為使用者送出的Low信號

粗灰線部份則為DS1820送出的Pulling Low信號

細黑線部份他是寫Resistor Pullup但時繼上也是算是使用者送出的High信號

在初始化的方法,我看過兩種,第一種是一照時序圖的順序

a.先給DQ腳Low信號最少480us的時間

b.在將信號拉至High準位15-60us此時DS1820會去檢測信號的上升時間

c.在DS1820檢測到之後,會將DQ腳位拉至Low準位60-240us的時間

d.之後檢查DQ腳位是否恢復High準位

e.檢查到DQ腳位回到High準位後即代表初始化完成,即可開始下達相關指令

其次第二種也是我在網路上看到的source code範例,他是直接將DQ腳拉至Low準位後在拉至High準位

而忽略了中間的那段DS1820 Pulling Low信號的程序

a.將DQ腳位拉至Low準位480us以上

b.在直接將DQ腳位拉至High準位480us以上

c.完成初始化可以開始下達相關指令

注意!DS1820不管在做任何事情都必須先經過初始化/Reset的動作.

也就是說上面的步驟,不管是第一種或是第二種,都是必須的

4.DS1820讀/寫程序-時序圖

如同前面所提到的,DS1820只有使用單一隻腳位(DQ腳)作為資料傳輸

所以不管是初始化,或者寫入資料(指令),讀出指令..都是只能透過DQ腳

相對的在讀/寫過程中,這個過程也就是時序,就變的相當的重要

(點圖放大)

ds1820readandwrite

(點圖放大)

a.寫入0與1

從時序圖中我們看到當要寫入0時需要有以下步驟

a.1.將DQ腳位拉至Low信號,信號長度需要大於60us小於120us

a.2.在將DQ信號恢復High信號

a.3.完成寫入1bit 0的動作

 寫入1時

a.4必須先將DQ腳拉至Low信號準位1us的時間

a.5恢復DQ腳High準位,需確保信號長度超過60us的時間

b.讀出0與1

在讀出信號的時候感覺與寫入信號的時序不同,DS1820在讀取時都必須先將DQ腳信號

拉至Low準位1us的時間,在將DQ腳拉至High準位,在拉至High準位後,DS1820會提供我們

14us的時間供我們讀取信號,換句話說,如果當讀出信號是0的時候,即便我們是將DQ腳拉至High準位時

DS1820也會將DQ腳拉至Low準位,以供我們正確讀取到0的信號.綜合上述如下幾點步驟

b.1將DQ腳拉至Low準位1us

b.2在將DQ腳拉至High

b.3在送出High信號後的14us內檢測DQ腳電壓準位,如高電位即為1,如低電位即為0

b.4檢測信號完成後需等待45us後的時間在讀取下一個信號

也就是說,每讀取1bit的過程中都需要在60us內完成,並直到讀完所有bit為止

例如在讀出溫度時,是16bit,就必須將16bit讀完...

如果你問我,那讀到一半中斷在跑回去讀呢?我會回答你...不知道...

不過因為DS1820在做任何動作時,都必須先經過初始化的動作,所以我想應該不太會影響到結果

但是讀到一半的結果一定是不能用的..

至於寫入的話應該也是一樣的,在初始化過後,全部從第0個bit開始

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料