DS1821使用說明
寫在前面:
本文內容部分取材自DALLAS公司的DATASHEET資料,再加上個人的一些使用經驗,如有錯誤,歡迎指正。
最近利用時間,將DS1821的溫度電路做起來了,光是看datasheet就耗掉很多的時間,英文當初沒學好,這時才知道重要。僅將DS1821的使用上的一些重點,以及一些datasheet文件把他中文化,讓網友可以參考。至於實際應用的電路,會另闢文章說明,供大家參考。
DS1821概述
1.DS1821是一顆由DALLAS公司出品的溫度sensor,解析度為1∘C,溫度範圍為-55∘C ∼+125∘C。
2.只要使用一支腳,就可以控制DS1821的各種功能,基本上我覺得,他已經算是一個微處理器了。雖然他只有3支腳,一支接正電源,一支接GND,一支是控制腳。所以在控制上,他可以節省使用I/O接腳,對於簡化電路來說,是非常好的選擇。
3.輸出訊號是數位8bits訊號,不是類比訊號,因此可以省去AD轉換的麻煩,輸出的資料可以直接給各種數位電路直接使用處理,對於一些非電子科系的單晶片設計者來說,算是非常簡單易用的。
4.我個人覺得DS1821唯一的缺點是,價格太貴了,市面上的售價大概是150元左右。
DS1821外觀包裝
DS1821的操作模式
1-wire bus模式
這真的很難翻譯,DALLAS公司把這種模式定義成一種通信協定模式,我把他稱為單線控制模式。當DS1821進入此模式時,使用者可以對DS1821下達指令,包括設定DS1821各種功能,寫入資料或是讀出DS1821內部的暫存器資料或是溫度資料。DS1821的資料都是存放在EEPROM中,因此使用者不用擔心資料會因為停電後就會消失。
自動調溫模式(thermostat
mode),
此模式可以讓DS1821依據設定在TH及TL暫存器內的值,判斷溫度是否高低於TH,當溫度高於TH,DQ腳輸出為High(條件是狀態暫存器的POL bit=1),然後維持這個狀態,直到溫度低於TL的設定溫度時,DQ腳位電位會轉態為Low電位。如果狀態暫存器的POL bit=0時,則狀態正好相反。那就是溫度高於TH時,DQ腳輸出是Low,然後維持狀態,一直到溫度低於TL時,DQ腳才會輸出High,這有點像是磁滯控制的方式。
自動調溫模式的設定,也必須先在1-wire bus模式下先做好設定後,才能使用。而且當自動調溫模式使用後,如果溫度已經低於TL或是高於TH設定的溫度時,狀態暫存器中相對的THF及TLF旗標,也會被設定為1,並且不會歸0,必須由使用者寫入0。因此可以經由判斷THF或是THL旗標,得知溫度是否達到TL或是TH的設定。這個模式的DS1821,本身就像一個單純的溫度開關,所以被稱為自動調溫模式(thermostat mode)。
DS1821的暫存器
狀態/結構暫存器(status/configuration
register)
這個暫存器是DS1821非常重要的一個暫存器,所有DS1821的動作模式設定,或是旗標狀態,都跟他有關,因此要使用DS1821,必須先了解這個暫存器的內容意義。
R |
R |
R |
R/W |
R/W |
R/W |
R/W |
R/W |
DONE |
1 |
NVB |
THF |
TLF |
T/R |
POL |
1SHOT |
bit7 |
|
|
|
|
|
|
bit0 |
R表示只能讀
R/W表示能讀跟寫
這些可讀寫的bit,都是EEPROM方式。
bit 7 DONE位元,當DS1821設定在1SHOT模式時,指示是否已完成溫度轉換工作,當完成時,本位元會被設定成1。
bit 6 無作用。
bit 5 NVB位元,指示EEPROM是否正在進行寫入資料工作,當本位元為0時,表示EEPROM閒置中。當本位元為1時,表示EEPROM正在處理資料讀寫中。
Bit 4 THF位元,THF=0時,表示目前量測的溫度沒有超過儲存在TH暫存器內的設定值。THF=1時,表示目前量測的溫度已經超過儲存在TH暫存器內的設定值。當本位元被設定為1時,必須由使用者自行再設定回0,不會自動歸零。
Bit 3 TLF位元,TLF=0時,表示目前量測的溫度沒有低於儲存在TL暫存器內的設定值。THF=1時,表示目前量測的溫度已經低於儲存在TL暫存器內的設定值。當本位元被設定為1時,必須由使用者自行再設定回0,不會自動歸零。
Bit 2 T/R位元,T/R=0時,表示DS1821開機時是處於1-wire模式。而當T/R=1表示DS1821開機時是處於自動調溫模式(thermostat mode)。
Bit 1 POL位元,POL=0時,表示DS1821設定成自動調溫模式時,他的動作輸出(DQ腳位)電位是Low準位,而當POL=1時,表示DS1821設定成自動調溫模式時,他的動作輸出(DQ腳位)電位是High準位。
Bit 0 1SHOT位元,1SHOT=0時,表示連續溫度轉換模式。而當1SHOT=1時,表示1SHOT模式。
1-wire bus模式系統
由於DS1821只有一條傳輸腳,因此所有的動作都只能透過串列訊號,將指令送進DS1821中,bit0(LSB)先進,bit7(MSB)最後進入。使用者要做的,就是利用單晶片這類的可程式硬體,將DS1821的指令變成串列資料送進DS1821中,以便控制DS1821的動作。
硬體結構,請見下圖
指令傳送步驟順序
1.硬體重置Initialization
藉由reset動作,使DS1821重置,重置的步驟如後所述。
I. 先將DQ腳電位拉到Low準位,並且要維持最少480us的時間。DS1821在剛接上電源時,他的DQ腳位是處於High準位的,如果DQ腳沒有處於High準位,請先將DQ腳拉到High準位。因此要重置DS1821時,必須先將DQ腳拉低到Low準位至少480us的時間。
II. 此時DS1821在DQ腳拉低準位Low超過480us後,使用者必須先判斷DQ腳是否真的已經變為Low準位?確定DS1821 DQ腳位變為Low準位後,DS1821又會自動將DQ腳準位重新拉高到High準位,並且維持約60∼240us時間。這時使用者必須判斷DS1821 DQ腳位,是否真的已經回到High準位。
III. 維持DQ腳在High準位420us左右的時間,以確保訊號正確。
2.DS1821功能指令
在DS1821硬體重置完成後,也就是已經進入1-wire bus模式,接下來就可以對DS1821下達各種指令了。DS1821的指令共有9種,並且以十六進位的數字表示,分述如下,使用者使用時,直接將這些十六進位的數字傳輸給DS1821就可以達到控制DS1821的目的。
溫度讀取指令,代碼AAh
開始溫度轉換指令,代碼EEh
停止溫度轉換指令,代碼22h
寫入資料到溫度上限TH暫存器指令,代碼01h
寫入資料到溫度下限TL暫存器指令,代碼02h
讀取資料到溫度上限TH暫存器指令,代碼A1h
讀取資料到溫度下限TL暫存器指令,代碼A2h
寫入資料到狀態暫存器指令,代碼0Ch
讀取狀態暫存器的資料指令,代碼ACh
讀取計數器的資料指令,代碼A0h
載入斜率累加器的資料到計數器暫存器內的指令,代碼41h
3.資料傳輸
當指令已經傳給DS1821後,接下來就是傳輸資料給DS1821,以便將資料寫入DS1821相關的暫存器中。有些功能指令是沒有本步驟的,如溫度讀取指令或是溫度轉換之類的指令。
控制DS1821一定都是遵循上述的3個步驟進行,而且要注意時序上的控制。
自動調節溫度模式Thermostate
mode
本模式其實在前面已經敘述過,只是將狀態暫存器的T/R位元設定成1即可,設定的方式也是先進入1-wire
bus模式,然定完成即可在DS1821送電後,就進入自動調節溫度模式Thermostate
mode。
時序控制說明
茲將DS1821的控制方法,以時序步驟說明,以方便網友參考。
將DS1821寫入資料程序:
記得一件事,DS1821一次只能寫入一個資料,如果寫入的資料有兩個(因為設定狀態暫存器一定是要寫入資料到DS1821兩次的,一次是告訴DS1821我要使用狀態暫存器,第二次寫入的就是這個狀態暫存器裡面我要設定的值,這點是網友必須要注意的。),比如說先寫入0x0C後,還要再寫入另一個資料,就必須再重複下面的步驟6~11一次。
1.先將DQ
PIN High 1us。
2.再將DQ
PIN 拉到Low電位,時間最少要480us以上。
3.然後再將DQ
PIN拉高到High準位,這時DS1821會偵測上升緣訊號並且會等待15~60us後,又會自動的將DQ
PIN拉低到Low電位約60~240us。
4.確定上述步驟DQ
PIN已被拉到Low準位後,再判斷DQ
PIN是否又自動再度將DQ
PIN拉高到High準位。如果DS1821已經將DQ
PIN拉高到High準位,表示DS1821已經完成初始化設定,並且已經可以開始接受指令。
5.程式延遲420us,以確保DS1821正確完成上述動作,然後就可以開始對DS1821下達指令。
6.記得先將0x0C數值先寫入DS1821,然後再寫入其他數值資料到DS1821中。
7.如果寫入0到DS1821時,只要把DQ腳電位拉低即可。
8.如果寫入1到DS1821時,就要先把DQ腳拉低約1us後,再將DQ腳拉到High。
9.保持資料狀態要60∼120us的時間。
10.將DQ腳拉高到High,也就是說,每寫入一個bits後,就必須要把DQ腳拉到High。
11.回到步驟7,寫入下一個bit,直到寫完8個bit的資料為止。
如果要繼續寫入下一個數值到DS1821中時,就再重複上面的步驟6∼10。只是在步驟6時的寫入的資料不一樣喔!網友應該知道我在說什麼吧?
將DS1821設定為溫度轉換的程序:
1.先將DQ
PIN High 1us。
2.再將DQ
PIN 拉到Low電位,時間最少要480us以上。
3.然後再將DQ
PIN拉高到High準位,這時DS1821會偵測上升緣訊號並且會等待15~60us後,又會自動的將DQ
PIN拉低到Low電位約60~240us。
4.確定上述步驟DQ
PIN已被拉到Low準位後,再判斷DQ
PIN是否又自動再度將DQ
PIN拉高到High準位。如果DS1821已經將DQ
PIN拉高到High準位,表示DS1821已經完成初始化設定,並且已經可以開始接受指令。
5.程式延遲420us,以確保DS1821正確完成上述動作,然後就可以開始對DS1821下達指令。
6.寫入0xEE數值到DS1821中。
7.如果寫入0到DS1821時,只要把DQ腳電位拉低即可。
8.如果寫入1到DS1821時,就要先把DQ腳拉低約1us後,再將DQ腳拉到High。
9.保持資料狀態要60∼120us的時間。
10.
降將DQ腳拉高到High,也就是說,每寫入一個bits後,就必須要把DQ腳拉到High。
11.
回到步驟7,寫入下一個bit,直到寫完8個bit的資料為止。
將DS1821內部溫度資料讀出的程序:
1.先將DQ
PIN High 1us。
2.再將DQ
PIN 拉到Low電位,時間最少要480us以上。
3.然後再將DQ
PIN拉高到High準位,這時DS1821會偵測上升緣訊號並且會等待15~60us後,又會自動的將DQ
PIN拉低到Low電位約60~240us。
4.確定上述步驟DQ
PIN已被拉到Low準位後,再判斷DQ
PIN是否又自動再度將DQ
PIN拉高到High準位。如果DS1821已經將DQ
PIN拉高到High準位,表示DS1821已經完成初始化設定,並且已經可以開始接受指令。
5.程式延遲420us,以確保DS1821正確完成上述動作,然後就可以開始對DS1821下達指令。
6.寫入0xAA數值到DS1821中,寫入這個值的用意是做什麼?也請到前面的資料複習一下,要把前面的內容消化一下喔!。
7.如果寫入0到DS1821時,只要把DQ腳電位拉低即可。
8.如果寫入1到DS1821時,就要先把DQ腳拉低約1us後,再將DQ腳拉到High。
9.每個bit資料要保持資料狀態60∼120us的時間。
10.
將DQ腳拉高到High,也就是說,每寫入一個bits後,就必須要把DQ腳拉到High。
11.
回到步驟7,寫入下一個bit,直到寫完8個bit的資料為止。
接下來是讀出DS1821內部的溫度資料:
12.
將DQ腳拉到Low約1us。
13.
再將DQ腳拉到High。
14.
延時15us。
15.
判斷DQ腳的準位為0或1,這個就是從DS1821讀出的資料。
16.
每個bit資料要保持資料狀態60∼120us的時間。
17.
回到步驟15,讀取下一個資料,直到8個bit的資料讀完為止(8bit的溫度資料)。
從上面的設定程序,我們可以得到一個結論,那就是DS1821平時是不會做出任何的輸出動作的,一定要由使用者下達命令(指令)給它,他才會將結果輸出。而且不論是做哪種讀寫動作,步驟1∼步驟5都是一定會用到的。所以每個DS1821的指令運用,使用者必須要確實去了解,就自然能夠完全的操作這顆DS1821了。
還有就是狀態暫存器(status/configuration
register)
聯絡EMAIL:rushoun@gmail.com