标题: 用示波器人工解码DS18B20协议时序。 [打印本页]

作者: 湖南孵化    时间: 2020-7-18 15:49
标题: 用示波器人工解码DS18B20协议时序。
本帖最后由 湖南孵化 于 2020-7-18 16:05 编辑

最近得空,用普通的示波器,采用人工的方式对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度。我的温度转换位数用的是默认的。
好了,终于得到温度了,
  结束!

DS18B20.jpg (78.08 KB, 下载次数: 171)

DS18B20工作时的整体波形

DS18B20工作时的整体波形

作者: bjt040412    时间: 2022-2-11 15:11
民间不乏高手
作者: wukouyyq    时间: 2022-4-16 14:26
示波器是高手
作者: 正在学习51    时间: 2022-12-10 02:50
我还没有了解的那么清楚,前部分问的是这个吧,但是因为我还没有了解所以看不太懂。协议是自定义的是吧?0中间那个尖波是反馈?有没有反馈这些我都没有了解清楚
作者: 正在学习51    时间: 2022-12-10 02:50
wukouyyq 发表于 2022-4-16 14:26
示波器是高手

我还没有买
作者: HWX0309    时间: 2022-12-12 08:50
谢谢分享时序分析。
作者: 王秋冬    时间: 2022-12-15 20:52
高手,讲解的很好,谢谢分享经验。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1