01bffe806c 发表于 2013-4-21 23:19:53

18b20转换时间为什么和数据手册的不一样?

本帖最后由 01bffe806c 于 2013-4-22 00:04 编辑

在温度转换时18b20会拉低总线,转换完会恢复,数据手册给出了转换时间。



我在程序里加了等待18b20将总线拉低的命令,但是用逻辑分析仪测试时发现18b20并没有拉低总线,转换命令后直接接了下一个复位信号。





我以为读总线太快了,在之前加了延迟,结果还是没得到正在转换中的信号
但是温度能正常读出,我用串口返回的温度值,0x0118是17.5度,而且把手放上面温度是变化的,说明工作正常。



也试了一些网上的程序,也是没有转换信号,这是为啥呢?

SNOOKER 发表于 2013-4-21 23:26:06

程序问题。

01bffe806c 发表于 2013-4-21 23:29:47

SNOOKER 发表于 2013-4-21 23:26 static/image/common/back.gif
程序问题。

能推荐一个正确的吗?

SNOOKER 发表于 2013-4-21 23:38:16

01bffe806c 发表于 2013-4-21 23:29 static/image/common/back.gif
能推荐一个正确的吗?

“我在程序里加了等待总线复位的命令,但是用逻辑分析仪测试时发现18b20并没有拉低总线”

器件没拉低说明你给的复位脉冲不合要求,仔细看数据手册。
复位应该是单片机主动拉低总线480-960uS,然后将DQ设置为输入,这时最好关中断,在15-60uS内18B20会拉低总线作为应答,
接着单片机等这个应答脉冲结束,一个复位流程就完成了。

01bffe806c 发表于 2013-4-21 23:53:16

本帖最后由 01bffe806c 于 2013-4-22 00:05 编辑

SNOOKER 发表于 2013-4-21 23:38 static/image/common/back.gif
“我在程序里加了等待总线复位的命令,但是用逻辑分析仪测试时发现18b20并没有拉低总线”

器件没拉低说 ...

这句话写错了,应该是在程序里加了等待18b20将总线拉低的命令,就是程序里那个"while(!DQ);"
我的复位是按手册写的,没用中断,串口用的是查询。我得到了温度值,不能是复位不正确吧。



unsigned char Reset_18b20(void)
{
        unsigned char _data;
        DQ=0;
        Delay100us(5);
        DQ=1;
        Delay10us(7);
        if(DQ==1)
                _data=0;
        else
                _data=1;
        Delay100us(5);
        return(_data);
}

01bffe806c 发表于 2013-4-22 00:42:23

这两个帖子好像也有转换时间的问题,最后也都没有答案。
http://www.amobbs.com/forum.php?mod=viewthread&tid=5487030&highlight=18b20%2B%E8%BD%AC%E6%8D%A2
http://www.amobbs.com/forum.php?mod=viewthread&tid=1137428&highlight=18b20%2B%E8%BD%AC%E6%8D%A2

clarkewayne 发表于 2013-4-22 10:52:29

关注一下!

01bffe806c 发表于 2013-8-23 14:58:20

本帖最后由 01bffe806c 于 2013-8-23 15:09 编辑

今天才注意到那个时间是最大时间,以前真是不认真。这个可能是在寄生电源电量不足的条件下得出来的。普通电源条件下转换还是很快的,几乎瞬间就完成了。这只是个人猜测,网上也找不到相关信息。算是给这个问题一个交代吧。可惜分析仪不给力,有人能帮忙测一下是不是有拉低的过程和转换时间吗?

dz20062008 发表于 2013-8-23 21:17:37

本帖最后由 dz20062008 于 2013-8-23 23:35 编辑

楼主的意思是在发送转换指令后读取DS18B20的转换状态字,就是收到转换命令后拉高总线,检测有无低电平的转换状态字。
楼主这么一说我也就明白我以前的转换时间短的疑惑了,因为单总线的操作方式是初始化,rom操作命令,ds功能命令。所以发送了转换指令后的下一个操作是读暂存器指令,但DS的指令的每一次操作都需要初始化一次,还有ROM操作指令。

      由于没有进行转换状态查询所以第一次读出来的是85度这个初始值,经过多次循环后当时间累计到内部所需要的转换时间后读出的才是实际的温度,后面的不出现85是因为DS没有断电所以里面储存的是上一次转换的结果,实际很多次读的是旧的值。所以实际的DS的速度并不是比手册上标的快。

这东西还是挺灵敏的,我的七位温度计很远吹口气温度都会马上变高,虽然精度不咋的,也够用了。还有就是这乖乖绝对会轻微自升温,不过精度。5还是有保障的。不知道地线弄短点焊接在散热片上会好些不,貌似无意思。{:biggrin:}

PS:楼主发送转换命令后释放总线为高,不再做其他操作。用逻辑分析仪看看是否有低电平应答。看哈对应的精度的转换时间是否与手册上标注的一致。楼主检测到了请分享哈。我看了楼主的问题是我有了灵感解决我的一个疑惑,我通过我以前的代码,也验证了我的想法,解决了开机瞬间显示85的毛病。只是没有加入状态查询,也没有测出实际转换时间。楼主成功了要请分享哈
页: [1]
查看完整版本: 18b20转换时间为什么和数据手册的不一样?