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

當前位置:首頁 > 技術(shù)學院 > 技術(shù)前線
[導讀]DS18B20是一款常用的高精度的單總線數(shù)字溫度測量芯片。具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。


DS18B20內(nèi)部構(gòu)成

主要由以下3部分組成:

64 位ROM

高速暫存器

存儲器

64位ROM存儲獨有的序列號,ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼,每個DS18B20的64位序列號均不相同。這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。

高速暫存器包含:

溫度傳感器

一個字節(jié)的溫度上限和溫度下限報警觸發(fā)器(TH和TL)

配置寄存器允許用戶設(shè)定9位,10位,11位和12位的溫度分辨率,分別對應著溫度的分辨率為:0.5°C,0.25°C,0.125°C,0.0625°C,默認為12位分辨率

存儲器:由一個高速的RAM和一個可擦除的EEPROM組成,EEPROM存儲高溫和低溫觸發(fā)器(TH和TL)以及配置寄存器的值,(就是存儲低溫和高溫報警值以及溫度分辨率)


ds18b20數(shù)據(jù)手冊

DS18B20溫度讀取與計算

DS18B20采用16位補碼的形式來存儲溫度數(shù)據(jù),溫度是攝氏度。當溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補碼形式存放在高速暫存存儲器的第0和第1個字節(jié)。

高字節(jié)的五個S為符號位,溫度為正值時S=1,溫度為負值時S=0。

剩下的11位為溫度數(shù)據(jù)位,對于12位分辨率,所有位全部有效,對于11位分辨率,位0(bit0)無定義,對于10位分辨率,位0和位1無定義,對于9位分辨率,位0,位1,和位2無定義。


ds18b20數(shù)據(jù)手冊

對應的溫度計算:

當五個符號位S=0時,溫度為正值,直接將后面的11位二進制轉(zhuǎn)換為十進制,再乘以0.0625(12位分辨率),就可以得到溫度值。

當五個符號位S=1時,溫度為負值,先將后面的11位二進制補碼變?yōu)樵a(符號位不變,數(shù)值位取反后加1),再計算十進制值。再乘以0.0625(12位分辨率),就可以得到溫度值。

舉兩個例子:

數(shù)字輸出07D0(00000111 11010000),轉(zhuǎn)換成10進制是2000,對應攝氏度:0.0625x2000=125°C

數(shù)字輸出為 FC90,首先取反,然后+1,轉(zhuǎn)換成原碼為:11111011 01101111,數(shù)值位轉(zhuǎn)換成10進制是870,對應攝氏度:-0.0625x870=-55°C

溫度對應表如下:


ds18b20數(shù)據(jù)手冊

上述例子,用C語言來實現(xiàn)的代碼,如下:

unsigned int Temp1,Temp2,Temperature; //Temp1低八位,Temp2高八位

unsigned char Minus Flag=0; //負溫度標志位

if(Temp2&0xFC)//判斷符號位是否為1

{

Minus Flag=l; //負溫度標志位置1

Temperature=((Temp2<<8)|Temp1); //高八位第八位進行整合

Temperature=((Temperature)+1); //講補碼轉(zhuǎn)換為原碼,求反,補1

Temperature*=0.0625;//求出十進制

}

else //溫度為正值

{

Minus Flag=0; //負溫度標志位置0

Temperature =((Temp2<<8) |Temp1)*0.0625;

}

DS18B20工作步驟

DS18B20的工作步驟可以分為三步:

初始化DS18B20

執(zhí)行ROM指令

執(zhí)行DS18B20功能指令

其中第二步執(zhí)行ROM指令,也就是訪問每個DS18B20,搜索64位序列號,讀取匹配的序列號值,然后匹配對應的DS18B20,如果我們僅僅使用單個DS18B20,可以直接跳過ROM指令。而跳過ROM指令的字節(jié)是0xCC。

初始化DS18B20

任何器件想要使用,首先就是需要初始化,對于DS18B20單總線設(shè)備,首先初始化單總線為高電平,然后總線開始也需要檢測這條總線上是否存在DS18B20這個器件。如果這條總線上存在DS18B20,總線會根據(jù)時序要求返回一個低電平脈沖,如果不存在的話,也就不會返回脈沖,即總線保持為高電平。

初始化具體時序步驟如下:

單片機拉低總線至少480us,產(chǎn)生復位脈沖,然后釋放總線(拉高電平)

這時DS8B20檢測到請求之后,會拉低信號,大約60~240us表示應答

DS8B20拉低電平的60~240us之間,單片機讀取總線的電平,如果是低電平,那么表示初始化成功

DS18B20拉低電平60~240us之后,會釋放總線


ds18b20數(shù)據(jù)手冊

DS18B20的初始化代碼如下:

/*****初始化DS18B20*****/

unsigned int Init_DS18B20(void)

{

unsigned int x=0;

DQ = 1; //DQ復位

delay(4); //稍做延時

DQ = 0; //單片機將DQ拉低

delay(60); //精確延時,大于480us

DQ = 1; //拉高總線

delay(8);

x = DQ; //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗

delay(4);

return x;

}

寫時序

總線控制器通過控制單總線高低電平持續(xù)時間從而把邏輯1或0寫DS18B20中。每次只傳輸1位數(shù)據(jù)。

單片機想要給DS18B20寫入一個0時,需要將單片機引腳拉低,保持低電平時間要在60~120us之間,然后釋放總線。

單片機想要給DS18B20寫入一個1時,需要將單片機引腳拉低,拉低時間需要大于1us,然后在15us內(nèi)拉高總線。

在寫時序起始后15μs到60μs期間,DS18B20處于采樣單總線電平狀態(tài)。如果在此期間總線為高電平,則向DS18B20寫入1;如果總線為低電平,則向DSl8B20寫入0。

注意:2次寫周期之間至少間隔1us。


ds18b20數(shù)據(jù)手冊

DS18B20寫時序的代碼如下:

/*****寫一個字節(jié)*****/

void WriteOneChar(unsigned char dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = dat&0x01; //與1按位與運算,dat最低位為1時DQ總線為1,dat最低位為0時DQ總線為0

delay(4);

DQ = 1;

dat>>=1;

}

delay(4);

}

采用多個DS18B20時,需要寫ROM指令來控制總線上的某個DS18B20。如果是單個DS18B20,直接寫跳過ROM指令0xCC即可。DS18B20寫入ROM功能指令如下表:


ds18b20數(shù)據(jù)手冊

DS18B20的一些RAM功能指令如下表。其中常用的是溫度轉(zhuǎn)換指令,開啟溫度讀取轉(zhuǎn)換,讀取好的溫度會存儲在高速暫存器的第0個和第一個字節(jié)中。另一個常用的是讀取溫度指令,讀取高速暫存器存儲的數(shù)據(jù)。


ds18b20數(shù)據(jù)手冊

讀時序

讀時隙由主機拉低總線電平至少1μs然后再釋放總線,讀取DS18B20發(fā)送過來的1或者0。

DS18B20在檢測到總線被拉低1微秒后,便開始送出數(shù)據(jù),若是要送出0就把總線拉為低電平直到讀周期結(jié)束。若要送出1則釋放總線為高電平。


ds18b20數(shù)據(jù)手冊

注意:所有讀時隙必須至少需要60us,且在兩次獨立的時隙之間至少需要1ps的恢復時間。

同時注意:主機只有在發(fā)送讀暫存器命令(0xBE)或讀電源類型命令(0xB4)后,立即生成讀時隙指令,DS18B20才能向主機傳送數(shù)據(jù)。也就是先發(fā)讀取指令,再發(fā)送讀時隙。

最后一點:寫時序注意是先寫命令的低字節(jié),比如寫入跳過ROM指令0xCC(11001100),寫的順序是“零、零、壹、壹、零、零、壹、壹”。

讀時序時是先讀低字節(jié),在讀高字節(jié),也就是先讀取高速暫存器的第0個字節(jié)(溫度的低8位),在讀取高速暫存器的第1個字節(jié)(溫度的高8位) 我們正常使用DS18B20讀取溫度讀取兩個溫度字節(jié)即可。

STM32例程

DS18B20.c代碼:

#include "ds18b20.h"

#include "delay.h"

//復位DS18B20

void DS18B20_Rst(void)

{

DS18B20_IO_OUT(); //SET PG11 OUTPUT

DS18B20_DQ_OUT=0; //拉低DQ

delay_us(750); //拉低750us

DS18B20_DQ_OUT=1; //DQ=1

delay_us(15); //15US

}

//等待DS18B20的回應

//返回1:未檢測到DS18B20的存在

//返回0:存在

u8 DS18B20_Check(void)

{

u8 retry=0;

DS18B20_IO_IN(); //SET PG11 INPUT

while (DS18B20_DQ_IN&&retry<200)

{

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;

}

//從DS18B20讀取一個位

//返回值:1/0

u8 DS18B20_Read_Bit(void)

{

u8 data;

DS18B20_IO_OUT(); //SET PG11 OUTPUT

DS18B20_DQ_OUT=0;

delay_us(2);

DS18B20_DQ_OUT=1;

DS18B20_IO_IN(); //SET PG11 INPUT

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)

{

u8 i,j,dat;

dat=0;

for (i=1;i<=8;i++)

{

j=DS18B20_Read_Bit();

dat=(j<<7)|(dat>>1);

}

return dat;

}

//寫一個字節(jié)到DS18B20

//dat:要寫入的字節(jié)

void DS18B20_Write_Byte(u8 dat)

{

u8 j;

u8 testb;

DS18B20_IO_OUT(); //SET PG11 OUTPUT;

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_DQ_OUT=1;

delay_us(2);

}

}

}

//開始溫度轉(zhuǎn)換

void DS18B20_Start(void)

{

DS18B20_Rst();

DS18B20_Check();

DS18B20_Write_Byte(0xcc); // skip rom

DS18B20_Write_Byte(0x44); // convert

}

//初始化DS18B20的IO口 DQ 同時檢測DS的存在

//返回1:不存在

//返回0:存在

u8 DS18B20_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE); //使能PORTG口時鐘

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //PORTG.11 推挽輸出

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOG, &GPIO_InitStructure);

GPIO_SetBits(GPIOG,GPIO_Pin_11); //輸出1

DS18B20_Rst();

return DS18B20_Check();

}

//從ds18b20得到溫度值

//精度:0.1C

//返回值:溫度值 (-550~1250)

short DS18B20_Get_Temp(void)

{

u8 temp;

u8 TL,TH;

short tem;

DS18B20_Start (); // ds1820 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;

}

DS18B20.h代碼:

#ifndef __DS18B20_H

#define __DS18B20_H

#include "sys.h"

//IO方向設(shè)置

#define DS18B20_IO_IN() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}

#define DS18B20_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;}

//IO操作函數(shù)

#define DS18B20_DQ_OUT PGout(11) //數(shù)據(jù)端口 PA0

#define DS18B20_DQ_IN PGin(11) //數(shù)據(jù)端口 PA0

u8 DS18B20_Init(void);//初始化DS18B20

short DS18B20_Get_Temp(void);//獲取溫度

void DS18B20_Start(void);//開始溫度轉(zhuǎn)換

void DS18B20_Write_Byte(u8 dat);//寫入一個字節(jié)

u8 DS18B20_Read_Byte(void);//讀出一個字節(jié)

u8 DS18B20_Read_Bit(void);//讀出一個位

u8 DS18B20_Check(void);//檢測是否存在DS18B20

void DS18B20_Rst(void);//復位DS18B20

#endif

本站聲明: 本文章由作者或相關(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ù)中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(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 半導體

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

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

要點: 有效應對環(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ù)學會聯(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)閉