logo资料库

DHT11(芯片资料).pdf

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
奥松电子有限公司 www.aosong.com DHT11 数字湿温度传感器的原理和应用范例 概述:DHT11 是广州奥松有限公司生产的一款湿温度一体化的数字传感器。 该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位 单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿 度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用 校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电 源电压下,工作平均最大电流 0.5mA。 性能指标和特性如下: 工作电压范围:3.5V-5.5V 工作电流 :平均 0.5mA 湿度测量范围:20-90%RH 温度测量范围:0-50℃ 湿度分辨率 :1%RH 8位 温度分辨率 :1℃ 8 位 采样周期 :1S 单总线结构 与 TTL 兼容(5V) 管脚排列如下: 引脚说明: Vcc 正电源 Dout 输出 NC 空脚 GND 地 1、应用电路连接说明 DHT11 数字湿温度传感器连接方法极为简单。第一脚接电源正,第四脚接电源地端。 数据端为第二脚。可直接接主机(单片机)的 I/O 口。为提高稳定性,建议在数据端和电源 正之间接一只 4.7K 的上拉电阻。第三脚为空脚,此管脚悬空不用。 - 1 -
奥松电子有限公司 www.aosong.com 2、DHT11 数据结构 DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输 入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,具 体格式在下面说明。 一次完整的数据传输为40bit,高位先出。 数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bit温度整数数据+8bit温度小数数据 +8bit校验和 校验和数据为前四个字节相加。 传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间 应该分开处理。如果,某次从传感器中读取如下5Byte数据: byte4 byte3 byte2 byte1 byte0 00101101 00000000 00011100 00000000 01001001 整数 小数 整数 小数 校验和 校验和 湿度 温度 由以上数据就可得到湿度和温度的值,计算方法: humi (湿度)= byte4 . byte3=45.0 (%RH) temp (温度)= byte2 . byte1=28.0 ( ℃) jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确) 注意:DHT11 一次通讯时间最大3ms,主机连续采样间隔建议不小于100ms。 3、DHT11的传输时序 3.1、DHT11 开始发送数据流程 主机发送开始信号后,延时等待 20us-40us 后读取 DH11T 的回应信号,读取 总线为低电平,说明 DHT11 发送响应信号,DHT11 发送响应信号后,再把总线拉 高,准备发送数据,每一 bit 数据都以低电平开始,格式见下面图示。如果读取响应 信号为高电平,则 DHT11 没有响应,请检查线路是否连接正常。 - 2 -
奥松电子有限公司 www.aosong.com 3.2 主机复位信号和 DHT11 响应信号 3.3 数字‘0’信号表示方法 3.4 数字‘1’信号表示方法 - 3 -
奥松电子有限公司 www.aosong.com 4、实例应用 4.1 硬件描述 本项目采用两个三位一体共阳数码管做为湿度,温度显示模块。采用 ATMEL 公司的 ATmega8 做为主控芯片,详细如图 4.1 所示。 4.2 管脚分配 设备 传感器(HDT11) 管脚 PC5 S2(温度显示) S1(湿度显示) LED[1..8] P3 P4 P5 LED[1..8] P1 P2 Pm3 PB[0..7] PC3 PD5 PD4 PB[0..7] PD7 PD6 PD0 图 4.1 典型实例原理图 - 4 -
奥松电子有限公司 www.aosong.com /*原程序清单如下所示,本程序在 ICCAVR 6.31A 下测试通过。*/ /************************************************************************* 编译环境 :ICCAVR 功能:读取湿温度传感器 DTH11 数据并显示 公司:奥松电子有限公司 芯片:Mega 8 晶振:内部 8.0000MHz 创建人:木工 修改 :宁佐文 **************************************************************************/ #include #include typedef unsigned char U8; // defined for unsigned 8-bits integer variable typedef signed char S8; // defined for signed 8-bits integer variable typedef unsigned int U16; // defined for unsigned 16-bits integer variable typedef signed int S16; // defined for signed 16-bits integer variable typedef unsigned long U32; // defined for unsigned 32-bits integer variable typedef signed long S32; // defined for signed 32-bits integer variable typedef float F32; // single precision floating point variable (32bits) typedef double F64; // double precision floating point variable (64bits) /************************************************************************** 数码管显示赋值区 ***************************************************************************/ #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define num_ _a|_b|_c|_d|_e|_f|_dp _g //灭的数码管 _a|_d|_e|_f|_g _c|_f _e|_f _a|_d|_e _b|_e _b _d|_e|_f|_g 0x00 _e 0x01 0x02 0x04 0x08 0x10 0x20 0x40 0x80 _a _b _c _d _e _f _g _dp num0 num1 num2 num3 num4 num5 num6 num7 num8 num9 - 5 -
奥松电子有限公司 www.aosong.com #define num_11 _a|_d|_e|_f #define num_E _b|_c|_dp // Err 代码 #define num_r _a|_b|_c|_d|_f|_dp #define dc2 0x04 #define dc3 0x08 #define dd 0x03 #define dd4 0x10 #define dd5 0x20 #define dd6 0x40 #define dd7 0x80 #define dd2 0x04 #define dd3 0x08 //数码管控制端口 #define led1 dc3 //使用时要先将数码管全熄灭掉 #define led2 dd5 #define led3 dd4 #define led4 dd7 #define led5 dd6 #define led6 dd2 U8 PLAY[6]={0,0,0,0,0,0}; unsigned char Flag = 0; unsigned int u16ReadDownStreamTimer; const U8 LED[14]={num0,num1,num2,num3,num4,num5,num6,num7,num8,num9, num_,num_11,num_E,num_r }; //数码管笔形码数组 //函数声明: void init_devices(void); void time1_start(void); void port_init(void); void timer0_init(void); void timer1_init(void); void Delay(unsigned int i); void DelayNS (U16 dly) ; //***************************************************************************** // 显示模块 //***************************************************************************** void Display (void) { U8 i; { DDRD |= 0XFC; PORTD&=0x03; for(i=0;i<=5;i++) - 6 -
奥松电子有限公司 www.aosong.com DDRC |= 0X0C; PORTC&=0xF3; Delay(10); switch(i) { case 0: PORTC|=led1;break; case 1: PORTD|=led2;break; case 2: PORTD|=led3;break; case 3: PORTD|=led4;break; case 4: PORTD|=led5;break; case 5: PORTD|=led6;break; default :break; } PORTB=LED[PLAY[i]] ; //送数据 if((i==0)|(i==2)|(i==3)|(i==5)) //消小数点 { PORTB|=0x80; } DelayNS(1); } PORTD&=0x03; PORTC&=0xF3; } //***************************************************************************** // delay() //***************************************************************************** void DelayNS (U16 dly) //延时子程序 1.010ms { } void Delay(unsigned int i) { } void delay1N(unsigned int Dcount) { while(Dcount--) { NOP();NOP();NOP(); } } void Timer2_Delay150ms(void) // Timer 2 U16 i; for ( ; dly>0; dly--)WDR(); for (i=0; i<1131; i++); while(i--); - 7 -
奥松电子有限公司 www.aosong.com { TCCR2 = 0x00; TCNT2 = 0xDE; TIFR |= 0X40; TCCR2 = 0x02; } //***************************************************************************** // 系统初始化函数 //***************************************************************************** void init_devices(void) { CLI(); port_init(); timer0_init(); TIMSK = 0x05; SEI(); } //***************************************************************************** // 端口初始化 //***************************************************************************** void port_init(void) { DDRB = 0xFF; PORTB = 0x00; DDRC = 0x0C; PORTC = 0x03; DDRD = 0xF0; PORTD = 0x00; } //***************************************************************************** //TIMER0 initialize - prescale:256 // desired value: 1mSec // actual value: 0.992mSec (0.8%) //***************************************************************************** void timer0_init(void) { TCCR0 = 0x00; TCNT0 = 0xE1; TCCR0 = 0x04; } //***************************************************************************** //TIMER2 initialize - prescale:8 // WGM: Normal // desired value: 35uSec - 8 -
分享到:
收藏