日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
單總線溫度傳感器DS18B20簡介及應(yīng)用
單總線溫度傳感器DS18B20簡介及應(yīng)用
 更新時間:2009-7-9 16:48:57  點擊數(shù):0
【字體: 字體顏色
DS18B20溫度數(shù)據(jù)表
   上表是DS18B20溫度采集轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在DS18B20的兩個8比特的RAM中,二進(jìn)制中的前面5位是符號位,如果測得的溫度大于或等于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。
溫度轉(zhuǎn)換計算方法舉例:
例如當(dāng)DS18B20采集到+125℃的實際溫度后,輸出為07D0H,則:
實際溫度=07D0H╳0.0625=2000╳0.0625=125
0C。例如當(dāng)DS18B20采集到-55℃的實際溫度后,輸出為FC90H,則應(yīng)先將11位數(shù)據(jù)位取反加1得370H(符號位不變,也不作為計算),則:實際溫度=370H╳0.0625=880╳0.0625=550C

DS18B20軟、硬件設(shè)計本實例介紹DS18B20與單片機(jī)之間的軟、硬件接口,通過單片機(jī)來讀取DS18B20的溫度值,并將溫度值通過數(shù)碼管顯示出來。在實驗中先要將功能選擇開關(guān)調(diào)到DS18B20位置上。
/*********************************包含頭文件********************************/#include <reg51.h> /*******************************共陽LED段碼表*******************************/unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*********************************端口定義**********************************/sbit DQ=P3^3; //數(shù)據(jù)傳輸線接單片機(jī)的相應(yīng)的引腳/*********************************定義全局變量******************************/unsigned char tempL=0; //臨時變量低位unsigned char tempH=0; //臨時變量高位float temperature; //溫度值/****************************************************************************函數(shù)功能:延時子程序入口參數(shù):k出口參數(shù):****************************************************************************/void delay(unsigned int k){ unsigned int n; n=0; while(n < k) {n++;} return; } /****************************************************************************函數(shù)功能:數(shù)碼管掃描延時子程序入口參數(shù):出口參數(shù):****************************************************************************/void delay1(void){int k;for(k=0;k<400;k++);}/****************************************************************************函數(shù)功能:數(shù)碼管顯示子程序入口參數(shù):k出口參數(shù):****************************************************************************/void display(int k){P2=0xfe; P0=tab[k/1000];delay1();P2=0xfd;P0=tab[k%1000/100];delay1();P2=0xfb;P0=tab[k%100/10];delay1();P2=0xf7;P0=tab[k%10];delay1();P2=0xff;}/****************************************************************************函數(shù)功能:DS18B20初始化子程序入口參數(shù):出口參數(shù):****************************************************************************/Init_DS18B20(void){unsigned char x=0;DQ=1; //DQ先置高delay(8); //延時DQ=0; //發(fā)送復(fù)位脈沖delay(85); //延時(>480ms)DQ=1; //拉高數(shù)據(jù)線delay(14); //等待(15~60ms) }/****************************************************************************函數(shù)功能:向DS18B20讀一字節(jié)數(shù)據(jù)入口參數(shù):出口參數(shù):dat****************************************************************************/ReadOneChar(void) {unsigned char i=0; unsigned char dat=0;for (i=8;i>0;i--) {DQ=1;delay(1);DQ=0; dat>>=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}/****************************************************************************函數(shù)功能:向DS18B20寫一字節(jié)數(shù)據(jù)入口參數(shù):dat出口參數(shù):****************************************************************************/WriteOneChar(unsigned char dat){ unsigned char i=0; for(i=8;i>0;i--) {DQ=0; DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(4);}/****************************************************************************函數(shù)功能:向DS18B20讀溫度值入口參數(shù):出口參數(shù):temperature****************************************************************************/ReadTemperature(void){ Init_DS18B20(); //初始化WriteOneChar(0xcc); //跳過讀序列號的操作WriteOneChar(0x44); //啟動溫度轉(zhuǎn)換delay(125); //轉(zhuǎn)換需要一點時間,延時Init_DS18B20(); //初始化WriteOneChar(0xcc); //跳過讀序列號的操作WriteOneChar(0xbe); //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)tempL=ReadOneChar(); //讀出溫度的低位LSBtempH=ReadOneChar(); //讀出溫度的高位MSB //溫度轉(zhuǎn)換,把高低位做相應(yīng)的運(yùn)算轉(zhuǎn)化為實際溫度temperature=((tempH*256)+tempL)*0.0625; delay(200);return(temperature);}/****************************************************************************函數(shù)功能:主程序入口參數(shù):出口參數(shù):****************************************************************************/ void main(){ float i;while(1){i=ReadTemperature();display(i);}}
DS18B20是DALLAS公司生產(chǎn)的單總線式數(shù)字溫度傳感器,它具有微型化、低功耗、高性能、搞干擾能力強(qiáng)、易配處理器等優(yōu)點,特別適用于構(gòu)成多點溫度測控系統(tǒng),可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(提供9位二進(jìn)制數(shù)字)給單片機(jī)處理,且在同一總線上可以掛接多個傳感器芯片。它具有3引腳TO-92小體積封裝形式,溫度測量范圍為-55℃~+125℃,可編程為9位~12位A/D轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625℃,被測溫度用符號擴(kuò)展的16位數(shù)字量方式串行輸出,其工作電源既可在遠(yuǎn)端引入,也可采用寄生電源方式產(chǎn)生,多個DS18B20可以并聯(lián)到3根或2根線上,CPU只需一根端口線就能與多個DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點使DS18B20非常適用于遠(yuǎn)距離多點溫度檢測系統(tǒng)。 DS18B20外形及引腳說明外形及引腳如圖2所示:圖2 管腳排列圖在TO-92和SO-8的封裝中引腳有所不同,具體差別請查閱PDF手冊,在TO-92封裝中引腳分配如下:1(GND):地
2(DQ):單線運(yùn)用的數(shù)據(jù)輸入輸出引腳
3(VDD):可選的電源引腳DS18B20工作過程及時序DS18B20內(nèi)部的低溫度系數(shù)振蕩器是一個振蕩頻率隨溫度變化很小的振蕩器,為計數(shù)器1提供一頻率穩(wěn)定的計數(shù)脈沖。高溫度系數(shù)振蕩器是一個振蕩頻率對溫度很敏感的振蕩器,為計數(shù)器2提供一個頻率隨溫度變化的計數(shù)脈沖。初始時,溫度寄存器被預(yù)置成-55℃,每當(dāng)計數(shù)器1從預(yù)置數(shù)開始減計數(shù)到0時,溫度寄存器中寄存的溫度值就增加1℃,這個過程重復(fù)進(jìn)行,直到計數(shù)器2計數(shù)到0時便停止。初始時,計數(shù)器1預(yù)置的是與-55℃相對應(yīng)的一個預(yù)置值。以后計數(shù)器1每一個循環(huán)的預(yù)置數(shù)都由斜率累加器提供。為了補(bǔ)償振蕩器溫度特性的非線性性,斜率累加器提供的預(yù)置數(shù)也隨溫度相應(yīng)變化。計數(shù)器1的預(yù)置數(shù)也就是在給定溫度處使溫度寄存器寄存值增加1℃計數(shù)器所需要的計數(shù)個數(shù)。DS18B20內(nèi)部的比較器以四舍五入的量化方式確定溫度寄存器的最低有效位。在計數(shù)器2停止計數(shù)后,比較器將計數(shù)器1中的計數(shù)剩余值轉(zhuǎn)換為溫度值后與0.25℃進(jìn)行比較,若低于0.25℃,溫度寄存器的最低位就置0;若高于0.25℃,最低位就置1;若高于0.75℃時,溫度寄存器的最低位就進(jìn)位然后置0。這樣,經(jīng)過比較后所得的溫度寄存器的值就是最終讀取的溫度值了,其最后位代表0.5℃,四舍五入最大量化誤差為±1/2LSB,即0.25℃。溫度寄存器中的溫度值以9位數(shù)據(jù)格式表示,最高位為符號位,其余8位以二進(jìn)制補(bǔ)碼形式表示溫度值。測溫結(jié)束時,這9位數(shù)據(jù)轉(zhuǎn)存到暫存存儲器的前兩個字節(jié)中,符號位占用第一字節(jié),8位溫度數(shù)據(jù)占據(jù)第二字節(jié)。DS18B20測量溫度時使用特有的溫度測量技術(shù)。DS18B20內(nèi)部的低溫度系數(shù)振蕩器能產(chǎn)生穩(wěn)定的頻率信號;同樣的,高溫度系數(shù)振蕩器則將被測溫度轉(zhuǎn)換成頻率信號。當(dāng)計數(shù)門打開時,DS18B20進(jìn)行計數(shù),計數(shù)門開通時間由高溫度系數(shù)振蕩器決定。芯片內(nèi)部還有斜率累加器,可對頻率的非線性度加以補(bǔ)償。測量結(jié)果存入溫度寄存器中。一般情況下的溫度值應(yīng)該為9位,但因符號位擴(kuò)展成高8位,所以最后以16位補(bǔ)碼形式讀出。DS18B20工作過程一般遵循以下協(xié)議:初始化——ROM操作命令——存儲器操作命令——處理數(shù)據(jù)① 初始化單總線上的所有處理均從初始化序列開始。初始化序列包括總線主機(jī)發(fā)出一復(fù)位脈沖,接著由從屬器件送出存在脈沖。存在脈沖讓總線控制器知道DS1820 在總線上且已準(zhǔn)備好操作。② ROM操作命令一旦總線主機(jī)檢測到從屬器件的存在,它便可以發(fā)出器件ROM操作命令之一。所有ROM操作命令均為8位長。這些命令列表如下:Read ROM(讀ROM)[33h]此命令允許總線主機(jī)讀DS18B20的8位產(chǎn)品系列編碼,唯一的48位序列號,以及8位的CRC。此命令只能在總線上僅有一個DS18B20的情況下可以使用。如果總線上存在多于一個的從屬器件,那么當(dāng)所有從片企圖同時發(fā)送時將發(fā)生數(shù)據(jù)沖突的現(xiàn)象(漏極開路會產(chǎn)生線與的結(jié)果)。Match ROM( 符合ROM)[55h]此命令后繼以64位的ROM數(shù)據(jù)序列,允許總線主機(jī)對多點總線上特定的DS18B20尋址。只有與64位ROM序列嚴(yán)格相符的DS18B20才能對后繼的存貯器操作命令作出響應(yīng)。所有與64位ROM序列不符的從片將等待復(fù)位脈沖。此命令在總線上有單個或多個器件的情況下均可使用。Skip ROM( 跳過ROM )[CCh]在單點總線系統(tǒng)中,此命令通過允許總線主機(jī)不提供64位ROM編碼而訪問存儲器操作來節(jié)省時間。如果在總線上存在多于一個的從屬器件而且在Skip ROM命令之后發(fā)出讀命令,那么由于多個從片同時發(fā)送數(shù)據(jù),會在總線上發(fā)生數(shù)據(jù)沖突(漏極開路下拉會產(chǎn)生線與的效果)。Search ROM( 搜索ROM)[F0h]當(dāng)系統(tǒng)開始工作時,總線主機(jī)可能不知道單線總線上的器件個數(shù)或者不知道其64位ROM編碼。搜索ROM命令允許總線控制器用排除法識別總線上的所有從機(jī)的64位編碼。Alarm Search(告警搜索)[ECh]此命令的流程與搜索ROM命令相同。但是,僅在最近一次溫度測量出現(xiàn)告警的情況下,DS18B20才對此命令作出響應(yīng)。告警的條件定義為溫度高于TH 或低于TL。只要DS18B20一上電,告警條件就保持在設(shè)置狀態(tài),直到另一次溫度測量顯示出非告警值或者改變TH或TL的設(shè)置,使得測量值再一次位于允許的范圍之內(nèi)。貯存在EEPROM內(nèi)的觸發(fā)器值用于告警。存儲器操作命令Write Scratchpad(寫暫存存儲器)[4Eh]這個命令向DS18B20的暫存器中寫入數(shù)據(jù),開始位置在地址2。接下來寫入的兩個字節(jié)將被存到暫存器中的地址位置2和3?梢栽谌魏螘r刻發(fā)出復(fù)位命令來中止寫入。Read Scratchpad(讀暫存存儲器)[BEh]這個命令讀取暫存器的內(nèi)容。讀取將從字節(jié)0開始,一直進(jìn)行下去,直到第9(字節(jié)8,CRC)字節(jié)讀完。如果不想讀完所有字節(jié),控制器可以在任何時間發(fā)出復(fù)位命令來中止讀取。Copy Scratchpad(復(fù)制暫存存儲器)[48h]這條命令把暫存器的內(nèi)容拷貝到DS18B20的E2存儲器里,即把溫度報警觸發(fā)字節(jié)存入非易失性存儲器里。如果總線控制器在這條命令之后跟著發(fā)出讀時間隙,而DS18B20又正在忙于把暫存器拷貝到E2存儲器,DS18B20就會輸出一個“0”,如果拷貝結(jié)束的話,DS18B20 則輸出“1”。如果使用寄生電源,總線控制器必須在這條命令發(fā)出后立即起動強(qiáng)上拉并最少保持10ms。Convert T(溫度變換)[44h]這條命令啟動一次溫度轉(zhuǎn)換而無需其他數(shù)據(jù)。溫度轉(zhuǎn)換命令被執(zhí)行,而后DS18B20保持等待狀態(tài)。如果總線控制器在這條命令之后跟著發(fā)出讀時間隙,而DS18B20又忙于做時間轉(zhuǎn)換的話,DS18B20將在總線上輸出“0”,若溫度轉(zhuǎn)換完成,則輸出“1”。如果使用寄生電源,總線控制器必須在發(fā)出這條命令后立即起動強(qiáng)上拉,并保持500ms。Recall E2(重新調(diào)整E2)[B8h]這條命令把貯存在E2中溫度觸發(fā)器的值重新調(diào)至?xí)捍娲鎯ζ鳌_@種重新調(diào)出的操作在對DS18B20上電時也自動發(fā)生,因此只要器件一上電,暫存存儲器內(nèi)就有了有效的數(shù)據(jù)。在這條命令發(fā)出之后,對于所發(fā)出的第一個讀數(shù)據(jù)時間片,器件會輸出溫度轉(zhuǎn)換忙的標(biāo)識:“0”=忙,“1”=準(zhǔn)備就緒。Read Power Supply(讀電源)[B4h]對于在此命令發(fā)送至DS18B20之后所發(fā)出的第一讀數(shù)據(jù)的時間片,器件都會給出其電源方式的信號:“0”=寄生電源供電,“1”=外部電源供電。 處理數(shù)據(jù)DS18B20的高速暫存存儲器由9個字節(jié)組成,其分配如圖3所示。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲器的第0和第1個字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。圖3 高速暫存存儲器分配圖
溫度/0C二進(jìn)制表示十六進(jìn)制表示
符號位(5位)數(shù)據(jù)位(11位)
+1250 0 0 0 01111101000007D0H
+25.06250 0 0 0 0001100100010191H
+10.1250 0 0 0 00001010001000A2H
+0.50 0 0 0 0000000010000008H
00 0 0 0 0000000000000000H
-0.51 1 1 1 111111111000FFF8H
-10.1251 1 1 1 111101011110FF5EH
-25.6251 1 1 1 111001101111FE6FH
-551 1 1 1 110010010000FC90H
  • 上一篇: LCD12864等液晶接口的設(shè)計
  • 下一篇: 應(yīng)用于鎖相環(huán)的脈寬調(diào)整電路的設(shè)計(圖)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1