打印

请指教DS18B20的疑惑

[复制链接]
2220|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
佰财MCU|  楼主 | 2010-10-30 12:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
佰财MCU|  楼主 | 2010-10-30 12:57 | 只看该作者
本人不会用C,请大家将就着看一下程序,不胜感激

使用特权

评论回复
板凳
佰财MCU|  楼主 | 2010-10-30 14:09 | 只看该作者
请高手不吝赐教,使我等菜鸟尽快成长。

使用特权

评论回复
地板
chen3bing| | 2010-10-30 14:22 | 只看该作者
我感觉只要显示稳定,应该没什么问题吧,可能没有那么精确。

使用特权

评论回复
5
zjucsd| | 2010-10-30 14:46 | 只看该作者
采集频率

使用特权

评论回复
6
佰财MCU|  楼主 | 2010-10-30 16:28 | 只看该作者
我两秒读一次温度数据,应该没问题吧

使用特权

评论回复
7
john_lee| | 2010-10-30 22:58 | 只看该作者
crc校验对不对?如果正确,则很可能是你数据转换计算有误,把原始数据用手工算一下是否正确。

使用特权

评论回复
8
佰财MCU|  楼主 | 2010-10-31 10:22 | 只看该作者
回七楼:原程序中未加CRC校验,下一步打算加上再看结果。

使用特权

评论回复
9
smileagain| | 2010-11-1 00:53 | 只看该作者
你用电扇对着18B20吹一阵再看看。我以前也遇到过这样的问题,后来发现是电路板发热的缘故

使用特权

评论回复
10
原野之狼| | 2010-11-1 00:56 | 只看该作者
18b20的精度是多少 水银柱的精度是多少
如果要校准你的温度计 需要两个前提
1 达到热平衡
2 用更高精度的温度计
去计量所标定个温度可是得花不少钱的哦 因为仪器本身很贵的 要实现恒温 又要实现高精度测温

使用特权

评论回复
11
yuanquan12345| | 2010-11-1 07:39 | 只看该作者
能说一下,CRC怎样实现效验吗?

使用特权

评论回复
12
佰财MCU|  楼主 | 2010-11-1 09:37 | 只看该作者
CRC校验正确,换过多个DS18B20,部分数据如下(水银温度计读数为15.1度).
两个DS18B20的ROM数据
序列号1:28h,0d6h,0dah,0a6h,01h,00h,00h,80h
序列号2:28h,70h,0fah,61h,01h,00h,00h,29h
序列号为1的DS18B20所读RAM数据:
9位分辨率:18h,01h,00h,00h,1fh,0ffh,08h,10h,0d8h
10位分辨率:18h,01h,00h,00h,3fh,0ffh,08h,10h,0a8h
11位分辨率:1ch,01h,00h,00h,5fh,0ffh,04h,10h,60h
11位分辨率:18h,01h,00h,00h,5fh,0ffh,08h,10h,38h
12位分辨率:1ah,01h,00h,00h,7fh,0ffh,06h,10h,12h
温度数据转换子程序(12位分辨率,不考虑符号位,因温度恒为正)
                mov a,temp_h
                anl a,#07h
                swap a
                mov temp_h,a
                mov a,temp_l
                anl a,#0f0h
                swap a
                orl a,temp_h
                mov b,#10
                div ab
                mov led_1,a                ;十位数存入
                mov led_2,b                ;个位数存入
                mov a,temp_l
                anl a,#0fh
                mov dptr,#tab_2
                movc a,@a+dptr
                mov led_3,a                ;小数位存入
                mov r1,#led_1
                mov r2,#3
                mov dptr,#tab_1
chang1:mov a,@r1        ;缓存转换为数码管段码
                movc a,@a+dptr
                mov @r1,a
                inc r1
                djnz r2,chang1
                mov a,led_2
                anl a,#0efh                ;显示小数点
                mov led_2,a
                ret
tab_1:                 ;段码数据表
                db 14h,3fh,98h,1ah,33h,52h,50h,3eh,10h,12h
               
tab_2:                 ;温度小数位四舍五入转换
                db 00h,01h,01h,02h,03h,03h,04h,04h,05h,06h,06h,07h,08h,08h,09h,09h

使用特权

评论回复
13
佰财MCU|  楼主 | 2010-11-1 09:38 | 只看该作者
请高手指点.

使用特权

评论回复
14
佰财MCU|  楼主 | 2010-11-1 09:55 | 只看该作者
在线等

使用特权

评论回复
15
john_lee| | 2010-11-1 11:11 | 只看该作者
从原始数据来看,温度值是比温度计的数据高了2度多。但从你的原始数据中发现一些问题,18b20手册上说:byte5,6,7是reserved的,其值固定为0ffh,0ch,10h,但你的数据中byte6却是在变化的,这一点令人生疑:其它数据是否也有问题?
再往下查我给你提两点建议:
1、再找几个温度计来试试。
2、用proteus软件模拟一下,应该能发现问题。

使用特权

评论回复
16
佰财MCU|  楼主 | 2010-11-2 06:14 | 只看该作者
问题已解决,是电路板发热的缘故,用排线将DS18B20延伸出十厘米左右温度显示正常。哈哈,很低级的错误。
谢谢大家的帮忙。结帖了!

使用特权

评论回复
17
xwj| | 2010-11-2 07:17 | 只看该作者
呵呵

使用特权

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

本版积分规则

9

主题

64

帖子

2

粉丝