本帖最后由 湖南孵化 于 2020-7-18 16:05 編輯
最近得空,用普通的示波器,采用人工的方式對DS18B20的協議進行了解碼。詳細內容如下:
一:示波器抓取DS18B20工作時的波形。
二:單片機對DS18B20發出溫度轉換指令時的波形。
MCU發出溫度轉換指令時的波形
圖二為溫度轉換操作:
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度。我的溫度轉換位數用的是默認的。
好了,終于得到溫度了,
結束!
|