18B20采用一条线完成主从机通信,而且可以用数据线寄生供电,电压为3-5V,测量-55-125度。
18B20典型电路
一、延时,因为18B20内部时序是以15us为单位,所以延时程序是15us的倍数(以11.0592M为例)
二、初始化。
初始化时序图
主机先将总线拉低480us-960us来发送复位脉冲。然后释放总线进入接收模式,总线椒放后,上拉电阻把总线上拉到高电平,18B20检测到上升沿后15us-60us,拉低总线60us-240us的方式“应答”。
初始化代码
三、写时隙
写时隙时序图
分写“0”和写“1”两种时隙,所有写时隙必须最少有60us的持续时间,相邻两个写时隙最少有1us的恢复时间。
1.两种写时隙都是主机通过拉低总线产生,也就是写时隙前第一步是将总线拉低。
2.写“1”,拉低总线后必须在15us内释放总线,总线恢复为高电平。
写“0”,持续拉低总线最少60us。
3.18B20会在检测到低电平后15-60us内采样总线,在采样时间内,如果总线为高电平,则18B20写1,如果为低电平,则18B20写0。
写时隙代码
四、读时隙
读时隙时序图
18B20只有在主机发出读时隙后才会向主机发送数据,因此,在发出读暂存命令【BEH】或读电源命令【B4H】后,主机必须立即产生读时隙以便18B20提供数据。
读时隙也是以拉低总线开始的。所有读时隙最少要有60us时间,相邻两个读时隙最少有1us恢复时间。
1.先是主机将数据线拉低最小1us,必须在15us内释放总线(18B20在检测到下降沿后15us将数据放到数据线上)。
2.然后主机在15us后读取总线状态。
3.延时约45us,释放总线,以满足读时隙最少60us的时序要求。
读时隙代码
五、读取温度值的例子
读取温度代码
注意:上面代码返回的并不是真实的温度,因为18B20内部是12位的数据,还要将值右移4位才是真实值。
逻辑分析仪抓取的完整时序
需要此仿真程序及源代码的可以联系我,免费提供。