国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL)

這篇具有很好參考價值的文章主要介紹了017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、 模塊介紹

1.1 簡介

1.2 主要特點

1.3 存儲器介紹

1.4 時序

1.5 命令

1.5.1 命令大全? ?

1.5.2 命令使用

1.5.3 使用示例

1.6 原理圖

二、 驅(qū)動程序

三、 應(yīng)用程序

四、 測試


一、 模塊介紹

1.1 簡介

????????DS18B20 溫度傳感器具有線路簡單、體積小的特點,用來測量溫度非常簡單,在一根通信線上可以掛載多個 DS18B20 溫度傳感器。用戶可以通過編程實現(xiàn)9~12 位的溫度讀數(shù),每個 DS18B20 有唯一的 64 位序列號,保存在 rom 中,因此一條總線上可以掛載多個 DS18B20。

1.2 主要特點

■采用單總線接口僅需一個端口引腳進(jìn)行通信
■每顆芯片具有全球唯一的64位的序列號
■具有多點分布式測溫功能
■無需外圍元器件
■可通過數(shù)據(jù)線供電;供電電壓范圍為2.5V∽5.5V
■測度測量范圍為-55°C to +125°C(-67°F to +257°F)
■在-10°C∽70°C范圍內(nèi)精確度為±0.4°C
■溫度分辨率9-12位可選
■最高12位精度下,溫度轉(zhuǎn)換速度小于400ms
■具有用戶自定義的非易失性溫度報警設(shè)置
■報名搜索命令識別并標(biāo)識超過程序設(shè)定溫度的器件
■超強靜電保護能力:HBM 8000V MM 800V
■可提供貼片的MSOP8封裝和3腳的TO-90封裝
■應(yīng)用包括溫度控制、工業(yè)系統(tǒng)、消費品、糧情測溫、溫度計或任何感熱系統(tǒng)

1.3 存儲器介紹

????????以前玩這個的時候都忽略這里了,就看時序圖和數(shù)據(jù)幀了。

????????DS18B20 內(nèi)部有個 64 位只讀存儲器( ROM)和 64 位配置存儲器( SCRATCHP)。64 位只讀存儲器( ROM)包含序列號等,具體格式如下圖

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

????????低八位用于 CRC 校驗,中間 48 位是 DS18B20 唯一序列號,高八位是該系列產(chǎn)品系列號(固定為 28h)。因此,根據(jù)每個 DS18B20 唯一的序列號,可以實現(xiàn)一條總線上可以掛載多個 DS18B20 時,獲取指定 DS18B20 的溫度信息。

????????64 位配置存儲器( SCRATCHP)由 9 個 Byte 組成,包含溫度數(shù)據(jù)、配置信息等,具體格式如下圖:

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

? Byte[0:1]:溫度值。也就是當(dāng)我們發(fā)出一個測量溫度的命令之后,還需
要發(fā)送一個讀內(nèi)存的命令才能把溫度值讀取出來。
? Byte[2:3]: TL 是低溫閾值設(shè)置, TH 是高溫閾值設(shè)置。當(dāng)溫度低于/超過
閾值,就會報警。 TL、 TH 存儲在 EEPROM 中,數(shù)據(jù)在掉電時不會丟失;
? Byte4:配置寄存器。用于配置溫度精度為 9、 10、 11 或 12 位。配置寄存
器也存儲在 EEPROM 中,數(shù)據(jù)在掉電時不會丟失;
? Byte[5:7]:廠商預(yù)留;
? Byte[8]: CRC 校驗碼。
?

1.4 時序

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

上面這些資料來源于這位老前輩的畢業(yè)設(shè)計翻譯,翻譯的挺好就是有點糊。

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

① ① 初始化時序
類似前面的 DHT11,主機要跟 DS18B20 通信,首先需要發(fā)出一個開始信號。
深黑色線表示由主機驅(qū)動信號,淺灰色線表示由 DS18B20 驅(qū)動信號。
最開始時引腳是高電平,想要開始傳輸信號,
a) 必須要拉低至少 480us,這是復(fù)位信號;
b) 然后拉高釋放總線,等待 15~60us 之后,
c) 如果 GPIO 上連有 DS18B20 芯片,它會拉低 60~240us。
如果主機在最后檢查到 60~240us 的低脈沖,則表示 DS18B20 初始化成功
② 寫時序
? 如果寫 0,拉低至少 60us(寫周期為 60-120us)即可;
? 如果寫 1,先拉低至少 1us,然后拉高,整個寫周期至少為 60us 即可
③ 讀時序
? 主機先拉低至少 1us,隨后讀取電平,如果為 0,即讀到的數(shù)據(jù)是 0,如果
為 1,即可讀到的數(shù)據(jù)是 1。
? 整個過程必須在 15us 內(nèi)完成, 15us 后引腳都會被拉高
?

1.5 命令

(這塊的圖直接用韋東山老師的了,原來的老哥翻譯的這個圖片太馬賽克了。但是韋老師的也不太好,后面有水印影響觀感。)

1.5.1 命令大全? ?

?????現(xiàn)在我們知道怎么發(fā) 1 位數(shù)據(jù),收 1 位數(shù)據(jù)。發(fā)什么數(shù)據(jù)才能得到溫度值,這需要用到“命令”。DS18B20 中有兩類命令: ROM 命令、功能命令,列表如下:
017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

1.5.2 命令使用

DS18B20 芯片手冊中有 ROM 命令、功能命令的流程圖,先貼出來,下一小節(jié)再舉例。
017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

1.5.3 使用示例

????????總線上只一個 DS18B20 設(shè)備時,根據(jù)下表發(fā)送命令、讀取數(shù)據(jù)。 因為只有一個 DS18B20,所以不需要選擇設(shè)備,發(fā)出“ Skip ROM”命令。 然后發(fā)戶“ ConvertT”命令啟動溫度轉(zhuǎn)換;等待溫度轉(zhuǎn)換成功后,要讀數(shù)據(jù)前,也要發(fā)出“ Skip ROM”命令。 下表列得很清楚:

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

????????總線上有多個 DS18B20 設(shè)備時,根據(jù)下表發(fā)送命令、讀取數(shù)據(jù)。 首先肯定是要選中指定設(shè)備:使用“ Match ROM”命令發(fā)出 ROM Code 來選擇中設(shè)備; 然后發(fā)戶“Convert T”命令啟動溫度轉(zhuǎn)換; 等待溫度轉(zhuǎn)換成功后,要讀數(shù)據(jù)前,也要發(fā)出“Match ROM”命令、 ROM Code。 下表列得很清楚:

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

1.6 原理圖

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

二、 驅(qū)動程序

(今天破了一個案,dht11和ds18b20一點都不一樣,以前一直沒深入了解過ds18b20看來小覷它了)

#include "acpi/acoutput.h"
#include "asm-generic/errno-base.h"
#include "asm-generic/gpio.h"
#include "asm/gpio.h"
#include "asm/uaccess.h"
#include <linux/module.h>
#include <linux/poll.h>

#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/miscdevice.h>
#include <linux/kernel.h>
#include <linux/major.h>
#include <linux/mutex.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/stat.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/kmod.h>
#include <linux/gfp.h>
#include <linux/gpio/consumer.h>
#include <linux/platform_device.h>
#include <linux/of_gpio.h>
#include <linux/of_irq.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/slab.h>
#include <linux/fcntl.h>
#include <linux/timer.h>

struct gpio_desc{
	int gpio;
	int irq;
    char *name;
    int key;
	struct timer_list key_timer;
} ;

static struct gpio_desc gpios[] = {
    {115, 0, "ds18b20", },
};

/* 主設(shè)備號                                                                 */
static int major = 0;
static struct class *gpio_class;

static spinlock_t ds18b20_spinlock;


static void ds18b20_udelay(int us)
{
	u64 time = ktime_get_ns();
	while (ktime_get_ns() - time < us*1000);
}

static int ds18b20_reset_and_wait_ack(void)
{
	int timeout = 100;

	gpio_set_value(gpios[0].gpio, 0);
	ds18b20_udelay(480);

	gpio_direction_input(gpios[0].gpio);

	/* 等待ACK */
	while (gpio_get_value(gpios[0].gpio) && timeout--)
	{
		ds18b20_udelay(1);
	}

	if (timeout == 0)
		return -EIO;

	/* 等待ACK結(jié)束 */
	timeout = 300;
	while (!gpio_get_value(gpios[0].gpio) && timeout--)
	{
		ds18b20_udelay(1);
	}
	if (timeout == 0)
		return -EIO;
	
	return 0;

}

static void ds18b20_send_cmd(unsigned char cmd)
{
	int i;
	
	gpio_direction_output(gpios[0].gpio, 1);

	for (i = 0; i < 8; i++)
	{
		if (cmd & (1<<i)) 
		{
			/* 發(fā)送1 */
			gpio_direction_output(gpios[0].gpio, 0);
			ds18b20_udelay(2);
			gpio_direction_output(gpios[0].gpio, 1);
			ds18b20_udelay(60);
		}
		else
		{
			/* 發(fā)送0 */
			gpio_direction_output(gpios[0].gpio, 0);
			ds18b20_udelay(60);		
			gpio_direction_output(gpios[0].gpio, 1);
		}
	}
}

static void ds18b20_read_data(unsigned char *buf)
{
	int i;
	unsigned char data = 0;

	gpio_direction_output(gpios[0].gpio, 1);
	for (i = 0; i < 8; i++)
	{
		gpio_direction_output(gpios[0].gpio, 0);
		ds18b20_udelay(2);
		gpio_direction_input(gpios[0].gpio);
		ds18b20_udelay(15);
		if (gpio_get_value(gpios[0].gpio))
		{
			data |= (1<<i);
		}
		ds18b20_udelay(50);
		gpio_direction_output(gpios[0].gpio, 1);
	}

	buf[0] = data;
}

/********************************************************/  
/*DS18B20的CRC8校驗程序*/  
/********************************************************/   
/* 參考: https://www.cnblogs.com/yuanguanghui/p/12737740.html */   
static unsigned char calcrc_1byte(unsigned char abyte)   
{   
	unsigned char i,crc_1byte;     
	crc_1byte=0;                //設(shè)定crc_1byte初值為0  
	for(i = 0; i < 8; i++)   
	{   
		if(((crc_1byte^abyte)&0x01))   
		{   
			crc_1byte^=0x18;     
			crc_1byte>>=1;   
			crc_1byte|=0x80;   
		}         
		else     
			crc_1byte>>=1;   

		abyte>>=1;         
	}   
	return crc_1byte;   
}

/* 參考: https://www.cnblogs.com/yuanguanghui/p/12737740.html */   
static unsigned char calcrc_bytes(unsigned char *p,unsigned char len)  
{  
	unsigned char crc=0;  
	while(len--) //len為總共要校驗的字節(jié)數(shù)  
	{  
		crc=calcrc_1byte(crc^*p++);  
	}  
	return crc;  //若最終返回的crc為0,則數(shù)據(jù)傳輸正確  
}  


static int ds18b20_verify_crc(unsigned char *buf)
{
    unsigned char crc;

	crc = calcrc_bytes(buf, 8);

    if (crc == buf[8])
		return 0;
	else
		return -1;
}

static void ds18b20_calc_val(unsigned char ds18b20_buf[], int result[])
{
	unsigned char tempL=0,tempH=0;
	unsigned int integer;
	unsigned char decimal1,decimal2,decimal;

	tempL = ds18b20_buf[0]; //讀溫度低8位
	tempH = ds18b20_buf[1]; //讀溫度高8位

	if (tempH > 0x7f)      							//最高位為1時溫度是負(fù)
	{
		tempL    = ~tempL;         				    //補碼轉(zhuǎn)換,取反加一
		tempH    = ~tempH+1;      
		integer  = tempL/16+tempH*16;      			//整數(shù)部分
		decimal1 = (tempL&0x0f)*10/16; 			//小數(shù)第一位
		decimal2 = (tempL&0x0f)*100/16%10;			//小數(shù)第二位
		decimal  = decimal1*10+decimal2; 			//小數(shù)兩位
	}
	else
	{
		integer  = tempL/16+tempH*16;      				//整數(shù)部分
		decimal1 = (tempL&0x0f)*10/16; 					//小數(shù)第一位
		decimal2 = (tempL&0x0f)*100/16%10;				//小數(shù)第二位
		decimal  = decimal1*10+decimal2; 				//小數(shù)兩位
	}
	result[0] = integer;
	result[1] = decimal;
}

/* 實現(xiàn)對應(yīng)的open/read/write等函數(shù),填入file_operations結(jié)構(gòu)體                   */
static ssize_t ds18b20_read (struct file *file, char __user *buf, size_t size, loff_t *offset)
{
	unsigned long flags;
	int err;
	unsigned char kern_buf[9];
	int i;
	int result_buf[2];

	if (size != 8)
		return -EINVAL;

	/* 1. 啟動溫度轉(zhuǎn)換 */
	/* 1.1 關(guān)中斷 */
	spin_lock_irqsave(&ds18b20_spinlock, flags);

	/* 1.2 發(fā)出reset信號并等待回應(yīng) */
	err = ds18b20_reset_and_wait_ack();
	if (err)
	{
		spin_unlock_irqrestore(&ds18b20_spinlock, flags);
		printk("ds18b20_reset_and_wait_ack err\n");
		return err;
	}

	/* 1.3 發(fā)出命令: skip rom, 0xcc */
	ds18b20_send_cmd(0xcc);

	/* 1.4 發(fā)出命令: 啟動溫度轉(zhuǎn)換, 0x44 */
	ds18b20_send_cmd(0x44);

	/* 1.5 恢復(fù)中斷 */
	spin_unlock_irqrestore(&ds18b20_spinlock, flags);

	/* 2. 等待溫度轉(zhuǎn)換成功 : 可能長達(dá)1s */
	set_current_state(TASK_INTERRUPTIBLE);
	schedule_timeout(msecs_to_jiffies(1000));

	/* 3. 讀取溫度 */
	/* 3.1 關(guān)中斷 */
	spin_lock_irqsave(&ds18b20_spinlock, flags);

	/* 3.2 發(fā)出reset信號并等待回應(yīng) */
	err = ds18b20_reset_and_wait_ack();
	if (err)
	{
		spin_unlock_irqrestore(&ds18b20_spinlock, flags);
		printk("ds18b20_reset_and_wait_ack second err\n");
		return err;
	}
	/* 3.3 發(fā)出命令: skip rom, 0xcc */
	ds18b20_send_cmd(0xcc);

	/* 3.4 發(fā)出命令: read scratchpad, 0xbe */
	ds18b20_send_cmd(0xbe);

	/* 3.5 讀9字節(jié)數(shù)據(jù) */
	for (i = 0; i < 9; i++)
	{
		ds18b20_read_data(&kern_buf[i]);
	}

	/* 3.6 恢復(fù)中斷 */
	spin_unlock_irqrestore(&ds18b20_spinlock, flags);

	/* 3.7 計算CRC驗證數(shù)據(jù) */
	err = ds18b20_verify_crc(kern_buf);
	if (err)
	{
		printk("ds18b20_verify_crc err\n");
		return err;
	}

	/* 4. copy_to_user */
	ds18b20_calc_val(kern_buf, result_buf);
	
	err = copy_to_user(buf, result_buf, 8);
	return 8;
}


/* 定義自己的file_operations結(jié)構(gòu)體                                              */
static struct file_operations gpio_key_drv = {
	.owner	 = THIS_MODULE,
	.read    = ds18b20_read,
};


/* 在入口函數(shù) */
static int __init ds18b20_init(void)
{
    int err;
    int i;
    int count = sizeof(gpios)/sizeof(gpios[0]);
    
	printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);

	spin_lock_init(&ds18b20_spinlock);
	
	for (i = 0; i < count; i++)
	{		
		err = gpio_request(gpios[i].gpio, gpios[i].name);
		gpio_direction_output(gpios[i].gpio, 1);
	}

	/* 注冊file_operations 	*/
	major = register_chrdev(0, "100ask_ds18b20", &gpio_key_drv);  /* /dev/gpio_desc */

	gpio_class = class_create(THIS_MODULE, "100ask_ds18b20_class");
	if (IS_ERR(gpio_class)) {
		printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
		unregister_chrdev(major, "100ask_ds18b20");
		return PTR_ERR(gpio_class);
	}

	device_create(gpio_class, NULL, MKDEV(major, 0), NULL, "myds18b20"); /* /dev/myds18b20 */
	
	return err;
}

/* 有入口函數(shù)就應(yīng)該有出口函數(shù):卸載驅(qū)動程序時,就會去調(diào)用這個出口函數(shù)
 */
static void __exit ds18b20_exit(void)
{
    int i;
    int count = sizeof(gpios)/sizeof(gpios[0]);
    
	printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);

	device_destroy(gpio_class, MKDEV(major, 0));
	class_destroy(gpio_class);
	unregister_chrdev(major, "100ask_ds18b20");

	for (i = 0; i < count; i++)
	{
		gpio_free(gpios[i].gpio);
	}
}


/* 7. 其他完善:提供設(shè)備信息,自動創(chuàng)建設(shè)備節(jié)點                                     */

module_init(ds18b20_init);
module_exit(ds18b20_exit);

MODULE_LICENSE("GPL");


三、 應(yīng)用程序


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <poll.h>
#include <signal.h>

static int fd;

/*
 * ./button_test /dev/myds18b20
 *
 */
int main(int argc, char **argv)
{
	int buf[2];
	int ret;

	int i;
	
	/* 1. 判斷參數(shù) */
	if (argc != 2) 
	{
		printf("Usage: %s <dev>\n", argv[0]);
		return -1;
	}


	/* 2. 打開文件 */
	fd = open(argv[1], O_RDWR | O_NONBLOCK);
	if (fd == -1)
	{
		printf("can not open file %s\n", argv[1]);
		return -1;
	}

	while (1) 
	{
		if (read(fd, buf, 8) == 8)
			printf("get ds18b20: %d.%d\n", buf[0], buf[1]);
		else
			printf("get ds18b20: -1\n");
		
		sleep(5);
	}
	
	close(fd);
	
	return 0;
}


四、 測試

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL),# 基于鴻蒙的芯片評估板自檢系統(tǒng),linux,嵌入式,驅(qū)動開發(fā),ds18b20

注意一下這次設(shè)備的名字前面有個my剩下的就是老樣子,暫時先直接用韋老師的后面我在按需修改。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-848987.html

到了這里,關(guān)于017——DS18B20驅(qū)動開發(fā)(基于I.MX6uLL)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • STM32F1使用HAL庫驅(qū)動DS18B20

    STM32F1使用HAL庫驅(qū)動DS18B20

    目錄 DS18B20概述 工程配置 ?命令手冊 單總線協(xié)議 ?初始化時序 ?寫時序 讀時序 讀取溫度 驅(qū)動附錄 ?DS18B20是一款單總線(one wire)芯片,因此其DQ引腳與單片機相連的IO口既要是輸入也要是輸出,cubeMX的初始化引腳設(shè)置只能選擇其一,這里我們使用手動配置引腳。 先用cubeMX生

    2024年02月04日
    瀏覽(22)
  • 基于51單片機的DS18B20溫度顯示

    基于51單片機的DS18B20溫度顯示

    本講內(nèi)容: ? ? ? 了解溫度傳感器DS18B20的使用,并通過一個例程展示溫度傳感器DS18B20測溫過程。 DS18B20簡介: ? ? ? DS18B20 是單線數(shù)字溫度傳感器,即“一線器件”,其具有獨特的優(yōu)點: ? ? (1)采用單總線的接口方式 與微處理器連接時 僅需要一條口線即可實現(xiàn)微處理器

    2024年02月12日
    瀏覽(29)
  • 基于FPGA的ds18b20溫度傳感器使用

    基于FPGA的ds18b20溫度傳感器使用

    ds18b20是常用的數(shù)字溫度傳感器,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。 1.特點 ds18b20單線數(shù)字溫度傳感器具有獨特的優(yōu)點: ( 1 )采用單總線的接口方式,與微處理器連接時僅需要一條線即可實現(xiàn)微處理器與DS18B20的雙向通訊。單總線具有經(jīng)濟性好,抗干

    2023年04月08日
    瀏覽(28)
  • ESP32設(shè)備驅(qū)動-OLED顯示單個或多個DS18B20傳感器數(shù)據(jù)

    在本文中,我們將介紹如何ESP32驅(qū)動單個或多個DS18B20傳感器,并將DS18B20傳感器數(shù)據(jù)在OLE中顯示。 DS18B20 是一種溫度傳感器,本質(zhì)上是單線可編程的。 它廣泛用于測量存在于硬環(huán)境中的化學(xué)溶液和物質(zhì)的溫度。 使用此傳感器的優(yōu)勢之一是我們只需要 ESP 板上的一個引腳即可傳

    2024年02月07日
    瀏覽(22)
  • 基于51單片機多路溫度檢測proteus仿真 ds18b20

    基于51單片機多路溫度檢測proteus仿真 ds18b20

    本設(shè)計是基于51單片機多路溫度檢測proteus仿真_ds18b20(仿真+程序+原理圖) 仿真圖proteus 7.8 程序編譯器:keil 4/keil 5 編程語言:C語言 設(shè)計編號:C0042 功能說明: 通過對多路DS18B20溫度傳感器的數(shù)據(jù)采集,實現(xiàn)8路/4路溫度采集并將數(shù)值顯示在LCD顯示屏上; 通過按鍵設(shè)置溫度報警

    2024年02月12日
    瀏覽(25)
  • 基于51單片機的DS18B20溫度控制加熱降溫系統(tǒng)設(shè)計

    基于51單片機的DS18B20溫度控制加熱降溫系統(tǒng)設(shè)計

    仿真圖:proteus8.9以上 程序代碼:KEIL4/KEIL5 原理圖:AD 設(shè)計編號:A0007 結(jié)合實際情況,基于51單片機設(shè)計一個排隊叫號系統(tǒng)設(shè)計。該系統(tǒng)應(yīng)滿足的功能要求為: 系統(tǒng)由51單片機、DS18B20溫度傳感器、LCD1602液晶顯示屏、繼電器、風(fēng)扇、加熱膜、按鍵、蜂鳴器組成。 可實現(xiàn)以下基本功能

    2023年04月09日
    瀏覽(29)
  • DS18B20與單片機的通信、DS18B20采集溫度、MODBUS協(xié)議、練習(xí)框架

    DS18B20與單片機的通信、DS18B20采集溫度、MODBUS協(xié)議、練習(xí)框架

    單總線數(shù)字溫度計 異步的半雙工的串行通信 測量范圍從-55℃ ~ +125℃,增量值為0.5℃ 要用DS18B20采集溫度,就要實現(xiàn)與單片機之間的通信,因此有兩個問題 Bus master active low:主機執(zhí)行低電平 DS1820 active low:DS18B20執(zhí)行低電平 Both bus master and DS1820 active low:全都釋放低電平 Resis

    2024年04月16日
    瀏覽(26)
  • [stc89c52] DS18B20基于單總線協(xié)議的溫度測量

    [stc89c52] DS18B20基于單總線協(xié)議的溫度測量

    1.定義:主機和從機用一根總線進(jìn)行通信,是一種半雙工的通信方式,單線=時鐘線+數(shù)據(jù)線+控制線( +電源線)。理想狀況下一條總線上的從器件數(shù)量幾乎不受數(shù)量限制。 2.特點:這是由達(dá)拉斯半導(dǎo)體公司推出的一項通信技術(shù)。它采用單根信號線,既可傳輸時鐘,又能傳輸數(shù)據(jù)

    2024年02月10日
    瀏覽(24)
  • DS18B20測量溫度

    DS18B20測量溫度

    一般在使用DS18B20時會按照以下步驟進(jìn)行溫度轉(zhuǎn)換并讀?。?1、主機發(fā)送復(fù)位脈沖 2、DS18B20響應(yīng) 3、發(fā)送0xCC命令跳過ROM命令 4、發(fā)送功能命令 5、發(fā)送功能命令0x44啟動溫度轉(zhuǎn)換 6、判斷溫度轉(zhuǎn)換是否完成(為讀取1Bit數(shù)據(jù)為1表示完成) 7、下一個初始化序列開始讀取溫度 8、然后按

    2023年04月08日
    瀏覽(27)
  • DS18B20使用說明

    DS18B20使用說明

    基礎(chǔ)介紹引腳介紹 DS18B20是單總線協(xié)議的典型代表,同時也是單總線協(xié)議最廣泛的應(yīng)用場景,是常用的數(shù)字溫度傳感器,其輸出的是數(shù)字信號。具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場合。 DS18B20 的溫

    2024年02月09日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包