1. 明确目的
DS18B20是美国DALLAS半导体公司推出的一种数字化单总线器-数字温度计。既然是数字温度计,那么它一定具备这样的能力-把周围环境的温度信号转换成数字信号。那么这个转换的结果放到哪里去了呢?存放到了一个叫做Scratchpad的上面,这个Scratchpad是什么意思不用去管它,只需要知道它是一个SRAM就可以了。这个Scratchpad一共有9个字节(BYTE0~BYTE8),转换的数字信息就存放在BYTE0和BYTE1,如下图所示。所以,目的就很明确了,对于DS18B20模块就是去读Scratchpad的BYTE0和BYTE1.
2. 思路分析
现在目的已经知道了,就是读Scratchpad(read scratchpad)的BYTE0和BYTE1. 那么怎么样Read Scratchpad呢?当然是去查看DS18B20的芯片手册了。阅读说明书你会发现Read Scratchpad是一个功能命令(DS18B20 FUNCTION COMMANDS),类似的还有其他很多功能命令,如下图所示:
说明书上已经讲的非常清楚了,要求每次在访问DS18B20的时候一定要遵循以下步骤,如下所示,
简单的讲,你想发送一个功能命令Read Scratchpad, 那必须在它前面加两步,初始化命令(Initialization)和ROM命令(ROM Command)。初始化命令只有一个,很容易确定,但是ROM命令有多个,需要找到一个与功能命令Read Scratchpad相匹配的ROM命令。如果总线上只有一个DS18B20模块,选择Skip ROM就可以了。
这样整个步骤就很简单了,先初始化,然后发送skip rom命令,紧接着发送read scratchpad命令,然后开始接收DS18B20传送的数据,第0和第1个字节就是我们所需要的。这样读出来的全部是0和1组成的信号,我们还需要将这些0和1组成的信号翻译成“温度值”。怎么样翻译,去查看说明书上的温度-数据对应表就可以了,如下所示:
注意这个表中的数据是补码形式,如果你只是考虑温度为正的情况,那么就不用去管原码,反码和补码了。因为对于正数的原码,反码和补码都是一样的。
如果读写操作正确的话,此时计算出来的温度应该是+85摄氏度。通过这个值可以判断你的读写程序和温度计算过程是否正确。那么为什么是+85摄氏度呢?在一上电的时候,DS18B20处在一个"idle state",简单的讲就是它没有工作,没有采集周围环境的温度。Scratchpad的BYTE0和BYTE1里面放的默认值是+85,所以你读到的其实是它的默认值。如果你想让DS18B20开始工作,那么很简单,发送一个Convert T命令就可以了。注意Convert T也是一个功能命令(Function Command),同样的按照前面的规则,给它添加初始化命令和ROM命令。
这样整个过程是不是完了呢?注意DS18B20完成温度的采集和转换是需要时间的,好比你敲隔壁的门,那你发出“敲门”这个命令后,你同学过来开门是需要时间的,在这个过程中你要做的事情就是等待。同样的,当你发送一个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 (发送读scratchpad命令)
(8) rcv data (接收DS18B20传过来的数据)
(9) cal (计算温度值)
(10) display (把这个值显示出来)
4. 参考代码
DS18B20参考代码.rar
(50.62 KB)
上一篇:
10分钟理解OLED显示模块
10分钟理解LCD1602如何显示自定义字符
10分钟理解LCD1602液晶显示模块
|