色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux驅(qū)動(dòng)開(kāi)發(fā)-編寫(xiě)DS18B20驅(qū)動(dòng)

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:28 ? 次閱讀

【摘要】 當(dāng)前文章介紹如何在Linux系統(tǒng)下編寫(xiě)一個(gè)DS18B20溫度傳感器驅(qū)動(dòng),測(cè)量環(huán)境溫度,并將DS18B20注冊(cè)成字符設(shè)備,通過(guò)文件接口將溫度數(shù)據(jù)傳遞給應(yīng)用層。

1. 前言

當(dāng)前文章介紹如何在Linux系統(tǒng)下編寫(xiě)一個(gè)DS18B20溫度傳感器驅(qū)動(dòng),測(cè)量環(huán)境溫度,并將DS18B20注冊(cè)成字符設(shè)備,通過(guò)文件接口將溫度數(shù)據(jù)傳遞給應(yīng)用層。

當(dāng)前使用的開(kāi)發(fā)板是友善之臂的Tiny4412開(kāi)發(fā)板,CPU三星的Exynos-4412,主頻是4核1.5GHZ,當(dāng)前運(yùn)行的Linux內(nèi)核版本是3.5。使用的溫度傳感器是DS18B20,是一個(gè)數(shù)字溫度傳感器,非常經(jīng)典的一款溫度傳感器,常年應(yīng)用在各大高校畢設(shè)、實(shí)驗(yàn)室、畢設(shè)、課設(shè)場(chǎng)景。DS1820接線比較簡(jiǎn)單,只需要一根線就行,加上兩根電源線,一共3根線,并且DS18B20支持硬件序列號(hào)尋址,支持一個(gè)IO口上掛載多個(gè)DS18B20。

2. DS18B20介紹

DS18B20特性:

(1)全數(shù)字溫度轉(zhuǎn)換及輸出。
(2)先進(jìn)的單總線數(shù)據(jù)通信
(3)最高 12 位分辨率,精度可達(dá)土 0.5 攝氏度。
(4)12 位分辨率時(shí)的最大工作周期為 750 毫秒。
(5)可選擇寄生工作方式。
(6)檢測(cè)溫度范圍為–55° C ~+125° C (–67° F ~+257° F)
(7)內(nèi)置 EEPROM,限溫報(bào)警功能。
(8)64 位光刻 ROM,內(nèi)置產(chǎn)品序列號(hào),方便多機(jī)掛接。
(9)多樣封裝形式,適應(yīng)不同硬件系統(tǒng)。

image-20220102202650673

DS18B20引腳功能

GND 電壓地
DQ 單數(shù)據(jù)總線
VDD 電源電壓
NC 空引腳

DS18B20讀取溫度的步驟:

發(fā)送復(fù)位信號(hào)-->
檢測(cè)回應(yīng)信號(hào)--->
發(fā)送0xCC-->發(fā)送0x44->
發(fā)送復(fù)位信號(hào)—>
檢測(cè)回應(yīng)信號(hào)—>
寫(xiě)0xcc--->
寫(xiě)0xbe--->
循環(huán)8次讀取溫度低字節(jié)--->
循環(huán)8次讀取溫度高字節(jié)---->
打印溫度信息

DS18B20溫度轉(zhuǎn)換示例:

u16 temp;
u8 TL,TH;
u16 intT,decT; 	              //溫度值的整數(shù)和小數(shù)部分
TL=DS18B20_Read_Byte();       //讀取溫度低8位LSB   
TH=DS18B20_Read_Byte();       //讀取溫度高8位MSB  
temp=((u16)TH<<8)|TL;          //將讀出的溫度高低位組合成16位的值
intT = temp >> 4;                //分離出溫度值整數(shù)部分
decT = temp & 0xF;              //分離出溫度值小數(shù)部分
printf("A: %d.%d\r\n",(int)intT,(int)decT); //打印實(shí)際溫度值

3. 硬件接線圖

Tiny4412開(kāi)發(fā)板擴(kuò)展GPIO口:

image-20220102203315453image-20220102203906312image-20220102203919777

4. 示例代碼

#include 
#include 
#include    /*雜項(xiàng)字符設(shè)備頭文件*/
#include            /*文件操作集合*/
#include         /*延時(shí)函數(shù)*/

#include 
#include 
/*DS18B20 GPIO接口: GPB_4*/

/*定義指針,用于接收虛擬地址*/
volatile unsigned int *DS18B20_GPBCON;
volatile unsigned int *DS18B20_GPBDAT;

#define DS18B20_INPUT()  {*DS18B20_GPBCON &= ~(0xf  << 4 * 4);}
#define DS18B20_OUTPUT() {*DS18B20_GPBCON &= ~(0xf  << 4 * 4);*DS18B20_GPBCON |=  (0x1   << 4 * 4);}

/*
函數(shù)功能:等待DS18B20的回應(yīng)
返回1:未檢測(cè)到DS18B20的存在
返回0:存在
*/
unsigned char DS18B20_Check(void) 	   
{   
	unsigned char retry=0;
	DS18B20_INPUT() ///SET PG11 INPUT	 
    while((*DS18B20_GPBDAT & (1 << 4))&&retry<200)
	{
		retry++;
		udelay(1);
	};	 
	if(retry>=200)return 1;
	else retry=0;
    while(!(*DS18B20_GPBDAT & (1 << 4))&&retry<240)
	{
		retry++;
		udelay(1);
	};
	if(retry>=240)return 1;	    
	return 0;
}
/*
從DS18B20讀取一個(gè)位
返回值:1/0
*/
unsigned char DS18B20_Read_Bit(void) 			 // read one bit
{
    unsigned char data;
	DS18B20_OUTPUT();
    *DS18B20_GPBDAT &= ~(1 << 4);//輸出0 
	udelay(2);
    *DS18B20_GPBDAT |= (1 << 4);//輸出1 
	DS18B20_INPUT()
	udelay(12);
	if((*DS18B20_GPBDAT & (1 << 4)))data=1;
    else data=0;	 
    udelay(50);           
    return data;
}
/*
從DS18B20讀取一個(gè)字節(jié)
返回值:讀到的數(shù)據(jù)
*/
unsigned char DS18B20_Read_Byte(void)    // read one byte
{        
    unsigned char i,j,dat;
    dat=0;
	for(i=1;i<=8;i++) 
	{
        j=DS18B20_Read_Bit();
		dat=dat>>1;
		if(j)        //主機(jī)對(duì)總線采樣的數(shù) 判斷-------讀數(shù)據(jù)-1就是1,否則就是0 
		dat|=0x80;   //先收低位數(shù)據(jù)--一步一步向低位移動(dòng)>>
    }						    
    return dat;
}
/*
寫(xiě)一個(gè)字節(jié)到DS18B20
dat:要寫(xiě)入的字節(jié)
*/
void DS18B20_Write_Byte(unsigned char dat)     
 {             
    unsigned char j;
    unsigned char testb;
	DS18B20_OUTPUT();
    for(j=1;j<=8;j++) 
	{
        testb=dat&0x01;
        dat=dat>>1;
        if(testb) 
        {
            *DS18B20_GPBDAT &= ~(1 << 4);//輸出0// Write 1
            udelay(2);                            
            *DS18B20_GPBDAT |= (1 << 4);//輸出1
            udelay(60);             
        }
        else 
        {
            *DS18B20_GPBDAT &= ~(1 << 4);//輸出0// Write 0
            udelay(60);             
            *DS18B20_GPBDAT |= (1 << 4);//輸出1
            udelay(2);                          
        }
    }
}
/*
從ds18b20得到溫度值
精度:0.1C
返回值:溫度值 (-550~1250) 
*/
short DS18B20_Get_Temp(void)
{
	unsigned short aaa;
    unsigned char temp;
	unsigned char TL,TH;
	DS18B20_OUTPUT(); 
    *DS18B20_GPBDAT &= ~(1 << 4);//輸出0 //拉低DQ
    udelay(750);    //拉低750us
    *DS18B20_GPBDAT |= (1 << 4);//輸出1 //DQ=1 
	udelay(15);     //15US	  
	
    DS18B20_Check();	 
    DS18B20_Write_Byte(0xcc);
    DS18B20_Write_Byte(0x44);
	
    DS18B20_OUTPUT(); 
    *DS18B20_GPBDAT &= ~(1 << 4);//輸出0 //拉低DQ
    udelay(750);    //拉低750us
    *DS18B20_GPBDAT |= (1 << 4);//輸出1 //DQ=1 
    udelay(15);     //15US
	
    DS18B20_Check();	 
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0xbe);// convert	    
    TL=DS18B20_Read_Byte();  // LSB   
    TH=DS18B20_Read_Byte();  // MSB  
    aaa=((unsigned short)TH<<8)|TL;
	return aaa;
}
/*
雜項(xiàng)字符設(shè)備注冊(cè)示例----->DS18B20
*/
static int tiny4412_open(struct inode *my_inode, struct file *my_file)
{
	/*映射物理地址*/
	DS18B20_GPBCON=ioremap(0x11400040,4);
	DS18B20_GPBDAT=ioremap(0x11400044,4);
	printk("DS18B20初始化成功!\r\n");
	
	 /*設(shè)置ds18b20為輸出模式*/
    *DS18B20_GPBCON &= ~(0xf  << 4 * 4);
    *DS18B20_GPBCON |=  (0x1  << 4 * 4);
	return 0;
}
static int tiny4412_release(struct inode *my_inode, struct file *my_file)
{
	/*釋放虛擬地址*/
	iounmap(DS18B20_GPBCON);
	iounmap(DS18B20_GPBDAT);
	printk("DS18B20釋放成功\r\n");
	return 0;
}
static ssize_t tiny4412_read(struct file *my_file, char __user *buf, size_t len, loff_t *loff)
{
	/*讀取溫度信息*/
	short temp=DS18B20_Get_Temp();
	copy_to_user(buf,&temp,2);    //拷貝溫度至應(yīng)用層 
	return 0;
}
static ssize_t tiny4412_write(struct file *my_file, const char __user *buf, size_t len, loff_t *loff)
{
	return 0;
}
/*文件操作集合*/
static struct file_operations tiny4412_fops=
{
	.open=tiny4412_open,
	.read=tiny4412_read,
	.write=tiny4412_write,
	.release=tiny4412_release
};
/*
核心結(jié)構(gòu)體
*/
static struct miscdevice tiny4412_misc=
{
	.minor=MISC_DYNAMIC_MINOR,  /*自動(dòng)分配次設(shè)備號(hào)*/
	.name="DS18B20",      		/*設(shè)備文件,指定/dev/生成的文件名稱*/
	.fops=&tiny4412_fops
};

static int __init DS18B20_dev_init(void)
{
    /*雜項(xiàng)設(shè)備注冊(cè)*/
    misc_register(&tiny4412_misc);
	return 0;
}

static void __exit DS18B20_dev_exit(void)
{	
	/*雜項(xiàng)設(shè)備注銷*/
	misc_deregister(&tiny4412_misc);
}
module_init(DS18B20_dev_init); 
module_exit(DS18B20_dev_exit);
MODULE_LICENSE("GPL");
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 溫度傳感器
    +關(guān)注

    關(guān)注

    48

    文章

    2991

    瀏覽量

    156787
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1866

    瀏覽量

    85934
  • DS18B20
    +關(guān)注

    關(guān)注

    10

    文章

    781

    瀏覽量

    81391
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DS18B20實(shí)時(shí)溫度傳感器中文資料

    DS18B20 是一種單總線數(shù)字溫度傳感器,它被廣泛應(yīng)用于各種領(lǐng)域,例如氣象監(jiān)測(cè)、室內(nèi)溫度控制、工業(yè)自動(dòng)化等。DS18B20 采用了單總線接口(One-Wire Interface),這意味著可以通過(guò)單個(gè)引腳與微控制器通信,大大簡(jiǎn)化了連接和布線
    發(fā)表于 02-28 17:02 ?0次下載

    基于FPGA的溫度傳感器(ds18b20)驅(qū)動(dòng)設(shè)計(jì)

    本篇主要討論基于FPGA的溫度傳感器(ds18b20驅(qū)動(dòng)設(shè)計(jì)---第一版 設(shè)計(jì)實(shí)現(xiàn):利用FPGA驅(qū)動(dòng)DS18b20,讀取到溫度數(shù)值顯示到數(shù)碼管上。 首先介紹
    的頭像 發(fā)表于 01-16 14:08 ?438次閱讀
    基于FPGA的溫度傳感器(<b class='flag-5'>ds18b20</b>)<b class='flag-5'>驅(qū)動(dòng)</b>設(shè)計(jì)

    《DNESP32S3使用指南-IDF版_V1.6》第二十九章 DS18B20實(shí)驗(yàn)

    和IO0連接圖如下圖所示。 圖29.2.3.2 WIRE_DQ和IO0連接圖 圖29.2.3.3 DS18B20開(kāi)發(fā)板連接的位置29.3 程序設(shè)計(jì)29.3.1 程序流程圖程序流程圖能幫助我們更好
    發(fā)表于 12-25 09:43

    CW32模塊使用 DS18B20溫度傳感器

    DS18B20數(shù)字溫度傳感器提供9位至12位精度的溫度測(cè)量,并具有非易失性用戶可編程上下觸發(fā)點(diǎn)報(bào)警功能。DS18B20通過(guò)單總線通信,根據(jù)定義,只需要一條數(shù)據(jù)線(和地線)即可與單片機(jī)通信。此外
    的頭像 發(fā)表于 11-26 17:47 ?383次閱讀
    CW32模塊使用 <b class='flag-5'>DS18B20</b>溫度傳感器

    DS18B20溫度傳感器的工作原理和硬件設(shè)計(jì)

    通過(guò)本文可以了解DS18B20溫度傳感器工作原理、硬件設(shè)計(jì)、DS18B20單總線接口驅(qū)動(dòng)編寫(xiě)
    的頭像 發(fā)表于 10-24 14:38 ?4662次閱讀
    <b class='flag-5'>DS18B20</b>溫度傳感器的工作原理和硬件設(shè)計(jì)

    ds18b20傳感器的使用方法

    Integrated開(kāi)發(fā)的一種數(shù)字溫度傳感器,它能夠提供9位到12位的溫度測(cè)量精度,測(cè)量范圍從-55°C到+125°C。這種傳感器非常適合用于需要精確溫度控制的應(yīng)用,如環(huán)境監(jiān)測(cè)、工業(yè)控制和家用電器。 工作原理 DS18B20傳感器使用一個(gè)精密的半導(dǎo)體溫度傳感器,通過(guò)內(nèi)部
    的頭像 發(fā)表于 10-18 14:52 ?1614次閱讀

    ds18b20溫度傳感器怎么接線

    DS18B20是一種廣泛使用的數(shù)字溫度傳感器,它基于1-Wire(一線)通信協(xié)議工作。這種傳感器因其高精度、易用性和低成本而受到歡迎。 DS18B20傳感器引腳介紹 DS18B20有三個(gè)主要的引腳
    的頭像 發(fā)表于 10-18 14:50 ?2347次閱讀

    ds18b20溫度傳感器如何使用

    DS18B20是一款廣泛使用的數(shù)字溫度傳感器,它具有高精度、低功耗和易于使用的特點(diǎn)。 DS18B20溫度傳感器簡(jiǎn)介 DS18B20是由Maxim Integrated(現(xiàn)為Analog
    的頭像 發(fā)表于 09-03 16:51 ?950次閱讀

    ds18b20溫度傳感器是什么類型

    DS18B20溫度傳感器是一種數(shù)字溫度傳感器,它屬于單總線(One-Wire)數(shù)字溫度傳感器類型。這意味著它僅需要一根數(shù)據(jù)線(加上電源線和地線,共三根線)就能與微處理器或其他數(shù)字電路進(jìn)行通信。這種
    的頭像 發(fā)表于 09-03 16:46 ?1438次閱讀

    ds18b20溫度傳感器和dht11的區(qū)別

    DS18B20和DHT11都是常用的溫度和濕度傳感器,它們?cè)谠S多項(xiàng)目和應(yīng)用中都有廣泛的應(yīng)用。 1. 工作原理 DS18B20 DS18B20是一種數(shù)字溫度傳感器,它使用1-Wire通信協(xié)議與微控制器
    的頭像 發(fā)表于 09-03 16:44 ?2526次閱讀

    STC32和STC8H驅(qū)動(dòng)DS18B20測(cè)溫串口發(fā)送數(shù)據(jù)

    STC32G12K128 和 STC8H8K64U 驅(qū)動(dòng) DS18B20 模塊,采集環(huán)境溫度并通過(guò)串口發(fā)送數(shù)據(jù)至電腦
    的頭像 發(fā)表于 06-27 16:27 ?1131次閱讀
    STC32和STC8H<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>DS18B20</b>測(cè)溫串口發(fā)送數(shù)據(jù)

    基于51單片機(jī)煙霧及DS18B20溫度檢測(cè)設(shè)計(jì)

    本資源內(nèi)容概要:? ? ? ?這是基于51單片機(jī)煙霧及DS18B20溫度檢測(cè)設(shè)計(jì)包含了電路圖源文件(Altiumdesigner軟件打開(kāi))、C語(yǔ)言程序源代碼(keil軟件打開(kāi))、元件清單(excel
    發(fā)表于 06-27 11:33 ?0次下載

    DS18B20溫度傳感器工作原理

    DS18B20以其獨(dú)特的工作原理、卓越的技術(shù)參數(shù)和廣泛的應(yīng)用場(chǎng)景,成為了市場(chǎng)的明星產(chǎn)品。 深入了解DS18B20的工作原理 DS18B20溫度傳感器的工作原理基于熱敏電阻的特性和數(shù)字信號(hào)轉(zhuǎn)換。其核心部件是一個(gè)熱敏電阻,它的電阻
    的頭像 發(fā)表于 06-19 16:01 ?1667次閱讀

    基于STC8H8K64U和DS18B20的溫度采集和LabVIEW上位機(jī)顯示

    之前通過(guò) STC 單片機(jī)和 DS18B20 實(shí)現(xiàn)了環(huán)境溫度采集并串口顯示,后面進(jìn)一步想要實(shí)現(xiàn)溫度的實(shí)時(shí)監(jiān)測(cè)和數(shù)據(jù)記錄保存,因此編寫(xiě)了 LabVIEW 程序,修改了部分單片機(jī)程序代碼。經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證
    發(fā)表于 04-08 12:28

    DS18B20溫度傳感器的優(yōu)缺點(diǎn)

    可編程寄存器:DS18B20內(nèi)部具有可編程寄存器,允許用戶對(duì)其進(jìn)行配置和控制,以滿足不同的應(yīng)用需求。
    發(fā)表于 04-04 11:39 ?4975次閱讀
    主站蜘蛛池模板: 无限资源在线完整高清观看1 | 亚洲 欧美 国产 综合久久 | 日日干日日操日日射 | 成人免费网址在线 | 伊人久久综合成人亚洲 | 午夜免费福利小电影 | 国产精品福利电影 | 国产午夜精AV在线麻豆 | wwwxx日本| 女人高潮久久久叫人喷水 | 亚洲中文无码永久免费 | 欧美日韩中文国产一区 | 超碰视频在线观看 | 爱如潮水3免费观看日本 | 收集最新中文国产中文字幕 | 欧美v1deossexo高清 | 友田真希息与子中文字幕 | 国产精品视频大全 | 精品国产在线观看福利 | 亚洲精品色情婷婷在线播放 | 久久久91精品国产一区二区 | 亚婷婷洲AV久久蜜臀无码 | 一级做a爰片久久毛片潮喷动漫 | 337p欧洲亚大胆精品 | 美女张开腿让我了一夜 | 亚洲成年男人的天堂网 | 在线二区 中文 无码 | 视频一区精品自拍亚洲 | 国产在线精品视频免费观看 | 一边亲着一面膜下的免费过程 | 免费三级播放器 | 亚洲AV精品乱码专区 | 成人综合在线视频免费观看完整版 | 久久 这里只精品 免费 | yellow免费| 欧美日韩高清一区 | 国产不卡视频在线观看 | 青柠在线视频 | 红桃传媒少妇人妻网站无码抽插 | 欧洲亚洲精品A片久久99果冻 | 日本久久和电影 |