www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 程序員小哈
[導(dǎo)讀]網(wǎng)上DS18B20的驅(qū)動實現(xiàn)代碼一大堆,簡簡單單的就能夠移植成功,獲得溫度值,但是為什么代碼這么寫?為什么要延時那么長的時間?不對照手冊仔細分析時序圖,還真是不明白為什么。 下面我們就來詳細剖析一下DS18B20的驅(qū)動函數(shù)的實現(xiàn)。 DS18B20 簡介 DS18B20數(shù)字

網(wǎng)上DS18B20的驅(qū)動實現(xiàn)代碼一大堆,簡簡單單的就能夠移植成功,獲得溫度值,但是為什么代碼這么寫?為什么要延時那么長的時間?不對照手冊仔細分析時序圖,還真是不明白為什么。

下面我們就來詳細剖析一下DS18B20的驅(qū)動函數(shù)的實現(xiàn)。

DS18B20 簡介

DS18B20數(shù)字溫度傳感器是美國DALLAS公司生產(chǎn)的單總線數(shù)字溫度傳感器。其測溫范圍為-55℃~+125℃(-67℉~+257℉),64位只讀存儲器的片序列號。從而允許多只DS18B20同時并聯(lián)在一根單線總線上;

華氏度和攝氏度換算關(guān)系:

(華氏度-32)×5÷9=攝氏度

DS18B20可以用一個微控制器的GPIO引腳去控制。器件內(nèi)部高速暫存器區(qū)含有兩個字節(jié)的溫度寄存器,用來存儲溫度傳感器輸出的數(shù)據(jù)。

此外,高速暫存器區(qū)還有上下溫度報警寄存器(TH和TL),和一個字節(jié)的配置寄存器。

配置寄存器允許用戶將溫度的精度設(shè)置為9~12位對應(yīng)的分辨率為0.5℃、0.25℃、0.125℃、0.0625℃。上電默認為12位轉(zhuǎn)換精度。

  • DS18B20存儲器圖

實際使用中,當(dāng)只是為了測溫,只需用到字節(jié)1,字節(jié)2和字節(jié)5。應(yīng)用環(huán)境中如果沒有強干擾,不是十分嚴格的話,不做校驗也可以。

其中,暫存寄存器中的字節(jié)5包含著配置寄存器,配置寄存器內(nèi)容如下圖所示:

用戶通過改變上表中R0和R1的值來配置DS18B20的分辨率。上電默認為R0=1及R1=1(12位分辨率)。

  • 溫度/數(shù)據(jù)對應(yīng)表:

溫度轉(zhuǎn)換后,溫度轉(zhuǎn)換的值將會保存在暫存存儲器的溫度寄存器中,并且DS18B20將會恢復(fù)到閑置狀態(tài)。

TH,TL和配置寄存器是EEPROM,存儲的數(shù)據(jù)在器件掉電時不會消失。

DS18B20的另一個功能是可以在沒有外部電源供電的情況下工作。當(dāng)總線處于高電平狀態(tài),DQ與上拉電阻連接通過單總線對器件供電。

同時處于高電平狀態(tài)的總線信號對內(nèi)部電容(Cpp)充電,在總線處于低電平狀態(tài)時,該電容提供能量給器件。

這種提供能量的形式被稱為“寄生電源”;

寄生電源模式時,VDD引腳必須接地。

  • “寄生電源”供電方式
  • 外部電源供電方式

原理圖

外觀及封裝

  • TO-92封裝
  • 防水型不銹鋼封裝

采用導(dǎo)熱性高的密封膠灌封,保證了溫度傳感器的高靈敏性,極小的溫度延遲。

芯片每個引腳均用熱縮管隔開,防止短路,內(nèi)部封膠,防水防潮。

引腳說明
紅線:VCC
綠線:GND
黃線:DQ,傳感器數(shù)據(jù)總線

驅(qū)動實現(xiàn)

INITIALIZATION TIMING

在初始化序列期間,總線控制器拉低總線并保持至少480us以發(fā)送一個復(fù)位脈沖,返回釋放總線,進入接收狀態(tài)(等待DS18B20應(yīng)答)。

總線釋放后,單總線由上拉電阻拉到高電平。

當(dāng)DS18B20探測到I/O引腳上的上升沿后,等待15-60us,然后其以拉低總線60-240us的方式發(fā)出存在脈沖。至此,初始化時序完畢。

所以,初始化成功的標(biāo)志就是能否讀到DS18B20這個先低后高的脈沖時序,并且拉低的時間要滿足60-240us。

復(fù)位DS18B20的代碼如下:

//復(fù)位DS18B20void DS18B20_Rst(void) {  DS18B20_IO_OUT(); //總線設(shè)置為輸出模式 DS18B20_DQ_OUT=0; //主機拉低總線 delay_us(750);  DS18B20_DQ_OUT=1; //釋放總線,產(chǎn)生的上升沿能被DS18B20檢測到 delay_us(15); //延時15us之后,等待DS18B20發(fā)送的低電平信號到達。}
//等待DS18B20的回應(yīng)//返回1:未檢測到DS18B20的存在//返回0:存在u8 DS18B20_Check(void) { u8 retry=0; DS18B20_IO_IN(); //總線設(shè)置為輸入模式 while (DS18B20_DQ_IN&&retry<200) //等待拉低總線60-240us的低電平 { retry++; delay_us(1); };
if(retry>=200)return 1; else retry=0; while (!DS18B20_DQ_IN&&retry<240) { retry++; delay_us(1); }; if(retry>=240) return 1;
return 0;}

READ/WRITE TIME SLOT TIMING DIAGRAM

DS18B20的寫時序(見下圖):

主機在寫時隙向DS18B20寫入數(shù)據(jù),其中分為寫”0”時隙,和寫”1”時隙??偩€主機使用寫“1”時間隙向DS18B20寫入邏輯1,使用寫“0”時間隙向DS18B20寫入邏輯0。

所有的寫時隙必須有最少60us的持續(xù)時間,相鄰兩個寫時隙必須要有最少1us的恢復(fù)時間。兩種寫時隙都通過主機拉低總線產(chǎn)生(見下圖)。

為了產(chǎn)生寫1時隙,在拉低總線后主機必須在15μs內(nèi)釋放總線。在總線被釋放后,由于上拉電阻將總線恢復(fù)為高電平。

為了產(chǎn)生寫”0”時隙,在拉低總線后主機必須繼續(xù)拉低總線以滿足時隙持續(xù)時間的要求(至少60μs)。

在主機產(chǎn)生寫時隙后,DS18B20會在其后的15~60us的一個時間段內(nèi)采樣單總線(DQ)。在采樣的時間窗口內(nèi),如果總線為高電平,主機會向DS18B20寫入1;如果總線為低電平,主機會向DS18B20寫入0。

綜上所述,所有的寫時隙必須至少有60us的持續(xù)時間。相鄰兩個寫時隙必須要有最少1us的恢復(fù)時間。所有的寫時隙(寫0和寫1)都由拉低總線產(chǎn)生。

//寫一個字節(jié)到DS18B20//dat:要寫入的字節(jié)void DS18B20_Write_Byte(u8 dat) {  u8 j; u8 testb;  DS18B20_IO_OUT(); //設(shè)置DQ為輸出模式 for (j=1;j<=8;j++)  { testb=dat&0x01; dat=dat>>1; if (testb)  { DS18B20_DQ_OUT=0;// Write 1 delay_us(2);  DS18B20_DQ_OUT=1; delay_us(60);  } else  { DS18B20_DQ_OUT=0;// Write 0 delay_us(60); // 等待DS18B20來采集信號  DS18B20_DQ_OUT=1; delay_us(2);  } }}

DS18B20的讀時序(見下圖):

主機發(fā)起讀時序時,DS18B20僅被用來傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出讀指令后必須立刻開始讀時序。

所有讀時序必須最少60us,包括兩個讀周期間至少1us的恢復(fù)時間。

當(dāng)總線控制器把數(shù)據(jù)線從高電平拉到低電平時,讀時序開始,數(shù)據(jù)線必須至少保持1us,然后總線被釋放。

DS18B20 通過拉高或拉低總線來傳輸”1”或”0”。

當(dāng)傳輸邏輯”0”結(jié)束后,總線將被釋放,通過上拉電阻回到上升沿狀態(tài)。

從DS18B20輸出的數(shù)據(jù)在讀時序的下降沿出現(xiàn)后15us 內(nèi)有效。因此,總線控制器在讀時序開始后必須把I/O口設(shè)置為輸入模式,以讀取I/O口狀態(tài)。

陰影部分為DS18B20釋放總線的時刻,總線為空閑狀態(tài)。

//從DS18B20讀取一個位//返回值:1/0u8 DS18B20_Read_Bit(void) // read one bit{ u8 data; DS18B20_IO_OUT(); //設(shè)置總線為輸出模式 DS18B20_DQ_OUT=0;  delay_us(2); //拉低最少1us DS18B20_DQ_OUT=1; //拉低再升高,產(chǎn)生讀時序 DS18B20_IO_IN(); //設(shè)置總線為輸入模式 delay_us(12); if(DS18B20_DQ_IN)data=1; else data=0;  delay_us(50);  return data;}
//從DS18B20讀取一個字節(jié)//返回值:讀到的數(shù)據(jù)u8 DS18B20_Read_Byte(void) // read one byte{ u8 i,j,dat; dat=0; for (i=1;i<=8;i++) { j=DS18B20_Read_Bit(); dat=(j<<7)|(dat>>1); } return dat;}
  • DS18B20的功能命令
  • 獲取溫度值

要獲取溫度值,我們需要發(fā)送上面功能命令0x44,然后發(fā)送讀取暫存寄存器命令0xBE,然后我們只需要獲得暫存器中的9個字節(jié)的前兩個字節(jié)即可。

要獲得DS18B20的溫度值,需要按照下表中的順序依次發(fā)送功能命令。

獲取溫度的具體代碼實現(xiàn)如下:

//開始溫度轉(zhuǎn)換void DS18B20_Start(void)// ds18b20 start convert{  DS18B20_Rst();  DS18B20_Check();  DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0x44);// convert}
//從ds18b20得到溫度值//精度:0.1C//返回值:溫度值 (-550~1250) short DS18B20_Get_Temp(void){ u8 temp; u8 TL,TH; short tem; DS18B20_Start (); // ds18b20 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0xbe);// convert TL=DS18B20_Read_Byte(); // LSB TH=DS18B20_Read_Byte(); // MSB if(TH>7) { TH=~TH; TL=~TL; temp=0;//溫度為負 }else temp=1;//溫度為正 tem=TH; //獲得高八位 tem<<=8; tem+=TL;//獲得底八位 tem=(float)tem*0.625;//轉(zhuǎn)換 if(temp)return tem; //返回溫度值 else return -tem; }

跳過ROM序列號檢測命令(0xCCH),對于單片DS18B20在線的系統(tǒng),該命令允許主機跳過ROM序列號檢測而直接對寄存器操作,從而節(jié)省時間,對于多片DS18B20在線系統(tǒng),該命令將引起數(shù)據(jù)沖突。

如果主機只是對一個DS18B20進行操作,進而不需要讀取ROM編碼了,只要發(fā)送跳過ROM(0xCCH)命令,就可以進行溫度轉(zhuǎn)換和讀取操作了。

  • 獲取DS18B20內(nèi)部ID序列號

因為咱們總線上只有一個DS18B20設(shè)備,所以直接發(fā)送0x33指令即可READ ROM。

DS18B20中有一個64位光刻ROM,按說明書說法,開始(最低)8位是產(chǎn)品類型標(biāo)號,對于DS18B20來說都是(28H),接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。

光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。

讀取ROM方法:先復(fù)位DS18B20,成功后執(zhí)行讀取ROM命令(33H),然后將這64位以8個字節(jié)的方式存入數(shù)組。

獲取DS18B20內(nèi)部ID序列號的具體代碼實現(xiàn)如下:

DS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0x33); for(i = 0; i < 8;i++){ arrDS18B20ID[i] = DS18B20_Read_Byte();} sprintf((char *)dtbuf,"DS18B20 ID is %02X %02X %02X %02X %02X %02X %02X %02X\r\n", arrDS18B20ID[0], arrDS18B20ID[1], arrDS18B20ID[2], arrDS18B20ID[3], arrDS18B20ID[4], arrDS18B20ID[5], arrDS18B20ID[6], arrDS18B20ID[7]);
printf((u8 *)dtbuf,strlen((char *)dtbuf));

我手里的兩個DS18B20得到的結(jié)果如下所示:

由上可以看出,首字節(jié)都是0x28,即產(chǎn)品類型都是一樣的。


至此,六月份的智能風(fēng)扇中的溫度傳感器模塊的已經(jīng)實現(xiàn)了哈。


推薦閱讀:
STM32單片機最小系統(tǒng)詳解
STM32F103 串口的使用方法
STM32中精確延時函數(shù)的實現(xiàn)
DHT11及DHT21溫濕度傳感器時序圖解析(STM32)
基于STM32固件庫的MDK5工程建立
修改Keil工程名稱并添加其他模塊文件
基于單片機的智能風(fēng)扇的功能點及所需要的功能模塊【2020.06每月活動】

資料下載

微信公眾號后臺回復(fù)“溫度傳感器”,可以下載工程源碼及DS18B20的手冊。



免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉