搜索
bottom↓
回复: 21

傻眼了,DS18B20如何测量负温度?

[复制链接]

出0入0汤圆

发表于 2008-1-18 10:02:52 | 显示全部楼层 |阅读模式
用DS18B20测量温度,用电源供电,测量正温度很好,但是测量负温度的时候存放温度寄存器
读出来都是FF(不管-几度都是FF,-5,-10,只要在-55度~0度之间都是FF),怎么回事?谢谢

我把低温箱的温度调到负温度,读出来就是FF
(这个FF是指DS18B20的寄存器的值),把温度调到正温度读出来就正确了,因为转化出来的值
跟放在恒温箱的水银温度计对比,几乎是一致的!

DS18B20用四线两两双交线传输1M

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

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

出0入0汤圆

发表于 2008-1-18 11:02:18 | 显示全部楼层
应该是读DS18B20后的数据没有处理负数的问题,一般(网上)有好多的程序从18B20读出来后很少有处理负数的值的!只要你按照DATASHEET上的说明,把读出来的数据处理一下.提醒一下:有5个标志位会与读正数温度不一样!

出0入0汤圆

发表于 2008-1-18 11:14:03 | 显示全部楼层
18B20可以读取负温度,没有任何问题,请再仔细看一下手册。
1

出0入0汤圆

发表于 2008-1-18 11:48:33 | 显示全部楼层
18B20不是有5个标志位,它的数据存储方式就是一个16位有符号类型的整数0x8000为符号位,有符号时值为低15位的补码

楼主读不到负温度调整下时序试试(负温读不到应该是调小延时),18B20内部时钟是随温度变化的,负温时钟变大,正温时钟变小

出0入0汤圆

 楼主| 发表于 2008-1-18 13:55:50 | 显示全部楼层
这些我知道诶,就是读到的寄存器的值都是FF,这个FF是我读到的DS18B20寄存器的值,也就是LS Byte MS Byte 都为1

出0入0汤圆

发表于 2008-1-18 15:07:04 | 显示全部楼层
DS18B20的温度值存在两个寄存器中,读取时应该将这两个8位16进制数合并到一个int类型变量中。
这样就是16位二进制数,如果是正数,高5位为0,不用转换直接乘0.0625即可得到温度,如果是负数,则高5位为1,需要将这16位二进制数按位取反再加1,得到的数再乘0.0625即可得到温度!
不要告诉我你要定义浮点数进行乘法哦!最好用位操作来实现!

出0入0汤圆

发表于 2008-1-18 22:26:37 | 显示全部楼层
我想楼主的问题大概出在读“1”的时序上。虽然你能读出正温度,但是你现在的读“1”的时序处在一种临界状态,不信的话你测量一个接近0度的正温度,你大概会发现这时候显示的温度会出现较大的问题了吧!

建议按照芯片推荐的时序,严格控制读写时序,18B20对时序要求是很严格的。通常大家都习惯用c语言编程,us级的延时往往很难弄准确。

出0入0汤圆

 楼主| 发表于 2008-1-21 00:25:07 | 显示全部楼层
谢谢pcs3,你理解了我的所问的问题了,当然也谢谢楼上热心帮助的朋友了
好的,我去试试看

出0入0汤圆

 楼主| 发表于 2008-1-21 00:29:33 | 显示全部楼层
哦,也谢谢zhshliu

出0入0汤圆

发表于 2008-5-2 14:30:22 | 显示全部楼层
这是我的18B20可以测正负温度的ICC程序+1602显示,可以测到小数点后四位
点击此处下载 ourdev_263591.txt(文件大小:3K) (原文件名:main.txt)

出0入0汤圆

发表于 2009-11-2 10:42:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-2 12:19:42 | 显示全部楼层
吓吓侬咯,admvip

出0入0汤圆

发表于 2010-9-2 12:26:44 | 显示全部楼层
回复【9楼】gump
这是我的18b20可以测正负温度的icc程序+1602显示,可以测到小数点后四位
点击此处下载  
-----------------------------------------------------------------------

小数点后四位 有点神奇

出0入0汤圆

发表于 2010-9-2 13:01:58 | 显示全部楼层
我去年做了一个也是用的18B20,没有碰到不可读负温度的情况呀。

出0入0汤圆

发表于 2011-1-1 23:15:47 | 显示全部楼层
回复【13楼】liusoldier 大圣
-----------------------------------------------------------------------

liusoldier 大圣
能不能把你的程序我参考一下,测量负温的
51单片机

出0入0汤圆

发表于 2011-1-2 01:24:12 | 显示全部楼层
测温度是18B20的事,我们要做的是在读数后判断数据是正温还是负温,

然后分别处里,其实负温很简单的,将这两个字节数据取反后加1就可以得到温度值了。

出0入0汤圆

发表于 2011-1-2 05:51:14 | 显示全部楼层
"傻眼了,DS18B20如何测量负温度?"

because you didn't read the @#%@%#@ datasheet.

出0入0汤圆

发表于 2011-1-6 16:36:04 | 显示全部楼层
mark一下,好好看看时序图

出0入0汤圆

发表于 2013-5-8 15:28:18 | 显示全部楼层
参考中,好资料,

出0入0汤圆

发表于 2013-5-14 12:19:54 来自手机 | 显示全部楼层
记号一下.......

出0入0汤圆

发表于 2013-5-14 13:56:41 | 显示全部楼层
负温度很简单的,返回的值其实就是带符号的数,你声明个带符号的变量直接传递并使用就可以了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 01:34

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

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