DS18B20主要性質:
全數字輸入/輸出單總線通信結構 (只佔用一個IO口,而且在這個IO口上能掛接多個DS18B20)
內部溫度爲12bit分辨率,精度爲正負0.5℃ (注意不要將精度和分辨率混爲一談)
12位分辨率的時候轉換工作週期最長爲750ms (算是比較慢的外設了,設計時要考慮多任務工作的要求)
可以使用寄生電源模式(可以再省掉VCC的線,這種模式下總共只要2根線就能工作,但是對IO口有特別要求)
工作溫度範圍爲:-55℃至+125℃(理論值,實際工作溫度小於此值)
內置唯一產品序列號,方便都器件聯機工作(內部序列號還可以做他用,例如:用作加密的密鑰)
封裝:
TO-92封裝爲最常用(其他我沒用過- -!)
引腳位爲器件扁平面朝上,引腳朝向自己,左起依次爲 GND - DQ - VCC
驅動步驟模塊:
1. 復位:每次對DS18B20操作都要進行復位。復位操作爲MCU將DS18B20單總線拉低至少480us,拉低後MCU應當釋放單總線(拉高)然後置單總線引腳爲輸入狀態。當DS18B20收到復位信號並且MCU釋放了單總線後,延遲15至60uS後會回發一個回覆信號(會拉低總線60至240uS)。具體時序圖見下圖:
DQ爲單總線引腳
DQ_INPUT爲單總線引腳設置爲輸入模式
DQ_OUTPUT爲單總線引腳設置爲輸出模式
DQ_READ爲讀單總線引腳狀態
DQ_L爲單總線引腳輸出低
DQ_H爲單總線引腳輸出高
delay_us(n):微秒延遲函數,n等於幾就延遲多少微秒
uint32 count;循環計數器,用以等待回覆信號,無符號32位整形變量。
uint8 Reset18b20(void)
{
uint8 read; //DQ引腳狀態暫存
uint8 err; //err出錯計數器
DQ_L; //拉低總線
delay_us(520); //延遲520微秒,時序上最低延遲480us就可以了,但是考慮到延遲可能有偏差所以稍稍
//延長延時用以確保可靠復位,只要保證能可靠復位此處延遲秒數可以自定(大於480)
DQ_H; //拉高釋放總線並改爲輸入模式
DQ_INPUT;
delay(60); //延遲60微秒
for (count = 0; count < 65535; count++) //count計數防止復位失敗出錯,如果MCU速度太快可以使用
{ //更大的計數量
if (DQ_READ == 0) //讀引腳狀態,如果拉低了則復位成功
{
read = 1; //復位成功,成功標誌置1
break; //退出循環
}
}
DQ_OUTPUT; //設置引腳爲輸出並置高
DQ_H;
if (read == 0) //如果復位不成功了則出錯變量增1
{
err += 1;
}
return err; //返回出錯變量,外部判斷如果爲0則成功,不是0
} //