登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 第八章:DS18B20——单线传输

[复制链接]
发表于 2017-2-11 15:39:55 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C51
学习安排: 详见:http://bbs.hpuedd.com/forum.php?mod=viewthread&tid=837&fromuid=385
开始时间: 2017-02-11
结束时间: 2017-02-13
本帖最后由 夜色星空 于 2017-2-11 15:42 编辑
老规矩,先上物理链路

2-1.PNG


对,就这一张图

在物理链路上

DS18B20非常的简单,除了电地线以外只有一根数据线(比串口还省了一根)

所以随之而来的便是复杂的时序(最能体现时序的重要性,因为以后的外设都与时序有关,所以先说DS18B20)

(PS:此贴不发程序,只说原理,只有自己切实模拟一遍时序,才能体会时序的重要)


首先,作为温度传感器,他必须要可以测温并储存温度

那么,为了存储,他必须要有相应的存储空间

1-1.PNG

各个暂存器的用途(这里中文版手册中的暂存器4为CONFIG寄存器,在帖子最后会有说明)

2-2.PNG

为什么是暂存器,因为在掉电后,内部数据丢失(暂时存储)

(PS:DS18B20内部还有一个EEPROM,但是没用过,所以不敢乱讲)

也就是说。我们需要的温度信息将会以二进制存储在前两个寄存器

也就是说只读前两个字节数据就可以了


但是,在读数据之前,我们应该先启动DS18B20让它转换一次

那么也就用到了命令,可是它不像LCD1602那样可以用RS引脚电平选择到底是数据还是命令

所以在读到特定的数据时DS18B20会将其当成指令

1-4.PNG


然而,单单有这些指令还不够

DS18B20的中文数据手册开篇就讲了它的卖点

2-3.PNG

而且,它的生产厂商“1”得很彻底

1.一个IO口可以接一串DS18B20

2.甚至都不用共电,只需一个IO口再接一下地就OK了(此模式笔者没接触过,在此不说,有兴趣自行百度)

然而随之带来的麻烦便是还要进行识别

既然要想识别,那么必定先有ID

如图

2-5.PNG

这便是它的身份号

当你使用它时,需要先通知它

因此就有了额外的ROM指令(指令的使用与普通指令无任何区别,只不过是针对ROM的)

1-2.PNG

我们可以用这些命令来选择我们所要操控的DS18B20

至于上述所说的复位脉冲,其作用就好比返回到初始

举个例子,刚开始我们执行了对器件的操作

这就像是进入磁盘文件目录一样

从C:/到c:/program

再到C:/program/system

这样一级一级操作

复位脉冲就好比从system文件夹,回到C:/

然后再打开其他文件(执行其它命令)

它的时序图如下

1-3.PNG

也就是当你将IO口拉低480-960US后再拉高

等待15-60US后总线会被(所有同线DS18B20)拉低


至此,我们来整理一下流程

(以读取一次温度转换为例)


  • 先上电
  • 发送复位脉冲(通知器件有数据传输)
  • 跳过ROM匹配(仅限单个DS18B20时可用)
  • 发送温度转换命令
  • (第一次操作完成,延时稍稍等待,此时暂存器中有正确温度)
  • 发送复位脉冲
  • 跳过ROM匹配
  • 发送读取暂存器命令
  • 接收数据(注意是一口气将9个暂存器读完,也可以发送复位脉冲停止)
  • 用数学公式转化为对应十进制
  • (第二次操作完成,温度结果可用串口读出)


基本步骤明了了,下面就是最重要的时序了

(PS:DS18B20默认从低到高收发)

1-5.PNG

如图

以控制器写0为例

先将IO口拉低15US

再将IO口拉低15——30US(也就是一直拉低别动)

然后,在总时间不超过120US时将IO口拉高

(可以认为写0就是将IO口拉低60-120US后拉高)

写1同理


以控制器读0为例

先拉低IO口不超过15US后拉高并读取15US前的状态

读1同理


(PS:两传输数据的时间间隔应大于1us)


至此,简单DS18B20的数据传输告一段落

下面是温度计算

2-6.PNG



最后说一下,可能因为中文版技术手册年代太过久远,所以有些内容与实际应用不符

比如温度计算

2-7.PNG

暂存器

2-8.PNG

等内容



为阅读方便使用中文版,但一切以英文原版为主



(放HEX,结贴)



1-3.PNG
该会员没有填写今日想说内容.
发表于 2017-2-18 22:29:23 | 显示全部楼层
当初做温度上位机,18b20没少调,时序真的太重要了。。。。。。
Carpe.Diem.
 楼主| 发表于 2017-2-20 22:37:32 | 显示全部楼层
本帖最后由 夜色星空 于 2017-2-22 16:59 编辑
如果让他嘎斯 发表于 2017-2-18 22:29
当初做温度上位机,18b20没少调,时序真的太重要了。。。。。。

反正我写程序,一般都是时序问题出错,所以就特意说一下。
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表