目录
概要
学习使用DS18B20温度传感器
温度转换规则
总线控制器(可以理解为主机,例51单片机)必须发送【44h】命令,DS18B20才开始检测,上电默认精度为12位。
温度>0,s=0;实际温度 = 实测值 * 0.0625; 注:设置的精度不同,乘以的系数也不同。s代表最高五位,最高五位为1,说明为负数。(数据输出共16位)
温度<0,s=1;实际温度 = (~实测值)*0.0625;
例如:
该图中使用的精度为12位,所以计算温度时候,需要*0.0625。
DS18B20读取温度使用流程
- DS18B20复位
- 写入字节0xcc,跳过ROM指令
- 写入字节0x44,开始温度转换
- 延时
- DS18B20复位
- 写入字节0xcc,跳过ROM指令
- 写入字节0xbe,读取高速暂存器
- 读取暂存器的第0个字节,即温度数据的LSB(低八位)
- 读取暂存器的第1个字节,即温度数据的HSB(高八位)
- DS18B20复位,表明数据读取结束
- 将LSB和HSB整合成一个16位数据
- 判断读取结果的符号,进行正负温度的数据处理
DS18B20复位
复位可以理解为系统初始化,需要按照时许编程
按照时序来看,先给持续给一段低电平,再拉高电平持续一段时间。
检测DS18B20是否存在
当主机从DQ主线发送信息到DS18B20,如果DS18B20接收到,则将DQ电平拉低为0,过一段时间后再将DQ主线挂起,拉高电平。如果DQ=0;说明DS18B20存在。
从主机向DS18B20写命令
写命令的同时也要注意,在向DQ主线中写入0、1时,时序也不相同。写命令的时候需要先写低位,后写高位。如何实现先写地位后写高位呢。通过&0x01获得最低位,再通过将要写入的命令>>=1获取第二个低位。
主机向DS18B20可写入的指令码
因为在使用的时候只用了一个DS18B20,所以直接从0xcc写入命令即可。
DS18B20读取主机传过来的命令
DS18B20读取命令的时候也要根据传过来的命令的码元0、1的不同选择不同的时序。要先一位一位的读,再将读到的16位转为两个字节
根据时序一位一位读取命令
将读到的16位转为2字节
DS18B20的初始化和开始转换命令
DS18B20的初始化
DS18B20的开始转换
DS18B20连续读两个字节的数据
主程序开始
总结
主程序中先初始化ds18b20温度传感器,初始化完成后,不断地进行温度检测,如果想让温度传感器实现温度监测,就要根据ds18b20使用流程进行配置。最后根据读取到的数据判断正负温度。这里读取到的数据是带有小数点的,要实时显示到动态数码管中的话,就考虑将温度变为整数,存放到动态数码管,再根据小数点的位置,位选设置点亮。