找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

DS18B20输出值为什么那么单调

查看数: 2389 | 评论数: 13 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-1-21 13:12

正文摘要:

本帖最后由 新新科技 于 2022-1-21 13:20 编辑   几年前从T宝上购买的不锈钢封装防水型DS18b20温度探头,近期拿出来用用。  我设置的有效数字是到到小数点后一位的,即:从18B20读出十二位数 ...

回复

ID:378108 发表于 2022-1-29 00:08
18b20可以设置不同的采样位数,比如7位,9位,你初始化的时候,估计把它忘了。
ID:625730 发表于 2022-1-22 18:58
新新科技 发表于 2022-1-21 18:19
精度0.5℃的意思是说,如果正确温度是20℃,那么18b20测得的结果最低可能是19.5℃,而最高可能是20.5℃, ...

精度正负0.5度,应该这么理解:如果测量值是20度,那么实际的温度在-19.5到20.5之间。
ID:71233 发表于 2022-1-22 16:47
再次看看手册,终于弄明白了,是配置寄存器的问题。DS18B20一般出厂是设置为12位的,但本人手头的18b20是设置为9位精度的,所以只能测量到整数度数或0.5度数。谢谢大家的关注!

评分

参与人数 1黑币 +10 收起 理由
TEC + 10 赞一个!

查看全部评分

ID:71233 发表于 2022-1-22 10:22
wc86110 发表于 2022-1-22 00:06
塑封的小数点后的数字能连续变化,金属封装对温度就没那么敏感了。关键还是看程序怎样

关键程序:
void readtemp_ds18b20() //读取温度
{
        uint  temp32;
        uchar templ,temph;
        EA=0;
        rest_ds18b20();//复位
        write_ds18b20(0xcc); //跳过读序列号的操作
        write_ds18b20(0x44); //启动温度转换
        delay_50us(15);
        rest_ds18b20();//复位
        write_ds18b20(0xcc); //跳过读序列号的操作
        write_ds18b20(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
        templ=read_ds18b20();//低八位
        temph=read_ds18b20();//高八位

        temp32=(temph<<8)|templ;//合并为十六位
        if((temph&0xf0))//判断温度的正负性
        {
                temp32=~temp32+1;
                temp32=temp32*0.625;//温度值扩大10倍
                temp=-temp32;//温度为负数
        }
        else//为正数
        {        
                temp=temp32*0.625;        //温度值扩大10倍
        }
EA=1;

}

void show_18B20()//显示18B20的温度
{
        uchar i;
        LcdSetCursor(2,7); //显示位置
        i=temp/100;
        write_LCD_data(tex[ i]);// //显示百位,即温度十位
        i=temp/10%10;
        write_LCD_data(tex[i ]);// //显示十位,即温度个位
        write_LCD_data('.');//显示小数点
        i=temp%10;
        write_LCD_data(tex[i ]);//显示个位,即温度小数部分
}
ID:71233 发表于 2022-1-22 10:14
zlj20181110 发表于 2022-1-21 19:59
你不是不漏了一个“0”?应该是0.0625吧?

没错,乘0.0625得到的是浮点准确数值,我乘0.625是将这个数值扩大10倍,以便于显示到LCD1602上,上面的问题叙述有提及。
ID:96682 发表于 2022-1-22 00:06
塑封的小数点后的数字能连续变化,金属封装对温度就没那么敏感了。关键还是看程序怎样
ID:160500 发表于 2022-1-21 20:42
看看这个表

51hei图片20220121204133.png (59.02 KB, 下载次数: 53)

51hei图片20220121204133.png
ID:160500 发表于 2022-1-21 20:31
精度和分辨率不是一回事,仔细看看手册就知道了
ID:624769 发表于 2022-1-21 20:00
我不知道你的 * 0.625 是用什么方式计算的, 但是, 一般用18B20的话,通常的做法是把得到的值左移4位,高8位就是温度的整数值,低8位为0的话就是整数温度,非0就是 0.5 的温度。18B20 一般也就测一下室温,没有什么好期待的。
ID:423911 发表于 2022-1-21 19:59
你不是不漏了一个“0”?应该是0.0625吧?

评分

参与人数 2黑币 +15 收起 理由
TEC + 10 赞一个!
名字不是重点 + 5 很给力!你是对的,多谢提醒!

查看全部评分

ID:71233 发表于 2022-1-21 18:19
本帖最后由 新新科技 于 2022-1-21 18:23 编辑
压着我头发啦 发表于 2022-1-21 15:46
没用过ds18b20,但是查了一下,该器件精度是±0.5℃的,所以数值每次变化最小范围应该就是0.5℃吧。PTC\NTC ...

精度0.5℃的意思是说,如果正确温度是20℃,那么18b20测得的结果最低可能是19.5℃,而最高可能是20.5℃,那么,如果正确的温度是20.2℃呢?
ID:824490 发表于 2022-1-21 16:06
精度与分辩率的问题。。。 18B20的精度是0.5度,也就是说其测到的数值与实际温度的误差在0.5之内。 分辩率是0.625度,就是说测到的数值是0.625的倍数。
ID:716656 发表于 2022-1-21 15:46
没用过ds18b20,但是查了一下,该器件精度是±0.5℃的,所以数值每次变化最小范围应该就是0.5℃吧。PTC\NTC精度会高点吧

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

Powered by 单片机教程网

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