|
1. 明確目的
DS18B20是美國(guó)DALLA半導(dǎo)體公司推出的一種數(shù)字化單總線器-數(shù)字溫度計(jì)。既然是數(shù)字溫度計(jì),那么它一定具備這樣的能力-把周圍環(huán)境的溫度信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)。那么這個(gè)轉(zhuǎn)換的結(jié)果放到哪里去了呢?存放到了一個(gè)叫做Scratchpad的上面,這個(gè)Scratchpad是什么意思不用去管它,只需要知道它是一個(gè)SRAM就可以了。這個(gè)Scratchpad一共有9個(gè)字節(jié)(BYTE0~BYTE8),轉(zhuǎn)換的數(shù)字信息就存放在BYTE0和BYTE1,如下圖所示。所以,目的就很明確了,對(duì)于DS18B20模塊就是去讀Scratchpad的BYTE0和BYTE1.
思路1.png (166.29 KB, 下載次數(shù): 124)
下載附件
2018-4-11 14:42 上傳
2. 思路分析
現(xiàn)在目的已經(jīng)知道了,就是讀Scratchpad(read scratchpad)的BYTE0和BYTE1. 那么怎么樣Read Scratchpad呢?當(dāng)然是去查看DS18B20的芯片手冊(cè)了。閱讀說明書你會(huì)發(fā)現(xiàn)Read Scratchpad是一個(gè)功能命令(DS18B20 FUNCTION COMMANDS),類似的還有其他很多功能命令,如下圖所示:
思路2.png (118.62 KB, 下載次數(shù): 110)
下載附件
2018-4-11 14:52 上傳
說明書上已經(jīng)講的非常清楚了,要求每次在訪問DS18B20的時(shí)候一定要遵循以下步驟,如下所示,
思路3.png (73.38 KB, 下載次數(shù): 119)
下載附件
2018-4-11 14:56 上傳
簡(jiǎn)單的講,你想發(fā)送一個(gè)功能命令Read Scratchpad, 那必須在它前面加兩步,初始化命令(Initialization)和ROM命令(ROM Command)。初始化命令只有一個(gè),很容易確定,但是ROM命令有多個(gè),需要找到一個(gè)與功能命令Read Scratchpad相匹配的ROM命令。如果總線上只有一個(gè)DS18B20模塊,選擇Skip ROM就可以了。
這樣整個(gè)步驟就很簡(jiǎn)單了,先初始化,然后發(fā)送skip rom命令,緊接著發(fā)送read scratchpad命令,然后開始接收DS18B20傳送的數(shù)據(jù),第0和第1個(gè)字節(jié)就是我們所需要的。這樣讀出來的全部是0和1組成的信號(hào),我們還需要將這些0和1組成的信號(hào)翻譯成“溫度值”。怎么樣翻譯,去查看說明書上的溫度-數(shù)據(jù)對(duì)應(yīng)表就可以了,如下所示:
思路4.png (90.57 KB, 下載次數(shù): 119)
下載附件
2018-4-11 15:14 上傳
注意這個(gè)表中的數(shù)據(jù)是補(bǔ)碼形式,如果你只是考慮溫度為正的情況,那么就不用去管原碼,反碼和補(bǔ)碼了。因?yàn)閷?duì)于正數(shù)的原碼,反碼和補(bǔ)碼都是一樣的。
如果讀寫操作正確的話,此時(shí)計(jì)算出來的溫度應(yīng)該是+85攝氏度。通過這個(gè)值可以判斷你的讀寫程序和溫度計(jì)算過程是否正確。那么為什么是+85攝氏度呢?在一上電的時(shí)候,DS18B20處在一個(gè)"idle state",簡(jiǎn)單的講就是它沒有工作,沒有采集周圍環(huán)境的溫度。Scratchpad的BYTE0和BYTE1里面放的默認(rèn)值是+85,所以你讀到的其實(shí)是它的默認(rèn)值。如果你想讓DS18B20開始工作,那么很簡(jiǎn)單,發(fā)送一個(gè)Convert T命令就可以了。注意Convert T也是一個(gè)功能命令(Function Command),同樣的按照前面的規(guī)則,給它添加初始化命令和ROM命令。
這樣整個(gè)過程是不是完了呢?注意DS18B20完成溫度的采集和轉(zhuǎn)換是需要時(shí)間的,好比你敲隔壁的門,那你發(fā)出“敲門”這個(gè)命令后,你同學(xué)過來開門是需要時(shí)間的,在這個(gè)過程中你要做的事情就是等待。同樣的,當(dāng)你發(fā)送一個(gè)Convert T命令后,你需要等待DS18B20完成溫度采集和轉(zhuǎn)換的工作。那么等待多長(zhǎng)呢,這個(gè)與你設(shè)置精度有關(guān),精度越高,需要的時(shí)間越長(zhǎng),最多不超過750ms。當(dāng)然這個(gè)過程中,你也可以采用忙信號(hào)檢測(cè)的方式來判斷。
3. 操作步驟
這樣整個(gè)操作步驟就非常簡(jiǎn)單了,
- (1) initial (DS18B20初始化)
- (2) skip rom
- (3) convert T (讓DS18B20開始工作采集周圍溫度)
- (4) busy check (等待DS18B20完成采集)
- (5) initial (DS18B20初始化)
- (6) skip rom
- (7) read scratchpad (發(fā)送讀scratchpad命令)
- (8) rcv data (接收DS18B20傳過來的數(shù)據(jù))
- (9) cal (計(jì)算溫度值)
- (10) display (把這個(gè)值顯示出來)
復(fù)制代碼
4. 參考代碼
DS18B20參考代碼.rar
(50.62 KB, 下載次數(shù): 238)
2018-4-11 15:53 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
上一篇:
10分鐘理解LCD1602液晶顯示模塊
10分鐘理解LCD1602如何顯示自定義字符
10分鐘理解OLED顯示模塊
|
評(píng)分
-
查看全部評(píng)分
|