DS18B20溫度讀取筆記1-復位函數

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)。具體時序圖見下圖:

DS18B20溫度讀取筆記1-復位函數

Reset函數僞代碼:

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       

}                                            //

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章