单片机学习小组
直播中

陈秀春

7年用户 190经验值
私信 关注

温度传感器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);   返回值

更多回帖

发帖
×
20
完善资料,
赚取积分