温度采集与显示

目录

1.介绍DS18B20

2.导入DS18B20的代码

关于DS18B20的编写程序


数字温度传感器(DS18B20)

DS18B20是一款常用的高精度的单总线数字温度测量芯片。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。

传感器参数
测温范围为-55℃到+125℃,在-10℃到+85℃范围内误差为±0.4°。

返回16位二进制温度数值

主机和从机通信使用单总线,即使用单线进行数据的发送和接收

在使用中不需要任何外围元件,独立芯片即可完成工作。

掉电保护功能 DS18B20 内部含有 EEPROM ,通过配置寄存器可以设定数字转换精度和报警温度,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。

每个DS18B20都有独立唯一的64位-ID,此特性决定了它可以将任意多的DS18b20挂载到一根总线上,通过ROM搜索读取相应DS18B20的温度值

宽电压供电,电压2.5V~5.5V

DS18B20是一种数字温度传感器,由Maxim Integrated公司生产。它是一种单总线接口设备,使用1-Wire通信协议,可以通过单个数据线连接到微处理器或其他设备上。DS18B20可以测量-55°C到+125°C范围内的温度,精确度为±0.5°C。DS18B20还具有可编程分辨率(9位到12位),以及可配置的警报和上电自检功能。由于其易于使用和广泛应用,DS18B20是许多温度测量应用的理想选择,包括家用电器、汽车、医疗设备、气象站等。

传感器引脚及原理图

DS18B20传感器的引脚及封装图如下:

 

DS18B20高速缓存器
高速暂存器由9个字节组成

字节0~1 是温度存储器,用来存储转换好的温度。第0个字节存储温度低8位,第一个字节存储温度高8位
字节2~3 是用户用来设置最高报警和最低报警值(TH和TL)。
字节4 是配置寄存器,用来配置转换精度,可以设置为9~12 位。
字节5~7 保留位。芯片内部使用
字节8 CRC校验位。是64位ROM中的前56位编码的校验码。由CRC发生器产生

 

关于DS18B20的编写程序

首先要检查驱动DS18B20是否存在

//检查DS18B20是否存在
u8 ds18b20_check(void)
{
    
    
    u8 time_cnt = 0;
    
    while(DS18B20_PORT==1)   //等待DQ为低电平
    {
        
        Delay10us(1);
        time_cnt++;
        
        if(time_cnt >=20)  //time_cnt >=20 表明指定时间内未到回应信号
        {
            return 1;
        }
    }

然后我们要进行一个对DS18B20设定

	time_cnt=0;//清零时间计数
	while(DS18B20_PORT==0)//等待DQ为低电平
	{
		
		Delay10us(1);
		time_cnt++;
		
		if(time_cnt >=20)
		{
			break;
		}
	}
	
	if(time_cnt >=20)  //等待DQ为高电平
		{
			return 1;
		}
	return 0;
}

然后要对DS18B20进行一个读取和读取循环

//从DS18B20读取一个字节
u8 ds18b20_read_byte(void)
{
	u8 i=0;
	u8 dat=0;//保存8个位的字节
	
	for(i=0;i<8;i++)//循环8次,每次读取一位,且先读低位再读高位
	{
		u8 temp = ds18b20_read_bit();//把读取到的一个字节存到temp
		dat = (temp<<7)|(dat>>1);//左移7位 右移1位  先左移,再右移,最后与
	}
  return dat;
}

//写一个字节到DS18B20  
void ds18b20_write_byte(u8 dat)
{
	u8 i;
	
	for(i=0;i<8;i++)//循环8次,每次写一位,且先写低位再写高位
	{
		u8 temp = dat&0x01;//选择低位准备写入
		dat=dat>>1;//将次高位移到低位
		
		if(temp)
		{
			DS18B20_PORT=0;
			_nop_();_nop_();
			
			DS18B20_PORT=1;//维持高
			Delay10us(6);
		}
		else
		{
			DS18B20_PORT=0;
			Delay10us(6);
			
			DS18B20_PORT=1;
			_nop_();_nop_();
		}
	}
}

最后我们就只要初始化DS18B20的端口和检测DS的存在

//初始化DS18B20的IO口 DQ 同时检测DS的存在
u8 ds18b20_init(void)
{
	ds18b20_reset();//拉低芯片
	return ds18b20_check();//等待芯片回应
	
}

//从ds18b20得到温度值
float ds18b20_read_temperture(void)
{
	float temp;
	
	u8 dath=0;//高字节
	u8 datl=0;//低字节
	u16 value=0;//合并为16位数据
	
	ds18b20_reset();//发送复位信号
	ds18b20_check();//等待芯片回应信号
	ds18b20_write_byte(0xcc);//跳过芯片寻址
	ds18b20_write_byte(0x44);//跳过芯片寻址
	
	ds18b20_reset();//发送复位信号
	ds18b20_check();//等待芯片回应信号
	ds18b20_write_byte(0xcc);//跳过芯片寻址
	ds18b20_write_byte(0xbe);//读取温度指令
	
	datl=ds18b20_read_byte();//读低字节
	dath=ds18b20_read_byte();//读高字节	
	value=(dath<<8)+datl;//合并为16位数据
	
	if((value&0xf800)==0xf800)//判断符号位,负温度
	{
		value=(~value)+1; //数据取反再加1
		temp=value*(-0.0625);//乘以精度
	}
	else //正温度
	{
		temp=value*0.0625;
	}
	return temp;
}

总结

以下是DS18B20的主要特点:

  • 数字接口:DS18B20使用数字接口进行通信,使其易于与微控制器和其他数字电路集成。

  • 高精度:该传感器提供高精度温度测量,精度为±0.5℃(-10℃至+85℃范围内),并可以提供更高的精度。

  • 低功耗:DS18B20具有低功耗特性,在待机模式下只需使用1微安的电流,因此非常适合用于低功耗应用。

  • 多点连接:传感器可以通过单个总线连接多个DS18B20传感器,从而实现多点测量。

  • 高可靠性:DS18B20传感器具有高度可靠性和长寿命,可在极端温度和环境条件下工作。

  • 通过该项目的实现,了解掌握了DS18B20的使用方法和特点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值