ds18b20詳解及程序_第1頁
ds18b20詳解及程序_第2頁
ds18b20詳解及程序_第3頁
ds18b20詳解及程序_第4頁
ds18b20詳解及程序_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、最近都在學(xué)習(xí)和寫單片機(jī)的程序,今天有空又模仿寫了一個(gè)與DS18B20 基于單總線通信的程序DS18B20 數(shù)字溫度傳感器(參考:是DALLAS 公司生產(chǎn)的1 Wire,即單總線器件,具 有線路簡單,體積小的特點(diǎn)。因此用它來組成一個(gè)測溫系統(tǒng), 具有線路簡單,在一根通信線, 可以掛很多這樣的數(shù)字溫度計(jì)。 DS18B20 產(chǎn)品的特點(diǎn):(1 )、只要求一個(gè)I/O 口即可實(shí)現(xiàn)通信。(2 )、在DS18B20 中的每個(gè)器件上都有獨(dú)一無二的序列號。(3 )、實(shí)際應(yīng)用中不需要外部任何元器件即可實(shí)現(xiàn)測溫。(4 )、測量溫度范圍在 55到+ 125 C之間;在-10 +85C范圍內(nèi)誤差為 ±5 C;(5

2、 )、數(shù)字溫度計(jì)的分辨率用戶可以從9位到12位選擇。將12位的溫度值轉(zhuǎn)換為數(shù)字量所需時(shí)間不超過 750ms;(6)、內(nèi)部有溫度上、下限告警設(shè)置。DS18B20 引腳分布圖MC T*JNC T(D NCVT>D COH NCLMJ mH GNDDS18B20 詳細(xì)引腳功能描述:1、GND地信號;2、DQ數(shù)據(jù)輸入出引腳。開漏單總線接口引腳。當(dāng)被用在寄生電源下,此引腳可以向器件 提供電源;漏極開路,常太下高電平通常要求外接一個(gè)約 5k Q的上拉電阻.3、 VDD可選擇的VDD引腳。電壓范圍:3;當(dāng)工作于寄生電源時(shí),此引腳必須接地。DS18B20 存儲器結(jié)構(gòu)圖叩何結(jié)黑曹存RAM主節(jié)0仲期災(zāi)性也叮

3、擦險(xiǎn)RAM1TH/罔F*低冃字巧丨2mi-iPttw字節(jié)【配賈字書4配賣字節(jié)很剤音節(jié)56泯奇宇節(jié)7 rX暫存儲器的頭兩個(gè)字節(jié)為測得溫度信息的低位和高位字節(jié);第3, 4字節(jié)是TH和TL的易失性拷貝,在每次電復(fù)位時(shí)都會被刷新第5字節(jié)是配置寄存器的易失性拷貝,同樣在電復(fù)位時(shí)被刷新;第9字節(jié)是前面8個(gè)字節(jié)的CRC檢驗(yàn)值.配置寄存器的命令內(nèi)容如下0R1R011111MSB LSBR0和R1是溫度值分辨率位,按下表進(jìn)行配置默認(rèn)出廠設(shè)置是 R1R0 = 11, 即12位.溫度值分辨率配置表R1R0分辨率最大轉(zhuǎn)換時(shí)間(ms)009bit(tco nv/8)0110bit(tco nv/4)1011bit375

4、(tc on v/2)1112bit750 (tco nv)4種分辨率對應(yīng)的溫度分辨率為0.5 C , 0.25 C , 0.125 C , 0.0625 C (即最低一位代表的溫度值)12位分辨率時(shí)的兩個(gè)溫度字節(jié)的具體格式如下:低字節(jié):2A32A22A12A02A-12A-22A-32A-4高字節(jié):SSSSS2A62人52人4其中高字節(jié)前5位都是符號位S,若分辨率低于12位時(shí),相應(yīng)地使最低為0,如:當(dāng)分辨 率為10位時(shí),低字節(jié)為:2人32A22A12A02A-12A-200高字節(jié)不變一些溫度與轉(zhuǎn)換后輸出的數(shù)字參照如下溫度數(shù)字輸出換成16進(jìn)制+ 125 C07D0H+85 C000001010

5、10100000550H+25.0625 C0191H+10.125 C0000000000A2H+0.5 C00000000000010000008H0 C00000000000000000000H-0.5 CFFF8H-10.125 CFFE5H-25.0625 CFF6FH-55 CFC90H由上表可看出,當(dāng)輸出是負(fù)溫度時(shí),使用補(bǔ)碼表示,方便計(jì)算機(jī)運(yùn)算(若是用C語言,直接 將結(jié)果賦值給一個(gè)int變量即可).DS18B20 的使用方法:由于DS18B20采用的是方式,即在一根數(shù)據(jù)線實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,而對單片機(jī)來說,我們必須采用軟件的方法來模擬單總線的協(xié)議時(shí)序來完成對DS18B20 芯片的

6、訪問。由于DS18B20 是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位 有著嚴(yán)格的時(shí)序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時(shí)序:初始化時(shí)序(dslnit()實(shí)現(xiàn))、讀時(shí)序(readByte() 、寫時(shí)序(writeByte() 。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動啟動寫時(shí)序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。DS18B20 與單片機(jī)連接電路圖VCCDBJDBSISFKS 15K?T ?35S52(P10J

7、POO! P11JTPO1P12剛P13P03P14P04PBP05P16P06P17PO?IHT1P20INTOP21P22T1P23TOP24P25EA/VPP2fiP27KIREfETREDTKP! RDALE/PPSEH疝2XI P藍(lán)1818F20ALEDSLSE20I7>11''I18:iiH利用軟件模擬 DS18B20的單線協(xié)議和命令:主機(jī)操作DS18B20必須遵循下面的順序1. 初始化單線總線上的所有操作都是從初始化開始的過程如下:1) 請求:主機(jī)通過拉低單線480us 以上,產(chǎn)生復(fù)位脈沖,然后釋放該線,進(jìn)入Rx接收模 式.主機(jī)釋放總線時(shí),會產(chǎn)生一個(gè)上升沿脈

8、沖DQ : 1 -> 0(480us+) -> 12) 響應(yīng):DS18B20檢測到該上升沿后,延時(shí)1560us,通過拉低總線60240us 來產(chǎn)生應(yīng)答脈沖DQ: 1(1560us) -> 0(60240us)3) 接收響應(yīng):主機(jī)接收到從機(jī)的應(yīng)答脈沖后,說明有單線器件在線至此,初始化完成DQ: 02. ROM操作命令當(dāng)主機(jī)檢測到應(yīng)答脈沖,便可發(fā)起ROM操作命令.共有5類ROM操作命令,如下表命令類型命令字節(jié)功能Read Rom 讀ROM33H讀取激光ROM中的64位,只能用于總線上單個(gè) DS18B20 器件情況,多掛時(shí)會發(fā)生數(shù) 沖突Match Rom 匹 配ROM55H此命令后

9、跟64位ROM序列號,尋址多掛總線上的對應(yīng) DS18B20.只有序列號完全匹配 的DS18B20才能響應(yīng)后面的內(nèi)存操作命令,其他不匹配的將等待復(fù)位脈沖可用于單掛多掛兩種情況Skip Rom 跳 過ROMCCH可無須提供64位ROM序列號即可運(yùn)行內(nèi)存操作命令 ,只能用于單掛Search Rom 搜索ROMF0H通過一個(gè)排除法過程,識別出總線上所有器件的 ROM序列號Alarm Search告警搜索ECH命令流程與Search Rom 相冋,但DS18B20 只有最近的一次溫度測量時(shí)滿足了告警 發(fā)條件的,才會響應(yīng)此命令3. 內(nèi)存操作命令在成功執(zhí)行ROM操作命令后,才可使用內(nèi)存操作命令.共有6種內(nèi)存

10、操作命令命令類型命令字節(jié)功能WriteScratchpad寫暫存器4EH寫暫存器中地址2地址4的3個(gè)字節(jié)(TH,TL和配置寄存器)在發(fā)起復(fù)位脈沖之前,3 字節(jié)都必須要寫ReadScratchpad讀暫存器BEH讀取暫存器內(nèi)容,從字節(jié)0 直到字節(jié)8,共9個(gè)字節(jié),主機(jī)可隨時(shí)發(fā)起復(fù)位脈沖,停 此操作,通常我們只需讀前 5個(gè)字節(jié)CopyScratchpad復(fù)制暫存器48H將暫存器中的內(nèi)容復(fù)制進(jìn) EERAM,以便將溫度告警觸發(fā)字節(jié)存入非易失內(nèi)存 如果此 命令后主機(jī)產(chǎn)生讀時(shí)隙,那么只要器件還在進(jìn)行復(fù)制都會輸出 0,復(fù)制完成后輸出1Co nvert T ?溫度轉(zhuǎn)換44H開始溫度轉(zhuǎn)換操作若在此命令后主機(jī)產(chǎn)生時(shí)

11、隙,那么只要器件還在進(jìn)行溫度轉(zhuǎn)換就 輸出0,轉(zhuǎn)換完成后輸出1.Recall E2重調(diào)E2暫存器B8H將存儲在EERAM中的溫度告警觸發(fā)值和配置寄存器值重新拷貝到暫存器中,此操作在DS18B20 加電時(shí)自動產(chǎn)生Read PowerB4H主機(jī)發(fā)起此命令后每個(gè)讀數(shù)時(shí)隙內(nèi)QS18B20 會發(fā)信號通知它的供電方式:0寄生電源Supply1外部供電讀供電方式4. 數(shù)據(jù)處理DS18B20 要求有嚴(yán)格的時(shí)序來保證數(shù)據(jù)的完整性.在單線DQ上,有復(fù)位脈沖,應(yīng)答脈沖,寫0,寫1,讀0,讀1這6種信號類型.除了應(yīng)答脈沖外,其它都由主機(jī)產(chǎn)生數(shù)據(jù)位的 讀和寫是通過讀、寫時(shí)隙實(shí)現(xiàn)的1)寫時(shí)隙:當(dāng)主機(jī)將數(shù)據(jù)線從高電平拉至低電

12、平時(shí),產(chǎn)生寫時(shí)隙所有寫時(shí)隙都必須在60us以上,各寫時(shí)隙間必須保證 1us的恢復(fù)時(shí)間寫"1":主機(jī)將數(shù)據(jù)線 DQ先拉低,然后釋放15us后,將數(shù)據(jù)線DQ拉高;寫"0": 主機(jī)將DQ拉低并至少保持 60us以上 2)讀時(shí)隙:當(dāng)主機(jī)將數(shù)據(jù)線 DQ從高電平拉至低電平時(shí),產(chǎn)生讀時(shí)隙所有讀時(shí)隙最短必 須持續(xù)60us,各讀時(shí)隙間必須保證 1us的恢復(fù)時(shí)間讀:主機(jī)將DQ拉低至少1us,.此時(shí)主機(jī)馬上將 DQ拉高,然后就可以延時(shí)15us后,讀取 DQ即可源代碼:(測量范圍:0 99度)國日 DS18B201 #in clude<>delay(unsigned

13、 char i)2 3f4f 7f6f7c 日田 L 14 void 15日叫16 unsigned char j,k;17 for (j=i;j>0;j-)18申電卜1- 曰田19 for (k=125;k>0;k-);I 1-曰田1II| |艸| | |艸| | | |卜怕町| |卜卜L日曰| | |1-曰田2223 SSlIII IIIHL 日田 I IlllLsslllllIIImin iil曰田ill i尿i ii曰酊艸iiii艸11 iiii11申I I I論I II I I弭I卜卜L扣卜I艸1卜1丨1丨丨丨III19 二土20此川 DS18D20:EJSSkip Ri

14、imiilr >Convert 1 i-tr 絞1 Ils.箱待iE度幃摸富城購壇如$1睡!卵二土 L HEE L 18 void delay(unsignedint i)unsigned int j; while (i-)22 2123for (j=0;j<125;j+);24 r L25 發(fā)足Kcdbrrii欣傅l,ri- :y±102627 / 初始化 DS18B2028 /讓DS18B20 一段相對長時(shí)間低電平,然后一段相對非常短時(shí)間高電平,即可啟動29 void30 31 /對于時(shí)鐘,unsignedint 型的i,作一個(gè)i+操作的時(shí)間大于為 8us32 I u

15、nsigned int i; ?33 ds=0;34 i=100; /拉低約800us,符合協(xié)議要求的480us以上35 while (i>O)i-;36 ds=1; /產(chǎn)生一個(gè)上升沿,進(jìn)入等待應(yīng)答狀態(tài)37 i=4;38 while (i>0)i-;39 40 41 void dsWait() 42二斗43 unsigned int i;44 I while (ds);?45 while (ds);/檢測到應(yīng)答脈沖i=4;4646 while (i>0)i-;47 4950 /向DS18B20 讀取一位數(shù)據(jù)51 /讀一位,讓DS18B20 一小周期低電平,然后兩小周期高電平,

16、?52 /之后DS18B20 則會輸岀持續(xù)一段時(shí)間的一位數(shù)據(jù)53 bitreadBit()54 55 unsigned int i;56 bitb;57 ds=0;58 i+; /延時(shí)約8us,符合協(xié)議要求至少保持1us59 ds=1;?60 i+;i+;/延時(shí)約16us,符合協(xié)議要求的至少延時(shí)15us以上61 b=ds;62 i=8; ?63 while (i>0)i-;/延時(shí)約64us,符合讀時(shí)隙不低于60us要求64 I return b;L65 6666 /讀取一字節(jié)數(shù)據(jù),通過調(diào)用readBit()來實(shí)現(xiàn)67 unsignedcharreadByte()68 69 unsigne

17、dint i;70 unsignedcharj,dat;71 dat=0;72 I for (i=0;i<8;i+)73 74 j=readBit();75 /最先讀岀的是最低位數(shù)據(jù)76 dat=a«7)|(dat>>1);77 78 return dat;79 8182 /向DS18B20 寫入一字節(jié)數(shù)據(jù)83 void writeByte(unsignedchar dat)84 85 | unsigned int i;86 unsigned char j;87 bitb;88 for (j=0;j<8;j+)89 90 b=dat&0x01;91 d

18、at>>=1;92 /寫"1",將DQ拉低15us后,在15us60us 內(nèi)將DQ拉高,即完成寫193 if(b) ?94 95 ds=0;96 i+;i+;/拉低約16us,符號要求1560us 內(nèi)97 ds=1;?98 i=8; while (i>0)i-;/延時(shí)約64us,符合寫時(shí)隙不低于60us要求99 1100 else / 寫"0",將 DQ 拉低 60us120us101 102 ds=0;103 i=8; while (i>0)i-;/ 拉低約 64us,符號要求104 ds=1;105 i+;i+;/整個(gè)寫0時(shí)隙

19、過程已經(jīng)超過60us,這里就不用像寫1那樣,再延時(shí)64us 了106 107 IL108 109109 /向DS18B20發(fā)送溫度轉(zhuǎn)換命令110 void sendChangeCmd()111 112 dsInit();/初始化DS18B20,無論什么命令,首先都要發(fā)起初始化113 dsWait(); / 等待 DS18B20 應(yīng)答114 delay(1); /延時(shí)1ms,因?yàn)镈S18B20 會拉低 DQ60240us作為應(yīng)答信號115 writeByte(Oxcc); /寫入跳過序列號命令字SkipRom116 I writeByte(0x44); / 寫入溫度轉(zhuǎn)換命令字ConvertT11

20、7 119118 /向DS18B20發(fā)送讀取數(shù)據(jù)命令119 void sendReadCmd()120 121 dsI ni t();122 dsWait();123 delay(1);124 writeByte(Oxcc); /寫入跳過序列號命令字SkipRom125 writeByte(Oxbe); / 寫入讀取數(shù)據(jù)令字ReadScratchpad126 129127 /獲取當(dāng)前溫度值128 int getTmpValue()129 130 unsigned int tmpvalue;131 int value; /存放溫度數(shù)值132 float t;133 unsigned char l

21、ow,high;134 sen dReadCmd();135 /連續(xù)讀取兩個(gè)字節(jié)數(shù)據(jù)136 I low=readByte(); ?137 high=readByte();138 /將高低兩個(gè)字節(jié)合成一個(gè)整形變量139 /計(jì)算機(jī)中對于負(fù)數(shù)是利用補(bǔ)碼來表示的140 /若是負(fù)值,讀取岀來的數(shù)值是用補(bǔ)碼表示的,可直接賦值給int型的value141 tmpvalue=high;142 tmpvalue<<=8;143 tmpvalue|=low;144 value=tmpvalue;145 ?146 I/使用DS18B20的默認(rèn)分辨率12位,精確度為度,即讀回?cái)?shù)據(jù)的最低位代表度147 t=

22、value*;148 /將它放大100倍,使顯示時(shí)可顯示小數(shù)點(diǎn)后兩位,并對小數(shù)點(diǎn)后第三進(jìn)行4舍5入149 /如t=,進(jìn)行計(jì)數(shù)后,得到value=1106, 即度150 /如t=,進(jìn)行計(jì)數(shù)后,得到value=-1106, 即度151 value=t*100+(value>0:;/ 大于 0 力廿,小于 0 減152 I return value;L153 157154 unsigned charconsttimeCount=3;/ 動態(tài)掃描的時(shí)間間隔155 /顯示當(dāng)前溫度值,精確到小數(shù)點(diǎn)后一位156 /若先位選再段選,由于10 口默認(rèn)輸岀高電平,所以當(dāng)先位選會使數(shù)碼管岀現(xiàn)亂碼int157 void162日國163unsigned char count;164 申E unsigned char datas=0,0,0,0,0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論