搜索
bottom↓
回复: 31

求助关于DS18B20温度测量只可以测某区间的问题

[复制链接]

出0入0汤圆

发表于 2016-1-5 13:58:36 | 显示全部楼层 |阅读模式
先说下背景:
第一天,一直读得85度,网上说有可能传感器坏了,OK,晚上休息前,换了有数据出来,21度,满心欢喜
第二天,继续来调,接上去出来21度,将传感器握在手心,升温,21度,22,度,23度,pia乱码,试着放水里,降温试试,23度,22度,21度,停了!!
好吧,估计是时序问题,拿来示波器,对着程序和18B20文档,对着时序也没问题!!现象依旧,接线什么的也确保正确了(21-23度可以读嘛)
至此,乱了,无从下手,不知道还有什么其他可能的问题。
求坛友支支招,这个还有什么可能的问题,先谢谢各位大侠了哈

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2016-1-5 14:05:59 | 显示全部楼层
这是我的测量函数截图

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2016-1-5 14:08:54 | 显示全部楼层
第一天,一直读得85度,网上说有可能传感器坏了,OK,晚上休息前,换了有数据出来,21度,满心欢喜
第二天,继续来调,接上去出来21度,将传感器握在手心,升温,21度,22,度,23度,pia乱码,试着放水里,降温试试,23度,22度,21度,停了!!
好吧,估计是时序问题,拿来示波器,对着程序和18B20文档,对着时序也没问题!!现象依旧,接线什么的也确保正确了(21-23度可以读嘛)
至此,乱了,无从下手,不知道还有什么其他可能的问题。
第三天写了一个导弹程序、瞄准东京、就是不发射、感觉时序也没问题、求大神支招

出130入20汤圆

发表于 2016-1-5 14:09:19 | 显示全部楼层
好欢乐啊。放水里
如果程序没问题,你确定不是淘宝买的元件?

出0入0汤圆

发表于 2016-1-5 14:09:28 | 显示全部楼层
等待转换完成时间,是否过短?

出0入0汤圆

 楼主| 发表于 2016-1-5 14:12:14 | 显示全部楼层
aressos 发表于 2016-1-5 14:09
等待转换完成时间,是否过短?

9位转换时间93ms那样,12位最高精度才750ms转换时间,我加到800毫秒,应该完全不是问题吧,经过示波器测量,也确实够800ms的

出0入0汤圆

 楼主| 发表于 2016-1-5 14:13:49 | 显示全部楼层
shuiluo2 发表于 2016-1-5 14:09
好欢乐啊。放水里
如果程序没问题,你确定不是淘宝买的元件?

嘿嘿,忘记提醒了,我这个是防水型的DS18B20

出0入0汤圆

 楼主| 发表于 2016-1-5 14:16:10 | 显示全部楼层
1826772880 发表于 2016-1-5 14:08
第一天,一直读得85度,网上说有可能传感器坏了,OK,晚上休息前,换了有数据出来,21度,满心欢喜
第二天 ...

大侠见笑了,程序是网上的改过来的,就是改改时序的时间而已,菜鸟一枚,见谅见谅哈

出0入0汤圆

 楼主| 发表于 2016-1-5 14:21:40 | 显示全部楼层
hameyou 发表于 2016-1-5 14:14
出现这种问题,一般都是时序的问题,DS18B20 单总线的读写延时要严格控制。 ...

目前正继续两方案
1,对着示波器继续确认时序了
2,打算继续找一个18B20换下试试(说实话,根据之前的网购器件体验,还是挺相信淘宝的说

出0入0汤圆

发表于 2016-1-5 14:23:02 | 显示全部楼层
这是开发板带的程序

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2016-1-5 14:23:53 | 显示全部楼层
时序不正确吧,把CRC也一起读出来检验,通过了才算时序没问题

出10入10汤圆

发表于 2016-1-5 14:25:43 | 显示全部楼层
DS18B20上电默认是12位精度,程序中没见你设置为9位精度,初始化中有设置?
检查下时序和显示处理程序

出0入0汤圆

 楼主| 发表于 2016-1-5 14:27:19 | 显示全部楼层
1826772880 发表于 2016-1-5 14:23
这是开发板带的程序

谢谢,万分感激

出0入0汤圆

 楼主| 发表于 2016-1-5 14:29:09 | 显示全部楼层
szxszx 发表于 2016-1-5 14:25
DS18B20上电默认是12位精度,程序中没见你设置为9位精度,初始化中有设置?
检查下时序和显示处理程序 ...

好吧,这是我的课设,想想简单测量下就行了,没想到这一步,资料学习不到位啊
谢了,我试试

出200入2554汤圆

发表于 2016-1-5 14:29:20 来自手机 | 显示全部楼层
目测你用 TP 返回 0.01 度的时候溢出了(居然设计只有8位),不考虑符号的话,25.5 度以上必爆

出0入0汤圆

 楼主| 发表于 2016-1-5 14:30:40 | 显示全部楼层
sanger 发表于 2016-1-5 14:23
时序不正确吧,把CRC也一起读出来检验,通过了才算时序没问题

额,好吧,这我课设来的,想想简单测量下就行了,没想到这一步,资料学习不到位啊
谢谢指导,继续尝试了

出0入0汤圆

发表于 2016-1-5 14:32:24 来自手机 | 显示全部楼层
szxszx 发表于 2016-1-5 14:25
DS18B20上电默认是12位精度,程序中没见你设置为9位精度,初始化中有设置?
检查下时序和显示处理程序 ...

我之前某宝买过几个,默认是9位,也出现过楼主的问题,换了之前另一家的就正常了。假货很多。

出200入2554汤圆

发表于 2016-1-5 14:33:27 来自手机 | 显示全部楼层
仔细看来用 0.0625 的话还真不是 0.01 的问题,不过你这有符号的数各种移位拼接的,真心不会出问题么… 感觉应该先转成无符号宽数据再搞啊

出10入10汤圆

发表于 2016-1-5 14:34:14 | 显示全部楼层
本帖最后由 szxszx 于 2016-1-5 14:48 编辑

TP = ((TPH << 8) | TPL) * 0.0625;
改为:
TP = ((TPH << 8) | TPL) * 10 /16; //放大了10倍
可以避免浮点数运算

出0入0汤圆

 楼主| 发表于 2016-1-5 14:35:16 | 显示全部楼层
t3486784401 发表于 2016-1-5 14:29
目测你用 TP 返回 0.01 度的时候溢出了(居然设计只有8位),不考虑符号的话,25.5 度以上必爆 ...

考虑到我测的是水温,精度只需要到整度以内,粗糙测量,所以就用了八位了,默认正温度..............还有,我这么计算不是直接返回正数值么

出0入0汤圆

 楼主| 发表于 2016-1-5 14:36:12 | 显示全部楼层
t3486784401 发表于 2016-1-5 14:33
仔细看来用 0.0625 的话还真不是 0.01 的问题,不过你这有符号的数各种移位拼接的,真心不会出问题么… 感 ...

考虑到我测的是水温,精度只需要到整度以内,粗糙测量,所以就用了八位了,默认正温度..............还有,我这么计算不是直接返回正数值么

出0入0汤圆

发表于 2016-1-5 14:43:43 | 显示全部楼层
本帖最后由 lcw_swust 于 2016-1-5 14:46 编辑

TP要定义为int型
TP = (((int)TPH << 8) | TPL) * 10 /16;
若无需精确到小数,就不用乘10了
TP = (((int)TPH << 8) | TPL)  /16;

出10入10汤圆

发表于 2016-1-5 14:50:04 | 显示全部楼层
lcw_swust 发表于 2016-1-5 14:43
TP要定义为int型
TP = (((int)TPH

是的,没仔细看,以为都是int型的

出0入0汤圆

 楼主| 发表于 2016-1-5 15:47:33 | 显示全部楼层

谢谢,学习了

出0入0汤圆

 楼主| 发表于 2016-1-5 15:48:44 | 显示全部楼层
lcw_swust 发表于 2016-1-5 14:43
TP要定义为int型
TP = (((int)TPH

谢谢指导,已经改过来了

出0入0汤圆

发表于 2016-1-5 15:48:48 | 显示全部楼层
像这类18B20大多数都是时序的问题,
1、在读写18B20前关闭总中断,防止因中断而导致的时序不准。
2、严格检查各时序的延时时间,低速的单片机用较多的NOP指令来确保延时准确,高速单片机就单独开个计时器计时。平时常用的while和for循环延时比较难以准确计算延时,不建议采用。

像楼主这样时灵时不灵的情况,如果排除物理接线有问题,八成就是时序不准导致的。

出0入0汤圆

 楼主| 发表于 2016-1-5 15:50:13 | 显示全部楼层
JeffreySun 发表于 2016-1-5 14:32
我之前某宝买过几个,默认是9位,也出现过楼主的问题,换了之前另一家的就正常了。假货很多。 ...

嗯嗯,今晚去接一个就换一下试试

出0入0汤圆

 楼主| 发表于 2016-1-5 15:51:51 | 显示全部楼层
dalarang 发表于 2016-1-5 15:48
像这类18B20大多数都是时序的问题,
1、在读写18B20前关闭总中断,防止因中断而导致的时序不准。
2、严格检 ...

嗯嗯,谢谢大虾指导,在改ing

出200入2554汤圆

发表于 2016-1-5 15:57:45 | 显示全部楼层
小车 发表于 2016-1-5 14:36
考虑到我测的是水温,精度只需要到整度以内,粗糙测量,所以就用了八位了,默认正温度..............还有 ...

至少 TPH 和 TPL 要用无符号的比较安全,否则或运算、移位的结果(和负数操作)真心没法预知

出0入0汤圆

 楼主| 发表于 2016-1-5 16:03:20 | 显示全部楼层
t3486784401 发表于 2016-1-5 15:57
至少 TPH 和 TPL 要用无符号的比较安全,否则或运算、移位的结果(和负数操作)真心没法预知 ...

按照以上各位前辈的建议,改了,目前效果基本出来了,就是不知道测出来的温度准不准,不过这是后话了,真心谢谢各位前辈了

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-25 19:18

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

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