您的位置 首页 > 问答

ds18b20和dht11的区别(dht11型号的元器件怎么样在立创商城中能找到这个元器件吗)

[本站 ds18b20和dht11的区别(dht11型号的元器件怎么样在立创商城中能找到这个元器件吗)dht11型号的元器件怎么样在立创商城中能找到这个元器件吗SHT11和DHT11的区别52单片机万年历把18b20换成dht11程序怎么改一、DHT11基础储备D…

ds18b20和dht11的区别(dht11型号的元器件怎么样在立创商城中能找到这个元器件吗)

ds18b20和dht11的区别(dht11型号的元器件怎么样在立创商城中能找到这个元器件吗)

  • dht11型号的元器件怎么样在立创商城中能找到这个元器件吗
  • SHT11和DHT11的区别
  • 52单片机万年历把18b20换成dht11 程序怎么改

一、DHT11基础储备
DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,内部由一个 8 位单片机控制一个电阻式感湿元件和一个 NTC
测温元件。DHT11 虽然也是采用单总线协议,但是该协议与 DS18B20 的单总线协议稍微有些不同之处。
相比于 DS18B20 只能测量温度,DHT11 既能检测温度又能检测湿度,不过 DHT11 的精度和测量范围都要低于
DS18B20,其温度测量范围为 0~50℃,误差在±2℃;湿度的测量范围为 20%~90%RH(Relative Humidity
相对湿度—指空气中水汽压与饱和水汽压的百分比),误差在±5%RH。DHT11 电路很简单,只需要将 Dout 引脚连接单片机的一个 I/O
即可,不过该引脚需要上拉一个 5K 的电阻,DHT11 的供电电压为 3~5.5V
在这里插入图片描述
二、协议及数据格式
DHT11 采用单总线协议与单片机通信,单片机发送一次复位信号后,DHT11 从低功耗模式转换到高速模式,等待主机复位结束后,DHT11
发送响应信号,并拉高总线准备传输数据。一次完整的数据为 40bit,按照高位在前,低位在后的顺序传输
数据格式为:8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和,一共 5
字节(40bit)数据。由于 DHT11 分辨率只能精确到个位,所以小数部分是数据全为 0。校验和为前 4
个字节数据相加,校验的目的是为了保证数据传输的准确性。
DHT11 只有在接收到开始信号后才触发一次温湿度采集,如果没有接收到主机发送复位信号,DHT11
不主动进行温湿度采集。当数据采集完毕且无开始信号后,DHT11 自动切换到低速模式。
注意:由于 DHT11 时序要求非常严格,所以在操作时序的时候,为了防止中断干扰总线时序,先关闭总中断,操作完毕后再打开总中断。
三、操作时序
1、 主机发送复位信号
DHT11 的初始化过程同样分为复位信号和响应信号。
首先主机拉低总线至少 18ms,然后再拉高总线,延时 20~40us,取中间值 30us,此时复位信号发送完毕。
在这里插入图片描述
2、DHT11 发送响应信号
DHT11 检测到复位信号后,触发一次采样,并拉低总线 80us 表示响应信号,告诉主机数据已经准备好了;然后 DHT11 拉高总线
80us,之后开始传输数据。如果检测到响应信号为高电平,则 DHT11 初始化失败,请检查线路是否连接正常。
当复位信号发送完毕后,如果检测到总线被拉低,就每隔 1us 计数一次,直至总线拉高,计算低电平时间;当总线被拉高后重新计数检测 80us
的高电平。如果检测到响应信号之后的80us 高电平,就准备开始接收数据。实际上 DHT11 的响应时间并不是标准的 80us,往往存在误差,当响应时间处于
20~100us 之间时就可以认定响应成功。
3、数据传输
DHT11 在拉高总线 80us 后开始传输数据。每 1bit 数据都以 50us 低电平时隙开始,告诉主机开始传输一位数据了。DHT11
以高电平的长短定义数据位是 0 还是 1,当 50us 低电平时隙过后拉高总线,高电平持续 26~28us 表示数据“0”;持续 70us
表示数据“1”。
当 最后 1bit 数据传送完毕后,DHT11 拉低总线 50us,表示数据传输完毕,随后总线由上拉电阻拉高进入空闲状态。
在这里插入图片描述
4、区分数据0/1的巧法
还是像检测响应时间那样计算高电平持续时间那就太麻烦了!!!
数据“0”的高电平持续 26~28us,数据“1”的高电平持续70us,每一位数据前都有 50us 的起始时隙。如果我们取一个中间值 40us
来区分数据“0”和数据“1”的时隙。
当数据位之前的 50us 低电平时隙过后,总线肯定会拉高,此时延时 40us 后检测总线状态,如果为高,说明此时处于 70us
的时隙,则数据为“1”;如果为低,说明此时处于下一位数据 50us 的开始时隙,那么上一位数据肯定是“0”。
为什么延时 40us?
由于误差的原因,数据“0”时隙并不是准确 26~28us,可能比这短,也可能比这长。
当数据“0”时隙大于 26~28us 时,
如果延时太短,无法判断当前处于数据“0”的时隙还是数据“1”的时隙;
如果延时太长,则会错过下一位数据前的开始时隙,导致检测不到后面的数据
型号:DHT11
类别:数字温湿度传感器
供应商:拍明芯城

SHT11和DHT11的区别为:湿敏部件不同、包含不同、功能不同。

一、湿敏部件不同

1、SHT11:SHT11核心部件采用湿敏电容,成本高,稳定性好。

2、DHT11:DHT11核心部件采用湿敏电阻,其成本低,稳定性差。

二、包含不同

1、SHT11:SHT11包括一个湿敏元件和一个用能隙材料制成的温度敏感元件。

2、DHT11:DHT11包括一个湿敏元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

三、功能不同

1、SHT11:SHT11可以提供温度补偿的湿度测量值和高质量的露点计算功能。

2、DHT11:DHT11可以提供温度补偿的湿度测量值,但不能提供高质量的露点计算功能。

sbit DQ1= P3^7 ; //车内探头
sbit DQ2= P1^1 ; //车外探头
sbit AC_CTRL = P2^2; //AC空调控制端。1为开启
/*------------------------------------------------
定义区
------------------------------------------------*/
xdata signed int Memory_buf2={0,0,0,0,0};//xdata 前2分钟记忆值:车外湿度,车外温度,车内湿度,车内温度,电压
xdata signed int Memory_buf1={0,0,0,0,0};//xdata 前1分钟记忆值:车外湿度,车外温度,车内湿度,车内温度,电压
unsigned int U16RH_data1,U16T_data1, U16RH_data2,U16T_data2,Voltage;
bit Minus_Flag1,Minus_Flag2,TIMEshow; //定义温度符号位 时间闪烁的:
/***************************************************************************
串行总线 收发信号检测,数据读取 车内探头
***************************************************************************/
unsigned char COM1(void)
{unsigned char i,U8temp,U8comdata,U8FLAG;
for(i=0;i《8;i++)
{
U8FLAG=2;
while((!DQ1)&&U8FLAG++);
delay40us();
U8temp=0;
if(DQ1)U8temp=1;//延时40us后 如果仍为高电平则数据为1 否则为0
U8FLAG=2;
while((DQ1)&&U8FLAG++);
if(U8FLAG==1)break;
U8comdata《《=1; U8comdata|=U8temp; //整合数据
}
return(U8comdata);
}
/*------------------------------------------------
读取温、湿度车内探头
------------------------------------------------*/
void RH1(void)
{
unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8temp,U8FLAG;
unsigned char U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
DQ1=0;delay100us(5); //主机拉低总线 至少500us
DQ1=1; delay40us(); //总线由上拉电阻拉高 主机延时20us-40us
if(!DQ1) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
{
U8FLAG=2;
while((!DQ1)&&U8FLAG++); //判断从机是否发出 80us 的低电平响应信号是否结束
U8FLAG=2;
while((DQ1)&&U8FLAG++); //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
//数据接收状态
U8RH_data_H_temp=COM1(); //读湿度高8位
U8RH_data_L_temp=COM1(); //读湿度低8位
U8T_data_H_temp =COM1(); //读温度高8位
U8T_data_L_temp =COM1(); //读温度低8位
U8checkdata_temp=COM1(); //读校验数据
DQ1=1; //释放总线
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); //数据校验
if(U8temp==U8checkdata_temp) //如果数据读取无误
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H = U8T_data_H_temp;
U8T_data_L = U8T_data_L_temp;
if(U8T_data_H&0x80)//如果温度高8位首位为1 则为负温度
{Minus_Flag1=1;U8T_data_H = U8T_data_H-0x80;}
else
{Minus_Flag1=0;U8T_data_H = U8T_data_H;}
U16RH_data1=(U8RH_data_H*256)|U8RH_data_L;
U16T_data1 = (U8T_data_H*256)|U8T_data_L;
}
}
}
}
这是我正在用的程序的一部分,用的是1T的单片机,给你参考一下吧。晶体是12M的,别的地方你基本可以不改,主要注意好延时的时间一定要参照备注

ds18b20和dht11的区别(dht11型号的元器件怎么样在立创商城中能找到这个元器件吗)

标签:数据   总线   信号   湿度

本文来自网络,不代表94汽车车网立场,所有(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者。若您的权利被侵害,请联系 56325386@qq.com 删除。转载请注明出处:https://94che.com/qc/147854.html

发表回复

您的电子邮箱地址不会被公开。

返回顶部