DS18B20应用笔记

上传人:大米 文档编号:491343648 上传时间:2023-01-10 格式:DOCX 页数:5 大小:20.18KB
返回 下载 相关 举报
DS18B20应用笔记_第1页
第1页 / 共5页
DS18B20应用笔记_第2页
第2页 / 共5页
DS18B20应用笔记_第3页
第3页 / 共5页
DS18B20应用笔记_第4页
第4页 / 共5页
DS18B20应用笔记_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《DS18B20应用笔记》由会员分享,可在线阅读,更多相关《DS18B20应用笔记(5页珍藏版)》请在金锄头文库上搜索。

1、DS18B20应用笔记2010-03-04 13:03:54比赛结束了,回首这段经历,前前后后因为实习、项目组的课题、春节等各种缘故,我进入实质性工作的时间过晚,使得预定的功能和技术指标并没有完全实现,有些遗憾。不过,在和搭档一起努力下,最后几天高强度的工作也让我收获了很多,我想这个比赛也算没有白参加。尤其是对DS18B20的进一步理解和运用,下面简单总结一下,为自己留个纪念。在没有示波器、不能在线调试等各种“恶劣”条件下,我们只能靠将最终测量结果通过LCD显示出来而检验功能及指标,对于第一次使用DS18B20这个时序要求极高的器件来讲,确实是一个相对很大的工作量。我们先后解决了LCD译码显示

2、、DS18B20初始化时序、DS18B20读写时序等问题,才最终让LCD显示出了正常的温度值。硬件上是51内核的MCU,DS18B20通过单总线接入MCU的一个I/O口,同时接一个4.7K的上拉电阻到3.3V电源,DS18B20的VDD通过外部电压源供电(3.3V)。这个硬件结构相对简单,但是在后来调试中,我们发现了该MCU自己的特色,使得此硬件结构暗藏玄机。起初,考虑到LCD的验证性质,我们必须让LCD能够正确的译码,否则无法定位代码的错误源头,这个环节工作量不是很大,但是对于定制的LCD来讲,还是要费点周折的。后来,在写一些冗余代码测试出LCD能够正确译码的情况下,我们才真正开始了DS18

3、B20的艰苦历程。一上来就遇到了LCD一直显示的是测试码,通过程序结构,我们推断出DS18B20初始化未成功,从而产生了第一个棘手问题。对照DS18B20的datasheet,看到其初始化时序图:主机发给DS18B20一个复位脉冲(低电平)持续480-960us,然后拉高(DS18B20等待15-60us)后,DS18B20发送一个存在(presence)脉冲持续60-240us!为做到精确延时,又没有示波器,我们用C写了一个循环,并通过反汇编得到了其汇编指令,再结合MCU的datasheet上各类指令的时钟周期,以及当前晶振频率(11.0592MHz),计算了这个循环的延时,通过Delay子

4、函数去做精确延时,做完这些后,原本以为可以解决其初始化问题,可是事与愿违又仔细检查硬件结构以及MCU关于I/O口的使用,才意识到因为其I/O口是双向口,所以在每次读写时是通过修改寄存器来置该I/O口为输入还是输出,才能有效地读写数据。几经周折,终于完成了DS18B20的初始化。解决了DS18B20的初始化后,发现LCD不再显示测试码了,但是一直显示255.9,这让人很是沮丧。问题出在哪呢?传说中的DS18B20这么一个方便的数字器件,怎么惹出这么多麻烦?硬着头皮再看代码,推断问题只能出在读写时序上了(系统只有一个DS18B20,所以未曾涉及到ROM操作,故排除)。再次翻开datasheet,详

5、细分析了其读写时序图和中文翻译,有点奇怪,然后又找到原版英文,才发现中文翻译误导了,而且结合英文再看时序图,才发现问题出在这:1)、读时序中,主机拉低数据线需至少持续1us后再释放总线(拉高),此时置端口为输入,读取DS18B20的数据,由于其数据有效时间仅为下降沿后15us以内,也就是说在读时隙时,主机必须在15us内完成读数,而不是很多中文datasheet所谓的“延时15us后再开始读数”;同时每一个读时隙需持续至少60us,所以读完数据后要做足够的延时才可进行下一个读时隙;2)、写时序中,最根本的是写1和写0的时序不一样,所以要分别写子函数,同样结合datasheet完成写时序的精确化

6、。又严格地修改了读写时序后,上电测试,LCD显示变成了4.3,而且手触DS18B20,温度也能增加,说明DS18B20再正常工作,着实让人很振奋。现在的问题就是说,显示的温度不正确,但是我很自信地意识到离胜利已经不远了。 因不能在线Debug,所以我只好单步用心算执行,再看到读数据子函数时,潜意识告诉我这个循环有点问题,于是我在草稿纸上按循环一步步来,当写完第二个循环后,找到问题了,因一个移位操作放在循环的最后,也就是说循环外return语句所返回的结果相对实际测量的结果右移了一位!当我把该移位操作放在循环开始的地方时,LCD众望所归地显示了24.9,手触DS18B20,它直线上升到34.8,

7、考虑到环境因素的影响,这个值已经让我很满意了。大功告成,此时看看时间,已经是凌晨1点58分了,不过庆幸地是这个夜熬得值!ds18b20应用笔记2007-12-18 20:35:09|分类: C51及其他 |标签: |字号大中小订阅 最近做了个东东,需要用到ds18b20,ds18b20的应用早就不是什么新东西了,网上的例程比比皆是,想着很容易就会搞定,结果还是花了我几个小时的时间,想来有些郁闷。我也是从网上下的例程开始的:这个例程是这样的,/*-功能:实现对DS18B20的读取原理:单总线协议注意:单总线协议对延时要求比较严格,此程序中采用的是11.0592M的晶振,如果使用其他的晶振请跟据D

8、S18B20的资料修改延时参数版本:1.4b最后修改时间:2004年11月8号开发人:鞠春阳版权:哈尔滨众邦龙开发有限公司 单片机坐标网:=*/#includereg51.hsbit DQ =P14; /定义通信端口/延时函数/*void delay(unsigned int i)while(i-);*/初始化函数Init_DS18B20(void)unsigned char x=0;DQ = 1; /DQ复位delay(8); /稍做延时DQ = 0; /单片机将DQ拉低delay(80); /精确延时 大于 480usDQ = 1; /拉高总线delay(14);x=DQ; /稍做延时后

9、 如果x=0则初始化成功 x=1则初始化失败delay(20);/读一个字节ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay(4);return(dat);/写一个字节WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay(5); DQ =

10、1; dat=1;/delay(4);/读取温度ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadO

11、neChar();t=b;t=8;t=t|a;tt=t*0.0625;/t= tt*10+0.5; /放大10倍输出并四舍五入-此行没用return(t);main()unsigned char i=0; while(1) i=ReadTemperature();/读温度 说实话,这个程序写的是相当好的,也很容易实现,只是对于不同的振荡频率来说,延时过程还是需要调整。我从网上下载了个DS18B20的资料,是中文的,我也没太仔细看前面的,对照着把时序给检查了一下没有什么问题,然后按照我的晶体的频率,把时延进行了调整,接到机器上,数值很快就读出来了。问题就出在读出来的数上了。按程序上的,结果是要乘

12、于0.0625的,我以为是作者另有意图呢,毕竟每个人的使用都有自己的特点,因为接照我下的资料,结果是不能乘于0.0625的,而是去掉最后一位直接变成数值就可以。这个我可犯了难了,首先想到的就是程序的时序不对,查,再查,没有问题;时延也不准,变,再变,再改,还是一样的值,看来应该不是这些的问题吧,换一个DS18B20,还是一样。那能是什么呢?再资料好好看看吧。这一看,找出问题来了,我下的中文资料,名字是DS18B20,开头的几页说的也是DS18B20,而到后面说着说着就变成了DS1820,难道1820和18B20不同?重新上网,下了英文原版的资,一查,果然。两者的一线协议是想同的,读数的方法也是相同的,只是读出的结果对应温度的方式是不同的,而DS18B20,的确是要乘以0.0625的,这时距我改好上面的程序已经有近2个小时过去了,郁闷不由而生教训:对资料的使用一定要看原版的,至少要中英文对照,国内的有些人,或所谓的公司(我下的资料就是某个公司的)翻译的资料太水了,他们自己都不是太明白的东东都拿出来给人用,最终是谁用就害了谁。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号