嵌入式学习的第四十三天-ds18b20 数字温度传感器
一、ds18b20工作流程
复位 -> 跳过ROM(CCH) -> 启动温度转换(44H) -> 延时等待 -> 复位 -> 跳过ROM(CCH) ->读取温度(BEH) -> 接收温度数据
延时等待的目的:温度转换需要一定的时间
复位的目的:每次与ds18b20进行通信时,都需要复位(告诉ds18b20要与其进行通信)
读取到的温度数据:前两个字节是温度值
二、ds18b20通信时序
1. 初始化时序 (复位)
(1)主机将总线拉低480us - 960us, 发送一个低电平脉冲(复位)
(2)释放总线,变为高电平(由于有上拉电阻,不占用总线时总线为高电平)
(3)释放总线后在延时15-60us后的60-240us时间内检测总线是否为低电平(ds18b20将总线拉低)
2. 写时序(写0时序和写1时序) 写时序周期60us - 120us
(1) 主机先把总线拉低大于1us,表示写周期开始
(2) 若主机想写'0', 则无须释放总线, 继续拉低电平至少60us直至写周期结束,释放总线为高电平
(3)若主机想写'1', 在拉低总线1us后, 释放总线为高电平,一直到写周期结束
(4)从机DS18B20检测到总线被拉低后,等待15us后,从15us - 45us对总线采样(典型时间15us)
(5) 在采样时间内,若检测到总线为高电平则认为主机发送了'1',若检测到总线为低电平则主机发了'0'
3. 读时序 (读0时序和读1时序) 读时序周期60us - 120us
(1)主机先把总线拉低大于1us,然后释放总线,表示读周期开始
(2)若DS18B20发送'0', 则把总线拉低并保持至少从读周期开始的15us,然后释放总线为高电平
(3)若DS18B20发送'1', 则在主机释放总线后不拉低总线(为高电平)
(4)主机必须在读周期开始的15us内检测总线电平的高低,若检测到总线为低电平,则ds18b20发送了'0',为高电平,则ds18b20发送了'1'