一、温度传感器
DS18B20是Maxim(美信公司)通过单片机生产的温度传感器1-Wire协议与DS18B通信,最后读取温度。-Wire总线的硬件接口非常简单,只需要DS18B20数据引脚连接到单片机IO口即可。
引脚功能:
特性:
1.测温范围 :-55℃~ 125℃,固有测温误差1℃
2.支持多点网络功能,多点网络功能DS18B20可以并联在唯一的三线上,最多只能并联8条
3.分辨率:可编程分辨率从9位到12位
4.最多在750ms将温度转换为12位数字
温度暂存器:
通常使用0、1、4字节,前两个字节与温度有关,后者是配置温度计精度和最大转换时间的寄存器。
高字节前五个字节表示温度正(00000 0)负(1111 1)后7位是温度的整数,低4位是温度的小数。
DS18B20精度设置:
二、程序
DS18B20的DQ连接PA6,需要连接TDQ与P1的跳线帽。
//rom和功能指令 #define OW_SKIP_ROM 0xCC #define DS18B20_CONVERT 0x44 #define DS18B20_READ 0xBE float ds18b20_read(void) { uint8_t low_temp,high_temp; ow_reset(); // 初始化 ow_byte_wr(OW_SKIP_ROM); // 跳过rom ow_byte_wr(DS18B20_CONVERT);//转换温度 delay_us(750000); ow_reset(); // 初始化 ow_byte_wr(OW_SKIP_ROM); // 跳过rom ow_byte_wr(DS18B20_READ); // 读暂存器 low_temp = ow_byte_rd(); // 读低温字节 high_temp = ow_byte_rd(); // 读高温字节 return ((high_temp<<8)|low_temp)/16.0; }
DS18B20常用的ROM命令和功能指令
DS18B收集到的温度为16位,如果高度为5位1,则为负温度,则需要将收集到的值反转并添加到真实温度中。如果高5位为0,则采集的温度为整数,有些则用于操作0x07ff,这里默认是零温,有没有这一步都可以。
返回值除以16.0是获得实际温度,从测量值到实际温度的转换,DS18B20的精度为0.0625度,即读回数据的最低位代表0.0625度,实际测量值x0.0625即可。