位置:51电子网 » 技术资料 » 传感与控制

能温度传感器Dsl8b20在多路测温中的应用

发布时间:2008/5/29 0:00:00 访问次数:1019

  单总线芯片可以使得硬件结构非常简单,特别适合应用在对于距离远、节点分布多的场合,如粮仓温度检测,大棚温室温度监控等。本文给出的设计通用性好,可以方便地移植到其他应用场合。

  1 dsl8b20编程简介

  每一片单总线芯片内部都有一个全球惟一的64b编码,在多路测温时就是通过匹配每个芯片的rom编码(1d),来搜寻该路的温度。dsl8b20有9个可擦写的内部寄存器,称为便笺式ram。所有的串行通讯,读写每一个bit位数据都必须严格遵守器件的时序逻辑来编程,同时还必须遵守总线命令序列,对单总线的dsl8b20芯片来说,访问每个器件都要遵守下列命令序列: 首先是初始化;其次执行rom命令;最后就是执行功能命令(rom命令和功能命令后面以表格形式给出)。

  如果出现序列混乱,则单总线器件不会响应主机。当然,搜索rom命令和报警搜索命令,在执行两者中任何一条命令之后,要返回初始化。

  基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机设备,且准备就绪。

  在主机检测到应答脉冲后,就可以发出rom命令。这些命令与各个从机设备的惟一64 brom代码相关。在主机发出rom命令,以访问某个指定的dsl8620,接着就可以发出dsl8620支持的某个功能命令。这些命令允许主机写入或读出dsl8b20便笺式ram、启动温度转换。软件实现dsl8b20的工作严格遵守单总线协议:

  (1)主机首先发一复位脉冲,信号线上所有dsl8620器件都被复位。

(2)接着主机发送rom命令,程序开始读取单个在线的芯片rom编码并保存在单片机数据存储器中,然后卸下已读出的,将未读出编码的dsl8620逐个挂在总线上并读取其rom编码,直到把所有的需要用到的dsl8620的rom编码都离线读出,最后用一个二维数组保存所有这些rom编码,数据保存在x25043中。

(3)系统工作时,把所有读取了编码的且需要用的dsl8b20挂在总线上。发温度转换命令,再总线复位。

(4)然后就可以从刚才的二维数组逐个匹配在线的温度传感器,随后发温度读取命令就可以依次获得各路对应的温度值了。读取温度软件流程框图如图1所示。

  在主机初始化过程,主机通过拉低单总线至少480/us,以产生复位脉冲。接着,主机释放总线,并进入接收模式。当总线被释放后,上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15~60/us,接着通过拉低总线60-240//s,以产生应答脉冲。

//总线复位程序
bit dsl8b20_reset(void)


  写时隙均起始于主机拉低总线,产生写1时隙的方式:主机在拉低总线后,接着必须在15ups之内释放总线;而产生写。时隙的方式:在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60us)。

  在写字节程序中的写一个bit位的时候,没有按照通常的分别写。时序和写1时序,而是把两者结合起来,当主机拉低总线后在15us之内将要写的位c给do:如果c是高电平满足15/is内释放总线的要求,如果c是低电平,则do
=c这条语句仍然是把总线拉在低电平,最后都通过延时58us完成一个写时序(写时序0或写时序1)过程。


  每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时隙之后,单总线器件才开始在总线上发送。或1。所有读时隙至少需要60us。

  以上3个子程序虽然是针对dsl8b20开发的,其实单总线芯片的时序都相似,只要根据其他类似芯片的时序特点对上述子程序稍做修改就可以同样使用。下面是多点测温主程序。输入参数x为测温点的号码。

  限于篇幅,这里没有列出读单个dsl8620芯片rom编号的程序。多路测温没有采用发rom命令0fh搜索所有在线温度传感器

  单总线芯片可以使得硬件结构非常简单,特别适合应用在对于距离远、节点分布多的场合,如粮仓温度检测,大棚温室温度监控等。本文给出的设计通用性好,可以方便地移植到其他应用场合。

  1 dsl8b20编程简介

  每一片单总线芯片内部都有一个全球惟一的64b编码,在多路测温时就是通过匹配每个芯片的rom编码(1d),来搜寻该路的温度。dsl8b20有9个可擦写的内部寄存器,称为便笺式ram。所有的串行通讯,读写每一个bit位数据都必须严格遵守器件的时序逻辑来编程,同时还必须遵守总线命令序列,对单总线的dsl8b20芯片来说,访问每个器件都要遵守下列命令序列: 首先是初始化;其次执行rom命令;最后就是执行功能命令(rom命令和功能命令后面以表格形式给出)。

  如果出现序列混乱,则单总线器件不会响应主机。当然,搜索rom命令和报警搜索命令,在执行两者中任何一条命令之后,要返回初始化。

  基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机设备,且准备就绪。

  在主机检测到应答脉冲后,就可以发出rom命令。这些命令与各个从机设备的惟一64 brom代码相关。在主机发出rom命令,以访问某个指定的dsl8620,接着就可以发出dsl8620支持的某个功能命令。这些命令允许主机写入或读出dsl8b20便笺式ram、启动温度转换。软件实现dsl8b20的工作严格遵守单总线协议:

  (1)主机首先发一复位脉冲,信号线上所有dsl8620器件都被复位。

(2)接着主机发送rom命令,程序开始读取单个在线的芯片rom编码并保存在单片机数据存储器中,然后卸下已读出的,将未读出编码的dsl8620逐个挂在总线上并读取其rom编码,直到把所有的需要用到的dsl8620的rom编码都离线读出,最后用一个二维数组保存所有这些rom编码,数据保存在x25043中。

(3)系统工作时,把所有读取了编码的且需要用的dsl8b20挂在总线上。发温度转换命令,再总线复位。

(4)然后就可以从刚才的二维数组逐个匹配在线的温度传感器,随后发温度读取命令就可以依次获得各路对应的温度值了。读取温度软件流程框图如图1所示。

  在主机初始化过程,主机通过拉低单总线至少480/us,以产生复位脉冲。接着,主机释放总线,并进入接收模式。当总线被释放后,上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15~60/us,接着通过拉低总线60-240//s,以产生应答脉冲。

//总线复位程序
bit dsl8b20_reset(void)


  写时隙均起始于主机拉低总线,产生写1时隙的方式:主机在拉低总线后,接着必须在15ups之内释放总线;而产生写。时隙的方式:在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60us)。

  在写字节程序中的写一个bit位的时候,没有按照通常的分别写。时序和写1时序,而是把两者结合起来,当主机拉低总线后在15us之内将要写的位c给do:如果c是高电平满足15/is内释放总线的要求,如果c是低电平,则do
=c这条语句仍然是把总线拉在低电平,最后都通过延时58us完成一个写时序(写时序0或写时序1)过程。


  每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时隙之后,单总线器件才开始在总线上发送。或1。所有读时隙至少需要60us。

  以上3个子程序虽然是针对dsl8b20开发的,其实单总线芯片的时序都相似,只要根据其他类似芯片的时序特点对上述子程序稍做修改就可以同样使用。下面是多点测温主程序。输入参数x为测温点的号码。

  限于篇幅,这里没有列出读单个dsl8620芯片rom编号的程序。多路测温没有采用发rom命令0fh搜索所有在线温度传感器

相关IC型号
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!