新闻  |   论坛  |   博客  |   在线研讨会
DS18B20应用笔记
mjei | 2010-03-04 13:03:54    阅读:8416   发布文章

比赛结束了,回首这段经历,前前后后因为实习、项目组的课题、春节等各种缘故,我进入实质性工作的时间过晚,使得预定的功能和技术指标并没有完全实现,有些遗憾。不过,在和搭档一起努力下,最后几天高强度的工作也让我收获了很多,我想这个比赛也算没有白参加。尤其是对DS18B20的进一步理解和运用,下面简单总结一下,为自己留个纪念。

在没有示波器、不能在线调试等各种“恶劣”条件下,我们只能靠将最终测量结果通过LCD显示出来而检验功能及指标,对于第一次使用DS18B20这个时序要求极高的器件来讲,确实是一个相对很大的工作量。我们先后解决了LCD译码显示、DS18B20初始化时序、DS18B20读写时序等问题,才最终让LCD显示出了正常的温度值。

硬件上是51内核的MCU,DS18B20通过单总线接入MCU的一个I/O口,同时接一个4.7K的上拉电阻到3.3V电源,DS18B20的VDD通过外部电压源供电(3.3V)。这个硬件结构相对简单,但是在后来调试中,我们发现了该MCU自己的特色,使得此硬件结构暗藏玄机。

起初,考虑到LCD的验证性质,我们必须让LCD能够正确的译码,否则无法定位代码的错误源头,这个环节工作量不是很大,但是对于定制的LCD来讲,还是要费点周折的。后来,在写一些冗余代码测试出LCD能够正确译码的情况下,我们才真正开始了DS18B20的艰苦历程。

一上来就遇到了LCD一直显示的是测试码,通过程序结构,我们推断出DS18B20初始化未成功,从而产生了第一个棘手问题。对照DS18B20的datasheet,看到其初始化时序图:主机发给DS18B20一个复位脉冲(低电平)持续480-960us,然后拉高(DS18B20等待15-60us)后,DS18B20发送一个存在(presence)脉冲持续60-240us!为做到精确延时,又没有示波器,我们用C写了一个循环,并通过反汇编得到了其汇编指令,再结合MCU的datasheet上各类指令的时钟周期,以及当前晶振频率(11.0592MHz),计算了这个循环的延时,通过Delay子函数去做精确延时,做完这些后,原本以为可以解决其初始化问题,可是事与愿违……又仔细检查硬件结构以及MCU关于I/O口的使用,才意识到因为其I/O口是双向口,所以在每次读写时是通过修改寄存器来置该I/O口为输入还是输出,才能有效地读写数据。几经周折,终于完成了DS18B20的初始化。

解决了DS18B20的初始化后,发现LCD不再显示测试码了,但是一直显示255.9,这让人很是沮丧。问题出在哪呢?传说中的DS18B20这么一个方便的数字器件,怎么惹出这么多麻烦?硬着头皮再看代码,推断问题只能出在读写时序上了(系统只有一个DS18B20,所以未曾涉及到ROM操作,故排除)。再次翻开datasheet,详细分析了其读写时序图和中文翻译,有点奇怪,然后又找到原版英文,才发现中文翻译误导了,而且结合英文再看时序图,才发现问题出在这:1)、读时序中,主机拉低数据线需至少持续1us后再释放总线(拉高),此时置端口为输入,读取DS18B20的数据,由于其数据有效时间仅为下降沿后15us以内,也就是说在读时隙时,主机必须在15us内完成读数,而不是很多中文datasheet所谓的“延时15us后再开始读数”;同时每一个读时隙需持续至少60us,所以读完数据后要做足够的延时才可进行下一个读时隙;2)、写时序中,最根本的是写1和写0的时序不一样,所以要分别写子函数,同样结合datasheet完成写时序的精确化。又严格地修改了读写时序后,上电测试,LCD显示变成了4.3,而且手触DS18B20,温度也能增加,说明DS18B20再正常工作,着实让人很振奋。现在的问题就是说,显示的温度不正确,但是我很自信地意识到离胜利已经不远了。

       因不能在线Debug,所以我只好单步用心算执行,再看到读数据子函数时,潜意识告诉我这个循环有点问题,于是我在草稿纸上按循环一步步来,当写完第二个循环后,找到问题了,因一个移位操作放在循环的最后,也就是说循环外return语句所返回的结果相对实际测量的结果右移了一位!当我把该移位操作放在循环开始的地方时,LCD众望所归地显示了24.9,手触DS18B20,它直线上升到34.8,考虑到环境因素的影响,这个值已经让我很满意了。大功告成,此时看看时间,已经是凌晨1点58分了,不过庆幸地是这个夜熬得值!

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
关注电子工程的技术发展和未来趋势;关注经济、金融的发展,关注管理、投资的方法与实践;关注创业路上的酸甜苦辣和经验教训;继续发展自己的业余爱好;培养自身的综合素质,实现自我价值与人生目标!
最近文章
凄美凋谢的郁金香
2010-08-02 10:55:37
向加冕发起冲击吧
2010-07-11 17:31:18
荷兰来到了半决赛
2010-07-06 21:25:15
推荐文章
最近访客