单片机测温芯片DS18B20 是一款常用的IC,那么它有何优势和特点呢?对于ds18b20 又是如何处理和支持负温度的呢?一起来了解一下。
ds18b20优势和特点
(1)在温度转换精度为±0.5℃时,电压范围:3.0~5.5V,寄生电源方式下可由数据线供电。既可以用寄生电源供电,也可采用外部电源供电。
(3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
(4)温度测量范围为-55℃~+125℃,在-10~+85℃时精度为±0.5℃,固有测温分辨率为0.5℃。
(5)掉电保护功能:内部有EEPROM(Electrically-Erasable Programmable Read-Only Memory,可擦可编程只读存储器),系统掉电后,它仍可保存分辨率及报警温度的设定值。
(6)在9位分辨率时最长转换时间为93.75ms;12位分辨率时,最长转换时间为750ms。
(7)直接以数字信号方式输出温度测量结果,以“一线总线”串行方式传送给CPU (Central Processing Unit,中央处理器),同时可传送校验码,具有极强的抗干扰纠错能力。
(8)负压特性:电源极性接反时,芯片不会被烧毁,但不能正常工作。
(9)可编程分辨率为9~12位,对应的分辨温度为0.5℃、0.25℃、0.125℃、和 0.0625℃。
(10)每个芯片唯一编码,支持联网寻址,零功耗等待。
DS18B20数据处理支持负温度
18B20片内有一个9Byte的 SRAM 和一个3Byte的 EEPROM。如下图:
其中我们需要使用的就是SRAM中的前两个字节,这里储存的就是我们要的温度值。这两个字节的结构如下:
我们可以看到,LS(低字节)的高四位 和 MS(高字节)的低四位共8个字节构成了实际的一个带符号位的字节数据可以表示(-128~127)足够表示18B20的温度范围。MS的高四位为符号为的扩展,当温度值为正时MS高5位(图中S的五位)全为0,温度值为负时全为1。LS的低四位为小数部分,不是要求太高的话可以忽略。我们这里暂不套路小数部分的处理方法。
下面我们就来讨论整数部分的数据处理方法。
整数部分我们实际只要高字节的第四位和低字节的高四位。首先通过移位求或后生成一个无符号位的字节。然后判断这个无符号的值是否大于127,如果大于128说明是个负温度需要处理,否则就可以直接返回。
18B20的负温度使用补码形式输出,我们只需要对这个字节进行取反加1后就是这个负温度的绝对值,这时候我们需要一个符号标记告诉输出函数这是个负温度需要显示负号即可。
下面贴出数据处理部分的代码:
uchar readtemp() //读取温度
{
uchar temp = 0;
uchar tmp[2]
reset();
writebyte(0xCC); // 跳过序列号
writebyte(0x44); // 启动温度转换
delayms(1000);
reset();
writebyte(0xCC);
writebyte(0xBE); //读9个寄存器,前两个为温度
tmp[0]=readbyte(); //低位
tmp[1]=readbyte(); //高位
temp = ((tmp[1]《《4)&0xF0)|((tmp[0]》》4)&0x0F);
if(temp》127)
{
temp = ~temp + 1;
}
return (temp);
}