英創(chuàng)嵌入式主板以其優(yōu)異的穩(wěn)定性、獨(dú)特的設(shè)計(jì)及方便使用等優(yōu)點(diǎn),在嵌入式領(lǐng)域占有一席之地。在工業(yè)現(xiàn)場(chǎng),經(jīng)常有監(jiān)測(cè)環(huán)境溫度的需求,本方案應(yīng)用DS18B20為溫度采集芯片,與英創(chuàng)嵌入式主板的GPIO相連,就可以組成完整的測(cè)溫系統(tǒng)。由于DS18B20每條總線上可以最多接8個(gè)測(cè)溫點(diǎn),那么英創(chuàng)嵌入式主板至少可以接64個(gè)測(cè)溫點(diǎn)。
DS18B20數(shù)字溫度計(jì)是DALLAS公司生產(chǎn)的1-Wire即單總線器件,具有線路簡(jiǎn)單,體積小的特點(diǎn)。實(shí)際應(yīng)用中不需要外部任何元器件即可實(shí)現(xiàn)測(cè)溫,測(cè)量溫度范圍在-55°C到+125°C之間,數(shù)字溫度計(jì)的分辨率用戶可以從9位到12位選擇;并且內(nèi)部有溫度上、下限告警設(shè)置,使用非常方便。
TO-92封裝的DS18B20的引腳排列見(jiàn)圖1,其引腳功能描述見(jiàn)表1。
表1 DS18B20詳細(xì)引腳功能描述:
序號(hào) |
名稱 |
引腳功能描述 |
1 |
GND |
地信號(hào) |
2 |
DQ |
數(shù)據(jù)輸入/輸出引腳。開(kāi)漏單總線接口引腳 |
3 |
VDD |
可選的VDD引腳。當(dāng)工作于寄生電源時(shí),此引腳必須接地 |
DS18B20的使用方法
由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,而對(duì)嵌入式主板來(lái)說(shuō),硬件上并不支持單總線協(xié)議,因此,我們必須采用GPIO的方法來(lái)模擬單總線的協(xié)議時(shí)序來(lái)完成對(duì)DS18B20芯片的訪問(wèn)。在本示例中,只需把管腳2接英創(chuàng)嵌入式主板的GPIO,管腳3接5V電源,管腳1接地,就可以搭建起測(cè)試環(huán)境,如圖二所示。如果需要測(cè)試多點(diǎn)溫度,可以把多個(gè)DS18B20并起。
由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對(duì)讀寫的數(shù)據(jù)位有著嚴(yán)格的時(shí)序要求。DS18B20有嚴(yán)格的通信協(xié)議來(lái)保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號(hào)的時(shí)序:初始化時(shí)序、讀時(shí)序、寫時(shí)序。所有時(shí)序都是將嵌入式主板作為主設(shè)備,單總線器件作為從設(shè)備。每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動(dòng)啟動(dòng)寫時(shí)序開(kāi)始,如果要求單總線器件送回?cái)?shù)據(jù),在進(jìn)行寫命令后,主機(jī)需要啟動(dòng)讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。
下面是18B20的時(shí)序圖,根據(jù)時(shí)序的要求,改變GPIO的電平,可以完成18B20的操作。
DS18B20復(fù)位時(shí)序
根據(jù)以上DS18B20的時(shí)序,初始化的函數(shù)如下:
Init18b20()
{
char flag;
OutBit(1);
Delayus(1);
OutBit(0);
Delayus(600); // 復(fù)位信號(hào)480—960us
OutBit(1);
Delayus(60); // 等待15-60us
if(ReadBit()) // 檢查存在電平,如果為低,說(shuō)明18B20正確復(fù)位
{
printf(‘init fail’);
return false; // detect 1820 fail!
}
else
{
Sleep(1);
OutBit(1);
return true; // detect 1820 success!
}
}
DS18B20的數(shù)據(jù)讀寫時(shí)通過(guò)時(shí)間間隙處理位和命令字來(lái)確認(rèn)信息交換。
DS18B20的寫時(shí)間隙
當(dāng)主機(jī)把數(shù)據(jù)線從邏輯高電平拉到邏輯低電平的時(shí)候,寫時(shí)間隙開(kāi)始。有兩種寫時(shí)間隙:寫1時(shí)間隙和寫0時(shí)間隙。所有寫時(shí)間隙必須最少持續(xù)60us,包括兩個(gè)寫周期間至少1us的恢復(fù)時(shí)間。
I/O線電平變低后,DS18B20在一個(gè)15us到60us的窗口內(nèi)對(duì)I/O線采樣。如果線上是高電平,就是寫1,如果線上是低電平,就是寫0。如圖所示。
void DS18B20::WriteByte(uchar wr)
{
uchar i;
OutBit(1);
Delayus(1);
for (i=0;i《8;i++) // 寫8bit
{
OutBit(0) ; // 總線拉低,寫間隙開(kāi)始
Delayus(10); // 延時(shí) 2-12us
OutBit(wr&0x01) ; // 寫數(shù)據(jù)到總線
Delayus(30); // 在15us-60us之間采用
OutBit(1); // 釋放總線
wr 》》= 1;
Delayus(2);
}
Sleep(1); // 字節(jié)之間最好間隔的稍微長(zhǎng)一點(diǎn)
}
DS18B20的讀時(shí)間隙
當(dāng)從DS18B20讀取數(shù)據(jù)時(shí),主機(jī)生成讀時(shí)間隙。當(dāng)主機(jī)把數(shù)據(jù)線從高電平拉到低電平時(shí),讀時(shí)間隙開(kāi)始,數(shù)據(jù)線必須保持至少1us;從DS8B20輸出的數(shù)據(jù)在讀時(shí)間隙的下降沿出現(xiàn)后15us內(nèi)有效。對(duì)于DS18B20的讀時(shí)隙是從主機(jī)把總線拉低之后,在15微秒之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個(gè)讀時(shí)序過(guò)程,至少要60us才能完成。
根據(jù)以上的讀時(shí)序圖,讀字節(jié)函數(shù)如下:
UCHAR DS18B20::ReadByte()
{
uchar i,u=0;
OutBit(1);
Delayus(1);
for(i=0;i《8;i++) // 讀一字節(jié)
{
OutBit(0) ; // 總線拉低,讀間隙開(kāi)始
Delayus(2);
OutBit(1) ; // 拉高總線
Delayus(4); // 在1-14us之內(nèi)讀取總線數(shù)據(jù)
u 》》= 1;
if(ReadBit()==1) u |= 0x80;
Delayus(60); // 讀取數(shù)據(jù)周期至少60us
OutBit(1) ;
}
return(u);
}
在讀溫度之前,要先啟動(dòng)溫度轉(zhuǎn)換,如果采用寄生電源供電,溫度轉(zhuǎn)換的時(shí)間應(yīng)該大于500毫秒。對(duì)于一條總線的多個(gè)18B20來(lái)說(shuō),啟動(dòng)轉(zhuǎn)換不需要匹配18B20的ROM地址。
void DS18B20::StartConvert()
{
Init18b20 ();
WriteByte(0xcc); // 跳過(guò)ROM
WriteByte(0x44); // 啟動(dòng)轉(zhuǎn)換命令
}
在讀指定的18B20時(shí),就要先發(fā)匹配命令,再發(fā)ROM序列號(hào),具體請(qǐng)參考下面的程序:
void DS18B20::TemperatuerResult(char id)
{
uchar i;
Init18b20 ();
WriteByte(0x55); // 匹配ROM地址
for(i=0;i《8;i++) // 發(fā)18B20地址碼
{
WriteByte(b20rom[id][i]);
}
WriteByte(0xbe); // 發(fā)讀溫度命令
read_bytes(2); // 前2個(gè)字節(jié)為溫度值
temp=temp_buff[1]&0x0f; // 去掉符號(hào)位
temp=temp《《8;
temp=temp+temp_buff[0];
Temperature=temp*0.0625; // 得到溫度值
}
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6096瀏覽量
36138
發(fā)布評(píng)論請(qǐng)先 登錄
基于LPC2292 和DS18B20 的測(cè)溫節(jié)點(diǎn)設(shè)計(jì)The Des ign of Temperature measure node B
測(cè)試測(cè)量技術(shù)社區(qū)-- 基于CC2430和DS18B20的無(wú)線測(cè)溫系統(tǒng)設(shè)計(jì) ...
測(cè)試測(cè)量技術(shù)社區(qū)-- 基于CC2430和DS18B20的無(wú)線測(cè)溫系統(tǒng)設(shè)計(jì) ...
DS18B20測(cè)溫系統(tǒng)設(shè)計(jì)
DS18B20多點(diǎn)測(cè)溫方法探討
基于DS18B20組網(wǎng)測(cè)溫的研究
一種新型多點(diǎn)測(cè)溫系統(tǒng)的設(shè)計(jì)(基于DS18B20設(shè)計(jì)的多點(diǎn)測(cè)溫

基于DS18B20測(cè)溫系統(tǒng)設(shè)計(jì)

DS18B20 構(gòu)成測(cè)溫系統(tǒng)
DS18B20構(gòu)成測(cè)溫系統(tǒng)
ds18b20測(cè)溫程序詳解

ds18b20測(cè)溫電路圖詳解
dht11和ds18b20區(qū)別_dht11與ds18b20哪個(gè)測(cè)溫度更精確
基于DS18B20多點(diǎn)測(cè)溫源碼
基于DS18B20的多點(diǎn)測(cè)溫方案詳解

評(píng)論