标题: 温度传感器18B20数值的准确算法 [打印本页]

作者: wudawei    时间: 2014-12-31 16:22
标题: 温度传感器18B20数值的准确算法
温度传感器18B20是我用的最多的数字式温度传感器。
以前别人给的程序老是碰到两个问题,要么是负温度出不来,要么是不准。
最后还是要自己调程序。自己调的用着放心,看得安逸。
我现在调的程序如下:
//当得到低字节和高字节后,能显示负温度和精确到0.1度的程序如下:
read_temp()/*读取温度值并转换*/
{uchar a,b;
ds1820rst();   //初始化18B20
ds1820wr(0xcc);//跳过读序列号
ds1820wr(0x44);//启动温度转换
ds1820rst();   
ds1820wr(0xcc);//跳过读序列号
ds1820wr(0xbe);//读取温度
a=ds1820rd();  //得到的低字节在a
b=ds1820rd();  //得到的高字节在b
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
    if(tvalue<0x0fff)
   tflag=0;   //正温度时tflag为0
    else
   {tvalue=~tvalue+1;
tflag=1; //负温度时tflag为1
   }
tvalue=tvalue*(0.62487)+0.5; //温度值扩大10倍,精确到1位小数
// 注意不能用书上说的0.625,否则在-50.0度至+150.0度之间总有不准的地方
//经过反复实验,确定为0.62487,这样全部的温度都准了!
//不信?你就0.1度地一个一个数值去试试吧。
return(tvalue);   返回值

作者: 51hei电控2112312    时间: 2015-1-1 23:45
GOOD!!!
作者: lucyhyr    时间: 2015-4-9 16:16
谢谢楼主!
作者: znddcc    时间: 2015-4-10 10:48
疯狂的回复,疯狂的下载!
作者: dingmingzhou    时间: 2015-4-10 22:32
ds18b20可以测到+150度?0字节最低位应当是16分之一度即0.0625度,我认为资料上给出的参数不是我们通过这样的实验,就可以给人改了的,ds18b20的0字节的低4位是小数位(存数范围0---15即16个数)变一个数就变化1/16这不挺科学的吗?你搞出来个0.62487(就算是扩大十倍)从何说起呢?数字温度传感器就是数字传感器。出现测量不准多数是读   写   初始化这三块的程序问题。但有一点你的感觉是对的:别人的程序或许靠不住。

作者: thlb    时间: 2016-3-24 11:19
需要多路的
作者: 784667679    时间: 2016-3-24 13:39
高字节第四位开始都是符号位了,怎么能是<0X0FFF呢,楼主




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1