Ds18b20数字温度传感器
模拟温度传感器: 热敏电阻,,
输出的电压随着温度变化
将变化的电压值,,转化成数字信号,,, 这就是模拟传感器,,比较复杂,,这个数据只是正比于温度,,还要计算温度实际是多少
数字温度传感器 : 将模拟温度传感器变成了一个芯片,,将温度自动的转换成了芯片内部的温度,,只需要把转换之后的温度传递出来
单片机一个IO口,,可以读很多个温度传感器
常用的温度传感器
家居自动化
DQ : 测温度,,
一个引脚怎么传输数据,,,,采用了1-wire总线进行通讯,,,异步的,,串行的通讯协议
1-wirte通讯协议
scratch:抓
sensor : 传感器
输入输出引 DQ ,,,, 上拉电阻,,开漏模式,,,能够主动拉低电平,,不能拉高,,只能高阻态
scratchpad : 暂存器
- 高温预警
- 低温预警
- 其他配置信息
- 温度
报警:通过引脚输出一个特定的信号
18B20是一个低功耗芯片,,如果不发送测温命令,,,他不会主动测
,,收到命令之后,会测温,,将温度放入暂存器,,,单片机拿到这个温度
单片机主导,,,测温命令,,,获取温度命令
1-wire: wire:金属丝
半双工,串行通信协议,,主要用于各种低成本传感器,和存储设备进行数据交换,,,
和I2C协议类似,,也采用主从架构,,
主设备
每个从设备都有一个唯一的64位的地址,,用于设备设别和通讯,,,这个64位的地址,,自己不能设置,,都是固定的,,
都是制造商在生产的时候烧录进去的,,是不可更改的
每次通信时,,主设备都要先发送一个复位脉冲,,,
复位: 从低功耗状态 恢复到 正常通信状态
然后回复一个存在脉冲
主设备可以根据这个存在脉冲获知设备的健康状态
DQ引脚线的电平
释放DQ总线
释放DQ,,确认数据发送完毕
温度00011001,,总线上不可能一次出现8位,,,所以协议必须规定,,,某一小段时间内的电平,,代表一位数据
这就是时隙slot
read 0 slot: 表示 如果芯片内部这一位是0,,他会怎么操作总线read 1 slot: 表示如果这一位是 1,他会怎么操作总线
这一位数据恰好是0,,,总线长这样
采样: 在规定的时间查看总线当前是高电平还是低电平
最开始 1-2us,,,主机拉低总线,,,开始读时隙,,,然后主机释放总线,,,后面的电平就全部由 ds18b20决定,,如果ds18b20 要发0,,,他会立刻继续拉低,,,
所以2us后的那个低电平就是已经是 ds18b20的 时隙slot,,而不是等到15us之后,,才是,,15us只是建议你读取的时间
10~15us附近
最稳定
前半段 基本可靠
ds18b20 samples : 这个时间段查看总线,,来判断你写的是0,,还是1
ds18b20通讯流程:
初始化
主设备发送复位脉冲,,从设备回复存在脉冲发送ROM命令
64位的ROM,从机地址,,唯一标识,,为了确定是哪个从机- 搜索ROM命令 : 识别和列出所有连接在总线上的18b20设备,,,
- 读取ROM命令: 只有在单设备连接的时候,,主机才可以直接用这个命令读取该设备的ROM代码
- 匹配ROM命令: 该命令后会跟随一个特定的64为ROM代码,,选择总线上特定的设备进行通讯,,,发哪个地址就是和谁进行通讯
- 跳过ROM命令 : 在单设备环境中,,可以跳过ROM步骤,,直接通讯
发送功能命令
测温命令,读取温度命令 ,,等均属于功能命令- 温度转换 : 温度的模拟信号转成数字信号
- 读取暂存寄存器 : 读取暂存器中存储的值 。。。。这个命令会返回暂存器中的全部数据,,共九个字节
每次执行完了一个功能命令的时候会自动恢复到低功耗状态
每次发命令,,都要初始化。。发复位脉冲,重新激活,,指定ROM,,然后再发送命令
暂存器中的全部数据,,共九个字节,,,温度值保存在前两个字节,,只需要接收前两个字节即可
ls byte : 低字节
ms byte : 高字节
它不仅要存整数部分,,还要存小数部分,,还要存正负号,,一个字节不够
精度 0.0625,,最终的温度是 0.0625整数倍
18b20的精度可选,,,
temperature sensor : 温度传感器
alarm high trigger : 报警高触发 ===》 存储介质是 EEPROM
alarm low trigger : 报警低触发
configuration register : 配置计算器,,设置精度,设置分辨率,,,默认0.0625
8bit crc generator : 校验码,,把ram之前的数据进行校验,,判断通讯是否正确
CRC : cyclic redundancy check : 循环冗余校验 ,,, 广泛用于数据传输领域的错误检测技术
reserved : 保留位
单总线 (1-wire bus) : 通用数据总线,,一根通讯线 DQ ===》 Data Input/Output
异步,半双工
ds18b20 很广泛,,单总线不广泛,,,
copy scratchpad : 将Ram暂存器 写入到 EEPROM中,,如果想掉电不丢失,,,写入之后,,copy
recall E2 : 将EEPROM中数据读入到RAM中
read power supply : 获取供电模式,,,后面会跟着读取一位的时序,,,
power supply sense
