版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、DS18B20 一、 DS18B20 的形狀及其與單片機(jī)的連接圖a b 圖 1 DS18B20 是 Dallas 公司生產(chǎn)的 1-Wire 接口數(shù)字溫度傳感器,其形狀如圖 1a所示,有三個(gè)引腳,分別為:電源地 1GND; 數(shù)字信號(hào)輸入 /輸出端 2DQ ;外接供電電源輸入端 3(VDD ,在寄生電源接線方式時(shí)接地);它是一種單總線數(shù)字溫度傳感器,全部的數(shù)據(jù)交換和掌握都通過這根數(shù)據(jù)線來完成;測(cè)試溫度范疇-55-125,溫度數(shù)據(jù)位可配置為9、10、11、 12 位,對(duì)應(yīng)的刻度值分別為0.5、 0.25、 0.125、 0.0625,對(duì)應(yīng)的最長轉(zhuǎn)換時(shí)間分別為 93.75ms、187.5ms、375m
2、s、750ms;出廠默認(rèn)配置為 12 位數(shù)據(jù), 刻度值為 0.0625,最長轉(zhuǎn)換時(shí)間為 750ms;從以上數(shù)據(jù)可以看出,DS18B20 數(shù)據(jù)位越低、轉(zhuǎn)換時(shí)間越短、反應(yīng)越快、精度越低;單總線沒有時(shí)鐘線,只有一根通信線,其讀寫數(shù)據(jù)是靠掌握起始時(shí)間和采樣時(shí)間來完成,所以時(shí)序要求很嚴(yán)格;圖1a為 DS18B20 與單片機(jī)的連接電路圖,它的數(shù)據(jù)線通常要求外接一個(gè)4.7K-10K的上拉電阻 該電阻畫原理圖時(shí)靠近單片機(jī)畫故沒有顯示出來 ,故其閑置時(shí)狀態(tài)位高電平;提示: DS18B20 形狀酷似三極管,辨論引腳時(shí),面對(duì)著扁平的那一面,左負(fù)右正,一 旦接反就會(huì)馬上發(fā)熱,甚至有可能燒毀;二、 DS18B20 儲(chǔ)備
3、器結(jié)構(gòu)DS18B20 的內(nèi)部有 64 位的 ROM 單元,和 9 字節(jié)的暫存器單元;1、64 位(激)光刻只讀儲(chǔ)備器每只 DS18B20 都有一個(gè)唯獨(dú)儲(chǔ)備在ROM 中的 64 位編碼 跟人的身份證號(hào)類似,一人一個(gè)身份證號(hào) ,這是出廠時(shí)被光刻好的;最前面 8 位是單線系列編碼:28h;接著的 48 位是一個(gè)唯獨(dú)的序列號(hào);最終 8 位是以上 56 位的 CRC 編碼; 64-位的光刻 ROM 又包括 5 個(gè)ROM 的功能命令:讀 ROM ,匹配 ROM ,跳動(dòng) ROM ,查找 ROM 和報(bào)警查找; ROM 的作用是使每個(gè) DS18B20 各不相同, 這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè) DS18B20
4、 以實(shí)現(xiàn)多點(diǎn)監(jiān)測(cè);2、9 字節(jié)的暫存器單元表 1 1 DS18B20 的暫存器單元如表 1)、溫度傳感器1 所示,各部分介紹如下;圖 2 暫存器的第 0LSB 字節(jié),第 1MSB 字節(jié)為 DS18B20 的溫度傳感器,它們負(fù)責(zé)儲(chǔ)存對(duì)溫度的測(cè)量結(jié)果,用 16 位二進(jìn)制供應(yīng),格式如圖 2 所示; DS18B20 讀取溫度時(shí)共讀取 16位,前 5 個(gè)位 MSB 的高 5 位為符號(hào)位, 當(dāng)前 5 位為 1 時(shí),讀取的溫度為負(fù)數(shù);當(dāng)前 5 位為0 時(shí),讀取的溫度為正;溫度為正時(shí)讀取方法為:將 16 進(jìn)制數(shù)轉(zhuǎn)換成 10 進(jìn)制即可;溫度為負(fù)時(shí)讀取方法為 實(shí)際就是取補(bǔ)碼 :將 16 進(jìn)制取反后加 1,再轉(zhuǎn)換成
5、 10 進(jìn)制;例: 0550H = +85 度, FC90H = -55 度, 0191H 為 25.0625 度; LSB 的低四位用于表示測(cè)量值中小數(shù)點(diǎn)后的數(shù)值;2)、非揮發(fā)的溫度報(bào)警觸發(fā)器 TH 和 TL 位于第 2 和第 3 字節(jié),用于寫入溫度報(bào)警值,實(shí)際上就是設(shè)定溫度的最高和最低界限;3)、配置寄存器配置寄存器位于儲(chǔ)備器的第 4 字節(jié),其組織如圖 3 所示;配置寄存器的 04 位和 7 位被器件保留,禁止寫入;在讀回?cái)?shù)據(jù)時(shí)全部為規(guī)律 1;R1 和 R0 用于設(shè)置 DS18B20 的精度,詳細(xì)如表 2 所示;圖 3 表 2 2 4)、 CRC 發(fā)生器CRC 字節(jié)作為 DS18B2064
6、 位 ROM 的一部分儲(chǔ)備在儲(chǔ)備器中;CRC 碼由 ROM 的前 56位運(yùn)算得到, 被包含在 ROM 的重要字節(jié)當(dāng)中;CRC 由儲(chǔ)備在儲(chǔ)備器中的數(shù)據(jù)運(yùn)算得到,因此當(dāng)儲(chǔ)備器中的數(shù)據(jù)發(fā)生轉(zhuǎn)變時(shí),CRC 的值也隨之轉(zhuǎn)變;CRC 能夠在總線掌握器讀取DS18B20 時(shí)進(jìn)行數(shù)據(jù)校驗(yàn);為校驗(yàn)數(shù)據(jù)是否被正確讀取,總線掌握器必需用接受到的數(shù)據(jù)運(yùn)算出一個(gè)CRC 值,和儲(chǔ)備在DS18B20 的 64 位 ROM 中的值(讀 ROM 時(shí))或 DS18B20 內(nèi)部運(yùn)算出的8 位 CRC 值(讀儲(chǔ)備器時(shí))進(jìn)行比較;假如運(yùn)算得到的 CRC 值和讀取出來的 CRC 值相吻合,數(shù)據(jù)被無錯(cuò)傳輸;CRC 值的比較以及是否進(jìn)行下一
7、步操作完全由總線掌握器打算;當(dāng)在 DS18B20 中儲(chǔ)備的或由其運(yùn)算到 CRC 值和總線掌握器運(yùn)算的值不相符時(shí),CRC 的運(yùn)算等式如下:DS18B20 內(nèi)部并沒有一個(gè)能阻擋命令序列進(jìn)行的電路;CRC = X8 + X5 + X4 + 1 單總線 CRC 可以由一個(gè)由移位寄存器和XOR 門構(gòu)成的多項(xiàng)式發(fā)生器來產(chǎn)生;這個(gè)回路包括一個(gè)移位寄存器和幾個(gè) XOR 門,移位寄存器的各位都被初始化為 0;從 ROM 中的最低有效位或暫存器中的位 0 開頭,一次一位移入寄存器;在傳輸了 56 位 ROM 中的數(shù)據(jù)或移入了暫存器的位 7 后,移位寄存器中就儲(chǔ)備了 CRC 值;下一步, CRC 的值必需被循環(huán)移入
8、;此時(shí),假如運(yùn)算得到的 CRC 是正確的,移位寄存器將復(fù) 0;其他字節(jié)保留用,不需要看;三、關(guān)于單總線系統(tǒng)單總線系統(tǒng)包括一個(gè)總線掌握器和一個(gè)或多個(gè)從機(jī);DS18B20 總是充當(dāng)從機(jī);當(dāng)只有一只從機(jī)掛在總線上時(shí),系統(tǒng)被稱為“ 單點(diǎn)” 系統(tǒng);假如由多只從機(jī)掛在總線上,系統(tǒng)被稱為“ 多點(diǎn)” ; 全部的數(shù)據(jù)和指令的傳遞都是從最低有效位開頭通過單總線;單總線需要一個(gè)約 5K 的外部上拉電阻;單總線的閑暇狀態(tài)是高電平;無論任何理由需要暫停某一執(zhí)行過程時(shí), 假如仍想復(fù)原執(zhí)行的話,總線必需停留在閑暇狀態(tài);在復(fù)原期間,假如單總線處于非活動(dòng)(高電平) 狀態(tài), 位與位間的復(fù)原時(shí)間可以無限長;假如總線停留在低電平超過
9、 480us,總線上的全部器件都將被復(fù)位;四、操作流程1.DS18B20 復(fù)位;2.執(zhí)行 ROM 指令;就是拜訪,搜尋,匹配每個(gè)DS18B20 獨(dú)有的 64 位序列號(hào);試驗(yàn)板上只連有一個(gè) DS18B20 ,故不需識(shí)別,也就是不需讀出此序列號(hào),寫代碼時(shí)直接寫命令 0 xcc 跳過;3.執(zhí)行 DS18B20 功能指令( RAM 指令,就是讀寫暫存器指令);DS18B20 的功能指令許多,比較常用的有兩個(gè):0 x44:開頭轉(zhuǎn)換溫度;轉(zhuǎn)換好的溫度會(huì)儲(chǔ)存到暫存器字節(jié) 0 和 1;0 xBE:讀暫存指令;讀暫存指令,會(huì)從暫存器 的話,必需寫下 DS18B20 復(fù)位;0 到 9,一個(gè)一個(gè)字節(jié)讀取,假如要停止
10、ROM 指令和 RAM 指令的詳細(xì)情形見表 3;表 3 3 五、讀寫 DS18B20 的時(shí)序1、DS18B20 的復(fù)位時(shí)序: 1.單片機(jī)拉低總線 480us960us,然后釋放總線(拉高電平);2).這時(shí) DS18B20 會(huì)拉低信號(hào),大約 60240us 表示應(yīng)答; 3).DS18B20 拉低電平的 60240us之間,單片機(jī)讀取總線的電平,假如是低電平,那么表示復(fù)位勝利;4).DS18B20 拉低電平60240us 之后,會(huì)釋放總線;/* 復(fù)位:主機(jī) t0 時(shí)刻發(fā)送一復(fù)位脈沖 最短為 480us 的低電平信號(hào) ,接著在 t1 時(shí)刻釋放總線 拉高總線電平 進(jìn)入接收狀態(tài);DS18B20 在檢測(cè)到
11、總線的上升沿之后等待 1560us;接著DS18B20 在 t2 時(shí)刻發(fā)出存在脈沖連續(xù) 60240us 的低電平 * */ void DS18B20_Reset DQ=1; _nop_; DQ=0; /拉低總線 delay2us280; / 連續(xù) 280*2+5=565s 4 DQ=1; /釋放總線whileDQ; /等待應(yīng)答 電平拉低 while.DQ; /應(yīng)答電平大約連續(xù) 60240us 后重新拉高總線 2、讀時(shí)序: 1.在讀取的時(shí)候單片機(jī)拉低電平大約1us;2.單片機(jī)釋放總線,然后讀取總線電平;3.這時(shí)候 DS18B20 會(huì)拉低電平 0或拉高電平 1;4).讀取電平過后, 推遲大約 40
12、45us;/* 讀字節(jié) :主機(jī)總線 t0 時(shí)刻從高拉至低電平常,總線只須保持低電平 l .7us;之后在 t1 時(shí)刻將總線拉高產(chǎn)生讀時(shí)間隙,讀時(shí)間隙在t1 時(shí)刻后 t2 時(shí)刻前有效;t2 距 t0 為 15us,也就是說t2 時(shí)刻前主機(jī)必需完成讀位,并在t0 后的 60us-120us 內(nèi)釋放總線 .留意讀的時(shí)候從最低位向最高位讀;*/ uchar DS18B20_Read_Byte uchar i,temp=0; fori=0;i1; DQ=0; /主機(jī)將總線拉至低電平,只需保持 1.7us _nop_; / 保持一個(gè)時(shí)鐘周期,也即 1us DQ=1; delay2us1;/延時(shí) 7us,一
13、般讀數(shù)在后半段讀 ifDQ temp=temp|0 x80; delay2us2; / 這里延時(shí) 45us+前面 7us+1us=53us,接近 60us return temp; 3、寫時(shí)序: 1.單片機(jī)拉低電平大約1015us;2.單片機(jī)連續(xù)拉低電平0或拉高電平 1大約2045us 的時(shí)間; 3.釋放總線;/* 寫字節(jié):當(dāng)主機(jī)總線t0 時(shí)刻從高拉至低電平常就產(chǎn)生寫時(shí)間隙;從to 時(shí)刻開頭5 15us 之內(nèi)應(yīng)將所需寫的位送到總線上,在隨后15-60us 間 DS18B20 對(duì)總線采樣如低電平寫入的位是0;如高電平寫入的位是1,連續(xù)寫 2 位間的間隙應(yīng)大于1us;留意:無論讀寫都是從最低位開頭
14、;*/ void DS18B20_Write_Byteuchar dat uchar i; fori=0;i1; 4、讀取溫度流程 /* 讀溫度 :流程:復(fù)位 -寫命令 跳過讀序列號(hào),單個(gè)DS18B20 時(shí)用 -啟動(dòng)溫度轉(zhuǎn)換-等待轉(zhuǎn)換完成 完成總線會(huì)跳回高電平 -復(fù)位 -寫命令 跳過 ROM 編碼命令 - 讀取暫存寄存器字節(jié)命令-讀低字節(jié) -讀高字節(jié) -復(fù)位 -合并高低字節(jié) -判定正負(fù)*/ DS18B20_Read_Temperature uchar temp_low,temp_high; DS18B20_Reset; DS18B20_Write_Byte0 xcc; DS18B20_Writ
15、e_Byte0 x44; while.DQ; /等待轉(zhuǎn)換完成 DS18B20_Reset; DS18B20_Write_Byte0 xcc; DS18B20_Write_Byte0 xbe; temp_low=DS18B20_Read_Byte; temp_high=DS18B20_Read_Byte; DS18B20_Reset; tvalue=temp_high; tvalue=tvalue8|temp_low; iftvalue0 x0fff tflag=0; else 6 tvalue=tvalue+1; /由于最高位的前五位是 碼要取反加一得到二進(jìn)制數(shù))tflag=1; 1,所以寄存
16、器存的是溫度的補(bǔ)碼(補(bǔ)tvalue=tvalue*0.625;/ 溫度值擴(kuò)大10 倍,精確到1 位小數(shù)returntvalue; 例子: DS18B20+1602 #include #include #include #define uchar unsigned char #define uint unsigned int sbit DQ=P23;/ds18b20 與單片機(jī)連接口 sbit RS=P26; sbit RW=P27; sbit E=P25; unsigned char code str1=temperature: ; unsigned char code str2= ; ucha
17、r data disdata5; uint tvalue;/ 溫度值 uchar tflag;/ 溫度正負(fù)標(biāo)志/*lcd1602 /聲明調(diào)用函數(shù)程序 */ void Lcd_W_Cmduchar com; void Lcd_W_Datuchar dat; uchar Lcd_R_Busy; void Lcd_Init; void delayuchar t; void delay_4_nop; /* 延時(shí) */ #define delay_4_nop _nop_;_nop_;_nop_;_nop_; void delayuchar t uchar i, j; fori=0; it; i+ for
18、j=0; j50; j+; void Lcd_Init uchar i; Lcd_W_Cmd0 x3c; 7 Lcd_W_Cmd0 x0e; Lcd_W_Cmd0 x01; Lcd_W_Cmd0 x06; Lcd_W_Cmd0 x80; fori=0;istrlenstr1;i+ Lcd_W_Datstr1i; Lcd_W_Cmd0 xC0; fori=0;istrlenstr2;i+ Lcd_W_Datstr2i; uchar Lcd_R_Busy uchar s; RW=1; delay_4_nop; RS=0; delay_4_nop; E=1; delay_4_nop; s=P0; d
19、elay_4_nop; E=0; returns; void Lcd_W_Cmduchar com uchar i; do i=Lcd_R_Busy; i=i&0 x80; delay2; whilei.=0; RW=0; delay_4_nop; RS=0; delay_4_nop; 8 E=1; delay_4_nop; P0=com; delay_4_nop; E=0; void Lcd_W_Datuchar dat uchar i; do i=Lcd_R_Busy; i=i&0 x80; delay2; whilei.=0; RW=0; delay_4_nop; RS=1; delay
20、_4_nop; E=1; delay_4_nop; P0=dat; delay_4_nop; E=0; /*ds1820程序*/ void delay2usunsigned int i/ 延時(shí) 1 微秒 while-i; /* * 牛人實(shí)測(cè),本人沒有做過試驗(yàn);針對(duì)的是 12Mhz 的晶振delay0:延時(shí) 518us 誤差 :518-2*256=6 delay1:延時(shí) 7us (原帖寫 5us是錯(cuò)的)delay10: 延時(shí) 25us 誤差 :25-20=5 delay20: 延時(shí) 45us 誤差 :45-40=5 delay100: 延時(shí) 205us 誤差 :205-200=5 delay20
21、0: 延時(shí) 405us 誤差 :405-400=5 * */ /*9 * 復(fù)位:主機(jī) t0 時(shí)刻發(fā)送一復(fù)位脈沖 最短為 480us 的低電平信號(hào) ,接著在 t1 時(shí)刻釋放總線 拉高總線電平 進(jìn)入接收狀態(tài);DS18B20 在檢測(cè)到總線的上升沿之后等待 1560us;接著DS18B20 在 t2 時(shí)刻發(fā)出存在脈沖 連續(xù) 60240us 的低電平 */ void DS18B20_Reset DQ=1; _nop_; DQ=0; /拉低總線delay2us280; / 連續(xù) 280*2+5=565s DQ=1; /釋放總線whileDQ; /等待應(yīng)答 電平拉低 while.DQ; /應(yīng)答電平大約連續(xù)
22、60240us 后重新拉高總線 /* 讀字節(jié) :主機(jī)總線 t0 時(shí)刻從高拉至低電平常,總線只須保持低電平 l .7us;之后在 t1 時(shí)刻將總線拉高產(chǎn)生讀時(shí)間隙,讀時(shí)間隙在t1 時(shí)刻后 t2 時(shí)刻前有效;t2 距 t0 為 15us,也就是說t2 時(shí)刻前主機(jī)必需完成讀位,并在t0 后的 60us-120us 內(nèi)釋放總線 .留意讀的時(shí)候從最低位向最高位讀;*/ uchar DS18B20_Read_Byte uchar i,temp=0; fori=0;i1; DQ=0; /主機(jī)將總線拉至低電平,只需保持 1.7us _nop_; / 保持一個(gè)時(shí)鐘周期,也即 1us DQ=1; delay2us
23、1;/延時(shí) 7us,一般讀數(shù)在后半段讀 ifDQ temp=temp|0 x80; delay2us2; / 這里延時(shí) 45us+前面 7us+1us=53us,接近 60us return temp; /* 寫字節(jié):當(dāng)主機(jī)總線t0 時(shí)刻從高拉至低電平常就產(chǎn)生寫時(shí)間隙;從to 時(shí)刻開頭15us 之內(nèi)應(yīng)將所需寫的位送到總線上,在隨后15-60us 間 DS18B20 對(duì)總線采樣如低電平寫入的位是0;如高電平寫入的位是1,連續(xù)寫 2 位間的間隙應(yīng)大于1us;10 留意:無論讀寫都是從最低位開頭;*/ void DS18B20_Write_Byteuchar dat uchar i; fori=0;
24、i1; /* 讀溫度 :流程:復(fù)位 -寫命令 跳過讀序列號(hào),單個(gè)DS18B20 時(shí)用 -啟動(dòng)溫度轉(zhuǎn)換-等待轉(zhuǎn)換完成 完成總線會(huì)跳回高電平 -復(fù)位 -寫命令 跳過 ROM 編碼命令 - 讀取暫存寄存器字節(jié)命令-讀低字節(jié) -讀高字節(jié) -復(fù)位 -合并高低字節(jié) -判定 正負(fù)*/ DS18B20_Read_Temperature uchar temp_low,temp_high; DS18B20_Reset; DS18B20_Write_Byte0 xcc; DS18B20_Write_Byte0 x44; while.DQ; /等待轉(zhuǎn)換完成 DS18B20_Reset; DS18B20_Write_Byte0 xcc; DS18B20_Write_Byte0 xbe; temp_low=DS18B20_Read_Byte; temp_high=DS18B20_Read_Byte; DS18B20_Reset; tvalu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國礦產(chǎn)資源勘查行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 新形勢(shì)下塑膠玩具行業(yè)轉(zhuǎn)型升級(jí)戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國電視劇行業(yè)營銷創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國金屬注射成型行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實(shí)施研究報(bào)告
- 自動(dòng)噴水滅火系統(tǒng)試壓記錄表
- 比較法在圖書館學(xué)研究中的應(yīng)用
- 真絲睡衣體驗(yàn)調(diào)查
- 生活防火知識(shí)培訓(xùn)課件
- 2024-2030年中國自動(dòng)血液分析儀行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資潛力預(yù)測(cè)報(bào)告
- 2023-2029年中國愛情服務(wù)行業(yè)市場(chǎng)運(yùn)行態(tài)勢(shì)及投資戰(zhàn)略規(guī)劃報(bào)告
- 藝術(shù)漆培訓(xùn)課件
- 建德海螺二期施工組織設(shè)計(jì)
- 山東省菏澤市2023-2024學(xué)年高一上學(xué)期期末測(cè)試物理試題(解析版)
- 2024年學(xué)校后勤日用品采購合同范本2篇
- 中建中建機(jī)電工程聯(lián)動(dòng)調(diào)試實(shí)施方案范本
- 新《安全生產(chǎn)法》安全培訓(xùn)
- 山東省濟(jì)南市2023-2024學(xué)年高一上學(xué)期1月期末考試 物理 含答案
- 中華人民共和國安全生產(chǎn)法知識(shí)培訓(xùn)
- 物業(yè)品質(zhì)提升方案課件
- 《ROHS知識(shí)培訓(xùn)》課件
- 服裝行業(yè)倉庫管理流程
評(píng)論
0/150
提交評(píng)論