来源:百问网_嵌入式Linux wiki_jz2440 新1期视频维基教程 (视频文字版)
作者:韦东山
本文字数:1322,阅读时长:2分钟
比DHT11温湿度传感器精度高很多
DS18B20只通过一条数据线传输数据,既要控制器发送数据给芯片,又要通过芯片发送数据给控制器,所以这个是双向传输数据的
怎么在一个引脚上实现数据的双向传输 : 参考这视频的第19分钟之后的内容: 第19课_第001节_I2C协议与EEPROM
检测温度,我们需要一个主控芯片
如果有多个温度传感器,则需要一个主控制器去管理它们,通过发送命令传输数据,每个设备都会有固化在芯片内部的64bit ID的ROM来用于区分不同的设备
如果主控制器想访问设备,必须发送命令,这个命令中带有ID返回值
怎么访问指定的DS18B20
- 0 发出低脉冲,提醒准备工作: initialization
- 1 发出ID命令:ROM Command
- 2 发出功能命令: Function Command a转换温度 b读温度,读数据
每次操作,都要重重上述过程
内部框图
TEMPERATURE SENSOR温度ADC
SCRATCHPAD实际上是一个9 byte的内存 9byte的说明如下图所示
温度值会保存在9byte内存中的 BYTE0 和 BYTE1 也就是当我们发出一个温度值的命令之后,还需要发送一个读内存的命令才能把温度值读取出来
最后一位是CRC校验码,通过前8位的数据和最后一位的校验码比较 64位数据中有8位是校验码,
怎么采样温度?
- 1 初始化
- 2 ROM命令
- 3 FunctionCommand 设置某些值,比如转换温度
- 4等待完成
- 5 init
- 6 R om cmd
- 7 Function Command 读RAM中的值
关于EEPROM寄存器 前面两个字节可以用来设置用户自己的目的,也可以用来设置Th Tl 寄存器 Th Tl 寄存器就是用来设置警报,温度的上限或者下限,当温度超过某个值时它会发出警报 所谓警报只不过是在DS18B20中设置状态而已,并不能主动通知主芯片 主芯片可以发出某些命令来确定哪些芯片发出了警报 配置寄存器,用于设置精度,精度越高转换时间越长
EEPROM使用
- 1 上电
EEPROM自动放入RAM用于控制精度这些
- 2 写EEPROM
a 发出命令先写RAM
b从RAM转到EEPROM
- 3 读出EEPROM的值
a EEPROM值保存到RAM
b 发出命令读RAM
关于ROM命令和功能命令整理成一个表格
信号传输
- 1怎么initialization(初始化)
- 2 怎么发数据,怎么发出1bit
怎么发出bit0
怎么发出bit1
- 3怎么读数据==>怎么读1bit
怎么判读读到0
怎么判断读到1
初始化时序
一开始是高电平,想要开始传输信号,必须要拉低至少480us释放总线 经过15~60us之后 DS18B20会把这条线拉低60~240us
2 怎么发数据,怎么发出1bit
- 怎么发出bit0
- 怎么发出bit1
写数据时序
不论是写0还是写1时序都是大于60us 写0拉低总线维持60us以上 写1时,信号线拉低1us时间,提醒要写数据了,然后回高,写1位之间的时间间隔1us
读数据时序 也是由主机发起 提醒脉冲大于1us,主机马上释放总线 在15us之内读信号,一个读周期至少是60us,每位的间隔也是1us
DS18B20提供了编程图
供电方式
「新品首发」STM32MP157开发板火爆预售!首批仅300套
,