用示波器实测方式来解读DS18B20的工作时序和协议
疫情原因,个人时间较多,最近我用普通的示波器,采用人工的方式对DS18B20的协议进行了解码,以下是用示波器实测方式来解读DS18B20的工作时序和协议,希望对大家有用!
首先来看DS18B20工作时的整体波形:
详细解读如下:
一:示波器抓取DS18B20工作时的波形。
二:单片机对DS18B20发出温度转换指令时的波形。
图二为温度转换操作:
1,首先按照DS18B20的时序,拉低总线480-960微秒进行复位,然后检测DS18B20发出的60-240微秒的应答脉冲,
2,我的PCB上只有一个DS18B20,所以跳过ROM,指令为CCH(16进制数,二进制码为11001100,按照操作协议要求单片机应以低字节在前高字节在后的方式在单总线上发出数据:00110011)。
3,发出温度转换指令44H(16进制数,二进制码为01000100,按照操作协议要求单片机应以低字节在前高字节在后的方式在单总线上发出数据:00100010)
4, 延时960MS
三:单片机进行读温度数据操作时的波形。
图三为读温度操作:
1,首先按照DS18B20的时序,拉低总线480-960微秒进行复位,然后检测DS18B20发出的60-240微秒的应答脉冲,
2,我的PCB上只有一个DS18B20,所以跳过ROM,指令为CCH(16进制数,二进制码为11001100,按照操作协议要求单片机应以低字节在前高字节在后的方式在单总线上发出数据:00110011)。
3,发出读温度指令BEH(16进制数,二进制码为10111110,按照操作协议要求单片机应以低字节在前高字节在后的方式在单总线上发出数据:01111101)
4,读取DS18B20发送的温度数据,该数据也是按照低位在前高位在后的顺序在单总线上发送的,实时数据为01001111,10000000转换为高位在前低位在后的真实数据:00000001,11110010,高位8字节数据的前5位为温度正负符号位,正温度(一般指0温度以上)为00000,负温度(一般指0温度以下)为11111,将我的时实温度进行换算,高位00000001与低位11110010合并后为0000000111110010,转换成十六进制数为1F2,转换成十进制数为498,实时温度为498X0.0625=31.125度。我的温度转换位数用的是默认的。
好了,终于得到温度了!