有关DS18B20测温中断方式实现的讨论

[复制链接]
5118|5
 楼主| axiang86 发表于 2007-8-19 22:38 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;去年的某个时候我也有幸接触到DS18B20单总线温度传感器,最初也不知道什么叫做单总线,随着学习时间的加长和相关资料的查阅,也似乎明白了,但还是不太相信(总感觉有点XIE—MEN),直到自己用的那一天才知道它确实是个好东东!但我们一般在使用它进行测量温度时,一般都只让单片机的所用资源交给它,直到测量完成后才转而处理其它事情,假如有这样一个系统,上位机要通过串口通讯来命令下位(单片机)进行温度测量或其它什么的,那么按照常规我们都会在下位机对DS18B20传感器进行温度测量时把中断系统关闭,以使其时序不受串口中断的影响,直到温度测量完成后才开中断系统。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假如有这么一个实时系统要我们工程师去开发,该系统也分为上位机(PC或ARM)和下位机(假如是单片机,任务是测量温度),上位机的权限最高,任何时候下位都必需响应它,这就要求我们的下位机在进行温度测量时不能关闭中断系统,这样也就带出的我们博客的主题“DS18B20测温中断方式实现”。这个问题刚开始是由我朋友提出来的,我当时也只是随便想想,没作太深的研究,就回答他:“这个基本上很难”,在后来的日子里,看了许多有关微控制器中断系统的**,发现应用微控制器的“堆栈”原理有可能帮我们实现,我是这样想的,我们把DS18B20的每一种操作看作是一次“出栈”操作,每操作一次作一下标志,当中断来时计下当时的操作步骤代号,再去执行中断服务程序,执行完成后再回来继续DS18B20测温的操作,如此一来,便可以实现DS18B20测温的中断方式实现。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然,以上只是本人的一点拙见,还未曾验证!<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;各位如果有更好的实现方法或建议,不如拿出来大伙一起研究,一起进步!&nbsp;&nbsp;
lws 发表于 2007-8-20 09:46 | 显示全部楼层

用18B20做温度测量一般对实时性要求不高吧

即使中断来了打断18B20,大不了重新发送命令。没事的时候多存几个相邻时刻的温度值,如果上位机实在要求下位机实时响应读温命令就把前一时刻的温度值发上去。<br />
古道热肠 发表于 2007-8-20 09:56 | 显示全部楼层

单总线也是异步串行通讯

&nbsp;&nbsp;&nbsp;数据采样点非常关键,给中断造成延时就会采样出错的,个人认为,关键操作时必须关中断,只有在等待芯片完成转换期间可以开中断。采用冗余容错设计才能保持串口中断优先,即操作芯片出错时,重复上一次操作过程,直到获取正确的数据包为止。<br />&nbsp;&nbsp;&nbsp;还有一个办法就是采用单总线驱动器,单片机被解放出来,只要发数据给驱动器,单总线时序由驱动器自动生成,但会增加硬件成本。
mohanwei 发表于 2007-8-20 14:29 | 显示全部楼层

温度变化比较缓慢,被打断几次无所谓的。

实际上你往往还需要进行平滑处理……
bg6nw 发表于 2007-8-20 21:30 | 显示全部楼层

2楼正解

单片机定时采样温度,上位机要温度时,中断采样,把上一次采样值给它。
lfc9861 发表于 2007-8-21 15:20 | 显示全部楼层

很难实现,18B20对时间要求确实很苛刻,如果还有其他更重要的任务,就很不好规划了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部