搜索
bottom↓
回复: 15

关于DS18B20初始化时候读出85摄氏度的解释。

[复制链接]

出0入0汤圆

发表于 2012-9-2 00:07:03 | 显示全部楼层 |阅读模式
本帖最后由 hubukaixuan 于 2012-9-2 00:08 编辑

关于DS18B20初始化时候读出85摄氏度的问题,我相信很多朋友都遇到过。
很多人估计没有解决这个问题。最后不得已的情况下多读了几次,然后才开始显示。
问题就是因为,DS18B20默认是12位采样,具体时间看下表:

所以每次单片机复位后,进行如下配置:

void DS18B20_Init(void)
{
        ow_reset();        //初始化
        write_byte(0xcc);  //忽略ROM指令
        write_byte(0x4e);  //写暂存器指令
        write_byte(0);        //TH值  未使用
        write_byte(0);        //TL值  未使用
        write_byte(0x1f);  
        //配置寄存器 写入R1=0 R0=0 表示只用9位采样
        //这样转换时间约为100ms 加快采样转换速度
}

然后以后读温度时候,如此操作即可:
void read_temp(void)                   //获取温度get the temperature
{

        unsigned char a,b;
        ow_reset();                //初始化
        write_byte(0xcc);          //忽略ROM指令
        write_byte(0x44);          //温度转换指令
        delay_nms(110);    //-----特别要注意这个地方。
        ow_reset();                 //初始化
        write_byte(0xcc);          //忽略ROM指令
        write_byte(0xbe);          //读暂存器指令


        a = read_byte();           //读取到的第一个字节为温度LSB
        b = read_byte();           //读取到的第2个字节为温度MSB

        a=a>>4; //不要小数点
        b=b*16;
                     
        tempwd=a+b;
        strwd[0]=tempwd/100+48;
        strwd[1]=(tempwd%100)/10+48;
        strwd[2]=tempwd%10+48;
}
这样,保证不会读出85了。
除非当时的环境就是85摄氏度。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-9-2 21:44:25 | 显示全部楼层
这个东西要欣然接受,所有的18B20读出来的的首次温度都是85.具体论坛里面有人讨论过!

你那个延时等于让他延时了一段时间在读取温度的,所以你看不到85摄氏度。

出0入0汤圆

 楼主| 发表于 2012-9-6 16:11:03 | 显示全部楼层
楼上的哥们估计是没有看DS18B20的手册,你看一下就明白是怎么回事了。

出0入0汤圆

发表于 2012-9-6 17:00:15 | 显示全部楼层
我的一个18B20也读的是85度,其他的都正常,不知是否是坏了呢

出0入0汤圆

发表于 2012-9-6 18:18:06 | 显示全部楼层
网上的程序都是你抄我,我抄你,看到有的卖家的开发板一上电就是85,卖出去不让人笑死。不过你这个程序说实话也是毫无用处。既可以用定时器,也可以轮询是否转化完,至于怎么轮询datasheet上写的一清二楚。根深蒂固的山寨传统

出0入0汤圆

发表于 2012-9-7 07:08:12 来自手机 | 显示全部楼层
我开发板的例程就是 上电85 18B20接触不良或不接DQ读出25

出0入0汤圆

 楼主| 发表于 2012-9-11 13:55:14 | 显示全部楼层
yirenonege 发表于 2012-9-6 18:18
网上的程序都是你抄我,我抄你,看到有的卖家的开发板一上电就是85,卖出去不让人笑死。不过你这个程序说实 ...

呵呵,希望你看明白程序和DATASHEET之后,就明白我这个程序有没有用了。
至少我通过延时,保证他已经转换完成了。即使在上电第一次读取,
也是正常的,不是有的程序,一上电,读出一个初始化值85。
估计很多人没有自己亲自看DATASHEET,也没有亲自测试过程序,
对于这种人,我没有什么好说的。

出0入0汤圆

发表于 2012-9-11 15:38:55 | 显示全部楼层
LZ的解释应该是对的,默认是12位精度的

出0入0汤圆

发表于 2012-9-11 23:42:36 | 显示全部楼层
我看能不能改到汇编程序里面去,记号

出0入0汤圆

发表于 2012-9-12 00:09:14 来自手机 | 显示全部楼层
嗯嗯,楼主思维不错!

出0入0汤圆

发表于 2012-9-12 00:22:15 | 显示全部楼层
今天得到了别人的帮助 我来也帮助一下别人

//复位DS18B20,并检测设备是否存在
void DS18B20_Reset()
{
    BYTE DN=0;                           
    BYTE CCY = 1;
    BYTE TR = app_real.Temp_Data[0] & 0xF0;  
    while (CCY)
    {
        DQ = 0;                                             //送出低电平复位信号
        DelayXus(240);                                      //延时至少480us
        DelayXus(240);
        DQ = 1;                                             //释放数据线
        DelayXus(60);                                       //等待60us
        CCY = DQ;                                           //检测存在脉冲
        if(!CCY){
                if(TR)                                               //如果上次是DS18B20 ERR 后来又插入DS18B20
          mark.SYS_PWR_Start=0x0;               //放弃恢复后的第一次转换
          app_real.Temp_Data[0] &= 0x0F;          
        }
        DelayXus(240);                                      //等待设备释放数据线
        DelayXus(180);
        if(DN++>128){                                       //只检测128次,若不加此判断,如果未接DS18B20,则程序会死循环于此
                app_real.Temp_Data[0] |= 0x10;  //DS18B20 ERR
                CCY=0;
        }
    }
}


注意  (DN++>128)  只检测N多次啊  否则在没有插入DS18B20传感器 或者传感器失效的情况  系统别的外设 别想工作了啊

出0入0汤圆

发表于 2012-9-12 11:55:05 | 显示全部楼层
meesky 发表于 2012-9-12 00:22
今天得到了别人的帮助 我来也帮助一下别人

//复位DS18B20,并检测设备是否存在

是用寄生电源的吧?不然就不用延时那么长时间了

出0入0汤圆

发表于 2012-9-12 12:19:18 | 显示全部楼层
我是说你的执行效率啊,100ms卡在哪里等转换结果

出0入0汤圆

 楼主| 发表于 2012-9-13 15:27:38 | 显示全部楼层
yirenonege 发表于 2012-9-12 12:19
我是说你的执行效率啊,100ms卡在哪里等转换结果

呵呵,这个只是一个抛砖引玉。
因为给别人写了一个18B20显示,没有多任务。
就是1秒采集一次数据,所以也就没有多想了。

具体应用,可以用定里器,或者您说的查询是不是转换完成。

出0入0汤圆

发表于 2012-9-16 16:34:04 | 显示全部楼层
这个问题论坛上以前讨论过几种解决方法的

出0入0汤圆

发表于 2012-9-16 16:37:51 | 显示全部楼层
奇怪,我怎么上来读的就是对的?
没碰到过85
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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