打印

DS18B20,最高只能显示到66度?

[复制链接]
1621|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
adofe|  楼主 | 2013-5-11 23:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近做了一个用DS18B20进行温度显示,平时温度显示正常,当温度值达到66时就无显示了。
我想是不是达到了高温限值(TH)这个我没有进行设置呀?
还有精度设置也有点问题:我是先复位,写暂存器(0x4e),再写入(TH)和(TL),最后写入配置寄存器 0x1f(设置为9Bit)
但读到的温度值还是12Bit的???

相关帖子

沙发
woosoo521| | 2013-5-12 00:41 | 只看该作者
最近做实验,老师不让用,必须模数转换

使用特权

评论回复
板凳
adofe|  楼主 | 2013-5-13 10:27 | 只看该作者
怎么没人气,自己顶一下......

使用特权

评论回复
地板
adofe|  楼主 | 2013-5-13 18:37 | 只看该作者
/******=====精度设置(无反回值)======*******/
void DS18B20_setup()///res这形参
{
while(DS18B20_Reset());///
  WriteOneChar(0x4e);/////送入0x4E
delayms(10);
  WriteOneChar(0x63);
delayms(10);
  WriteOneChar(0x00);
delayms(10);
  WriteOneChar(0x1f);///精度设置,
delayms(10);
}


/*******读取温度值,*********/
uint ReadTemperature()////char型函数只能反回char型数据
{
uint temp;
float temp_ft;
uchar a=0;
uchar b=0;
uchar t=0;
while (DS18B20_Reset());///复位成功while=0向下执行
WriteOneChar(0xcc); ///跳过 ROM
WriteOneChar(0x44); //启动温度转换
//delayms(790);////判忙,读取DQ的值,闲时DQ=1,忙时DQ=0
while(!DS18B20_ReadBit());


while (DS18B20_Reset());///从新复位  
WriteOneChar(0xcc);  
WriteOneChar(0xbe); ////读取暂存器
a=ReadOneChar();///设a 读到0xa7
b=ReadOneChar();////设b 读到0xe6 高8位

temp=b;
temp<<=8;
        temp=temp|a;///这里将a b两个8位合并成了16位

                       
        temp_ft=0.0625*temp;///得到实际温度值
        temp=temp_ft*10+0.5;//
return(temp);
}

使用特权

评论回复
5
mzhboy| | 2015-6-15 10:21 | 只看该作者
我也遇到这个问题,解决办法是读取1bit后要加延时,确保完成一个完整的60us读取时间槽再返回,否则就出现上述的问题啦。另外one-wire器件尽量用长点的延时以确保稳定

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:高质量的产品来自于高素质的工程师,高质量的产品造就高素质的工程师.........

54

主题

511

帖子

3

粉丝