ds18b20詳解及程序_第1頁
ds18b20詳解及程序_第2頁
ds18b20詳解及程序_第3頁
ds18b20詳解及程序_第4頁
ds18b20詳解及程序_第5頁
免費預(yù)覽已結(jié)束,剩余13頁可下載查看

下載本文檔

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

文檔簡介

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

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

3、擦險RAM1TH/罔F*低冃字巧丨2mi-iPttw字節(jié)【配賈字書4配賣字節(jié)很剤音節(jié)56泯奇宇節(jié)7 rX暫存儲器的頭兩個字節(jié)為測得溫度信息的低位和高位字節(jié);第3, 4字節(jié)是TH和TL的易失性拷貝,在每次電復(fù)位時都會被刷新第5字節(jié)是配置寄存器的易失性拷貝,同樣在電復(fù)位時被刷新;第9字節(jié)是前面8個字節(jié)的CRC檢驗值.配置寄存器的命令內(nèi)容如下0R1R011111MSB LSBR0和R1是溫度值分辨率位,按下表進行配置默認(rèn)出廠設(shè)置是 R1R0 = 11, 即12位.溫度值分辨率配置表R1R0分辨率最大轉(zhuǎn)換時間(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位分辨率時的兩個溫度字節(jié)的具體格式如下:低字節(jié):2A32A22A12A02A-12A-22A-32A-4高字節(jié):SSSSS2A62人52人4其中高字節(jié)前5位都是符號位S,若分辨率低于12位時,相應(yīng)地使最低為0,如:當(dāng)分辨 率為10位時,低字節(jié)為:2人32A22A12A02A-12A-200高字節(jié)不變一些溫度與轉(zhuǎn)換后輸出的數(shù)字參照如下溫度數(shù)字輸出換成16進制+ 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ù)溫度時,使用補碼表示,方便計算機運算(若是用C語言,直接 將結(jié)果賦值給一個int變量即可).DS18B20 的使用方法:由于DS18B20采用的是方式,即在一根數(shù)據(jù)線實現(xiàn)數(shù)據(jù)的雙向傳輸,而對單片機來說,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對DS18B20 芯片的

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

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

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

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

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

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

12、平時,產(chǎn)生寫時隙所有寫時隙都必須在60us以上,各寫時隙間必須保證 1us的恢復(fù)時間寫"1":主機將數(shù)據(jù)線 DQ先拉低,然后釋放15us后,將數(shù)據(jù)線DQ拉高;寫"0": 主機將DQ拉低并至少保持 60us以上 2)讀時隙:當(dāng)主機將數(shù)據(jù)線 DQ從高電平拉至低電平時,產(chǎn)生讀時隙所有讀時隙最短必 須持續(xù)60us,各讀時隙間必須保證 1us的恢復(fù)時間讀:主機將DQ拉低至少1us,.此時主機馬上將 DQ拉高,然后就可以延時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 一段相對長時間低電平,然后一段相對非常短時間高電平,即可啟動29 void30 31 /對于時鐘,unsignedint 型的i,作一個i+操作的時間大于為 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)生一個上升沿,進入等待應(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ù)據(jù)53 bitreadBit()54 55 unsigned int i;56 bitb;57 ds=0;58 i+; /延時約8us,符合協(xié)議要求至少保持1us59 ds=1;?60 i+;i+;/延時約16us,符合協(xié)議要求的至少延時15us以上61 b=ds;62 i=8; ?63 while (i>0)i-;/延時約64us,符合讀時隙不低于60us要求64 I return b;L65 6666 /讀取一字節(jié)數(shù)據(jù),通過調(diào)用readBit()來實現(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-;/延時約64us,符合寫時隙不低于60us要求99 1100 else / 寫"0",將 DQ 拉低 60us120us101 102 ds=0;103 i=8; while (i>0)i-;/ 拉低約 64us,符號要求104 ds=1;105 i+;i+;/整個寫0時隙

19、過程已經(jīng)超過60us,這里就不用像寫1那樣,再延時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); /延時1ms,因為DS18B20 會拉低 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ù)讀取兩個字節(jié)數(shù)據(jù)136 I low=readByte(); ?137 high=readByte();138 /將高低兩個字節(jié)合成一個整形變量139 /計算機中對于負(fù)數(shù)是利用補碼來表示的140 /若是負(fù)值,讀取岀來的數(shù)值是用補碼表示的,可直接賦值給int型的value141 tmpvalue=high;142 tmpvalue<<=8;143 tmpvalue|=low;144 value=tmpvalue;145 ?146 I/使用DS18B20的默認(rèn)分辨率12位,精確度為度,即讀回數(shù)據(jù)的最低位代表度147 t=

22、value*;148 /將它放大100倍,使顯示時可顯示小數(shù)點后兩位,并對小數(shù)點后第三進行4舍5入149 /如t=,進行計數(shù)后,得到value=1106, 即度150 /如t=,進行計數(shù)后,得到value=-1106, 即度151 value=t*100+(value>0:;/ 大于 0 力廿,小于 0 減152 I return value;L153 157154 unsigned charconsttimeCount=3;/ 動態(tài)掃描的時間間隔155 /顯示當(dāng)前溫度值,精確到小數(shù)點后一位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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論