51单片机 DS18B20温传

DS18B20集成了A/D转换器。

只用一个引脚与单片机进行通信。可以串接多个数字温度传感器进行范围的温度检测。

设计精度0.1(测温范围-55C~+125C,固有测温分辨率0.5C,测量结果以9-12位数字量方式串行传送),正常温度60度,低于59度,红灯亮,高于61度,也是。

当开始运行后,先初始化DS18B20,然后设定温度恒定值,->显示当前温度->判断温度,红灯亮不亮。

DS18B20工作原理是用与温度比较敏感的振荡器实现的。一般情况下温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。

这里写图片描述

主要由2部分组成:64位ROM、9字节暂存器,如图所示。

(1) 64 位ROM。它的内容是64 位序列号,它可以被看作是该DS18B20 的地址序列码,其作用是使每个DS18B20 都各不相同,这样就可以实现一根总线上挂接多个DS18B20 的目的。

这里写图片描述

8位CRC:是单总线系列器件的编码,DS18B20定义为28H。
48位序列号:是一个唯一的序列号。
8位系列码:由CRC产生器生产,作为ROM中的前56位编码的校验码。仅仅作为校验码而已

这里写图片描述

以上是内部9 个字节的暂存单元(包括EEPROM,注意是字节)。
字节0~1 是温度存储器,用来存储转换好的温度。
字节2~3 是用户用来设置最高报警和最低报警值。这个可以用软件来实现。
字节4 是配置寄存器,用来配置转换精度,让它工作在9~12 位。
字节5~7 保留位。
字节8 CRC校验位。是64位ROM中的前56位编码的校验码。由CRC发生器产生。

这里写图片描述

温度寄存器由两个字节组成,分为低8位和高8位。一共16位。
其中,第0位到第3位,存储的是温度值的小数部分。
第4位到第10位存储的是温度值的整数部分。
第11位到第15位为符号位。全0表示是正温度,全1表示是负温度。
表格中的数值,如果相应的位为1,表示存在。如果相应的位为0,表示不存在。

这里写图片描述

精度值:
9-bit 0.5℃
10-bit 0.25℃
11-bit 0.125℃
12-bit 0.0625℃

这里写图片描述

DS18B20首先初始化,ROM操作命令,存储器操作命令,处理数据。每一片DS在其ROM中都有唯一48位序列号,在出厂前已写入片内ROM中,主机在操作前必须读出来,

现在的大致印象就是:串行传输,时序严格,蜜汁初始化。

这些并不是很懂。

测量每秒一次

可以看到非常困难。

单总线协议(1-wire)

1.定义:主机和从机通过1根线进行通信,在一条总线上可挂接的从器件数量几乎不受限制。

2.特点:这是由达拉斯半导体公司推出的一项通信技术。它采用单根信号线,既可传输时钟,又能传输数据,而且数据传输是双向的。

3.优点:单总线技术具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等。

主机通过拉低单总线480 ~ 960 us产生复位脉冲(制造了一个上升沿),然后释放总线,进入接收模式。

单总线器件检测到上升沿之后,延时15 ~ 60 us,单总线器件拉低总线60 ~ 240 us来产生应答脉冲。

主机接收到从机的应答脉冲(在有限时间内)说明单总线器件就绪,初始化过程完成。说白了,就是你拉低一下,然后我拉低一下,就认为准备好了。

当数据线拉低后,在15 ~ 60 us的时间窗口内对数据线进行采样。如果数据线为低电平,就是写0,如果数据线为高电平,就是写1。(先拉低,经过15us后是继续保持低电位(0)还是拉高成高电位(1))。

主机要产生一个写1时间隙,就必须把数据线拉低,在写时间隙开始后的15 us内允许数据线拉高。主机要产生一个写0时间隙,就必须把数据线拉低并保持60 us。

读时间隙

当主机把总线拉低是,并保持至少1 us后释放总线,必须在15 us内读取数据。

比较简单的读写协议。

DS18B20 时序包括如下几种: 初始化时序、 写(0 和 1) 时序、
读(0 和 1) 时序。 DS18B20 发送所有的命令和数据都是字节的低位在前。初始化时序也是主机发送复位脉冲,从机(这里说的就是DS18B20)发送应答脉冲。

写时序:就是主机先拉低总线代表我(主机)要开始写数据了,从机再对总线采样,是低电平就是主机写0,是高电平就是主机写1(从机采样是自动的,我们不用管!),这个过程总线保持同样的状态至少60us(是0是1都要保持60us)即可被正确采样,

写时序包括写 0 时序和写 1 时序。 所有写时序至少需要 60us, 且在 2 次独立的写时序之间至少需要 1us 的恢复时间,两种写时序均起始于主机拉低总线。
写 0时序: 主机输出低电平, 延时 至少60us, 然后释放总线, 延时 至少1us恢复
写 1 时序: 主机输出低电平, 在15us内允许拉高总线, 然后释放总线, 延时 一共至少60us

读时序:读时序其实和写时序操作非常相似,不一样的地方就是不再是从机进行采样,而是主机要在总线拉低的15us内完成采样。其他地方都和写时序相同(也是主机首先拉低)。

单总线器件仅在主机发出读时序时, 才向主机传输数据, 所以, 在主机发出读数据命令后, 必须马上产生读时序, 以便从机能够传输数据。 所有读时序至少需要 60us, 且在 2 次独立的读时序之间至少需要 1us 的恢复时间。 每个读时序都由主机发起, 至少拉低总线 1us。 主机在读时序期间必须释放总线, 并且在时序起始后的 15us 之内采样总线状态。

就是如果主机不写的话,它就是代表读的。究竟是要写操作还是读操作,都是通过主机向从机写命令后,再启动时序进行的。

例如:对于读操作而言,假如要开始读取转换后的温度,那就得先发送读取DS18B20存储器命令,这里就先利用写时序向从机写入命令,然后主机再启动读时序获得转换好的温度!

并不是仅仅压一个低电位就可以为所欲为了,难着呢。

读取到的DS18B20的温度值(16位)如何转换为实际的温度值,以及关于SBUF串行口发送/接收数据缓冲器和串行口的波特率的设置问题,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值