找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5502|回复: 6
打印 上一主题 下一主题
收起左侧

温度传感器18B20数值的准确算法

[复制链接]
跳转到指定楼层
楼主
ID:71407 发表于 2014-12-31 16:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
温度传感器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);   返回值

评分

参与人数 1黑币 +35 收起 理由
王朗的诱惑 + 35 妙,妙啊~

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:70769 发表于 2015-1-1 23:45 | 只看该作者
GOOD!!!
回复

使用道具 举报

板凳
ID:73449 发表于 2015-4-9 16:16 | 只看该作者
谢谢楼主!
回复

使用道具 举报

地板
ID:76567 发表于 2015-4-10 10:48 | 只看该作者
疯狂的回复,疯狂的下载!
回复

使用道具 举报

5#
ID:73833 发表于 2015-4-10 22:32 | 只看该作者
ds18b20可以测到+150度?0字节最低位应当是16分之一度即0.0625度,我认为资料上给出的参数不是我们通过这样的实验,就可以给人改了的,ds18b20的0字节的低4位是小数位(存数范围0---15即16个数)变一个数就变化1/16这不挺科学的吗?你搞出来个0.62487(就算是扩大十倍)从何说起呢?数字温度传感器就是数字传感器。出现测量不准多数是读   写   初始化这三块的程序问题。但有一点你的感觉是对的:别人的程序或许靠不住。
回复

使用道具 举报

6#
ID:110507 发表于 2016-3-24 11:19 | 只看该作者
需要多路的
回复

使用道具 举报

7#
ID:107847 发表于 2016-3-24 13:39 | 只看该作者
高字节第四位开始都是符号位了,怎么能是<0X0FFF呢,楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表