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