本帖最后由 夜色星空 于 2017-2-11 15:42 编辑
老规矩,先上物理链路
对,就这一张图
在物理链路上
DS18B20非常的简单,除了电地线以外只有一根数据线(比串口还省了一根)
所以随之而来的便是复杂的时序(最能体现时序的重要性,因为以后的外设都与时序有关,所以先说DS18B20)
(PS:此贴不发程序,只说原理,只有自己切实模拟一遍时序,才能体会时序的重要)
首先,作为温度传感器,他必须要可以测温并储存温度
那么,为了存储,他必须要有相应的存储空间
各个暂存器的用途(这里中文版手册中的暂存器4为CONFIG寄存器,在帖子最后会有说明)
为什么是暂存器,因为在掉电后,内部数据丢失(暂时存储)
(PS:DS18B20内部还有一个EEPROM,但是没用过,所以不敢乱讲)
也就是说。我们需要的温度信息将会以二进制存储在前两个寄存器
也就是说只读前两个字节数据就可以了
但是,在读数据之前,我们应该先启动DS18B20让它转换一次
那么也就用到了命令,可是它不像LCD1602那样可以用RS引脚电平选择到底是数据还是命令
所以在读到特定的数据时DS18B20会将其当成指令
然而,单单有这些指令还不够
DS18B20的中文数据手册开篇就讲了它的卖点
而且,它的生产厂商“1”得很彻底
1.一个IO口可以接一串DS18B20
2.甚至都不用共电,只需一个IO口再接一下地就OK了(此模式笔者没接触过,在此不说,有兴趣自行百度)
然而随之带来的麻烦便是还要进行识别
既然要想识别,那么必定先有ID
如图
这便是它的身份号
当你使用它时,需要先通知它
因此就有了额外的ROM指令(指令的使用与普通指令无任何区别,只不过是针对ROM的)
我们可以用这些命令来选择我们所要操控的DS18B20
至于上述所说的复位脉冲,其作用就好比返回到初始
举个例子,刚开始我们执行了对器件的操作
这就像是进入磁盘文件目录一样
从C:/到c:/program
再到C:/program/system
这样一级一级操作
复位脉冲就好比从system文件夹,回到C:/
然后再打开其他文件(执行其它命令)
它的时序图如下
也就是当你将IO口拉低480-960US后再拉高
等待15-60US后总线会被(所有同线DS18B20)拉低
至此,我们来整理一下流程
(以读取一次温度转换为例)
- 先上电
- 发送复位脉冲(通知器件有数据传输)
- 跳过ROM匹配(仅限单个DS18B20时可用)
- 发送温度转换命令
- (第一次操作完成,延时稍稍等待,此时暂存器中有正确温度)
- 发送复位脉冲
- 跳过ROM匹配
- 发送读取暂存器命令
- 接收数据(注意是一口气将9个暂存器读完,也可以发送复位脉冲停止)
- 用数学公式转化为对应十进制
- (第二次操作完成,温度结果可用串口读出)
基本步骤明了了,下面就是最重要的时序了
(PS:DS18B20默认从低到高收发)
如图
以控制器写0为例
先将IO口拉低15US
再将IO口拉低15——30US(也就是一直拉低别动)
然后,在总时间不超过120US时将IO口拉高
(可以认为写0就是将IO口拉低60-120US后拉高)
写1同理
以控制器读0为例
先拉低IO口不超过15US后拉高并读取15US前的状态
读1同理
(PS:两传输数据的时间间隔应大于1us)
至此,简单DS18B20的数据传输告一段落
下面是温度计算
最后说一下,可能因为中文版技术手册年代太过久远,所以有些内容与实际应用不符
比如温度计算
暂存器
等内容
为阅读方便使用中文版,但一切以英文原版为主
(放HEX,结贴)
|