sweet007 发表于 2012-9-8 21:38:15

关于DHT11的2点疑问

编译环境:WINAVR2010
使用芯片:ATmega16L
系统晶振:7.3728MHz
外围器件:DHT11
-------------------------------------------------------------------------------------------
从网上找了几个DHT11的资料,发现有2个版本,主要是数据格式的不同,如图所示
(格式一:数字0=12-14us低电平+26-28us高电平;数字1=12-14us低电平+116-118us高电平
格式二:数字0=50us低电平+26-28us高电平;数字1=50us低电平+70us高电平)

我实在不明白为什么同样的型号会有2种完全不同的手册,后来我用M16的定时器测试了一下,发现我的DHT11是格式二。
但是读出来的数据除了湿度的整数一直是70%,其余的都是0(读出的数据已经通过校验),附下我的程序,请高手们帮我看看,谢谢!

unsigned char DHT11_Init()
{
        DA_OUT;   //引脚输出模式
        DA_0;   
        _delay_ms(20);    //至少18ms的开始信号
        DA_1;
        _delay_us(40);
        DA_IN;
        _delay_us(10);
        if(DA_PIN) return 0;
        _delay_us(60);
        if(DA_PIN) return 1;
        else return 0;
}

void DHT11_Read()
{
        unsigned char i,j,k,n;
        if(!DHT11_Init())        {DHT11_DAT=255;DHT11_DAT=255;DHT11_DAT=255;DHT11_DAT=255;}
        else
        {
                while(DA_PIN);
                for(j=0;j<5;j++)
                {
                        for(i=0;i<8;i++)
                        {
                                while(!DA_PIN);
                                TCCR0=0x02;
                                while(DA_PIN);
                                TCCR0=0x00;n=TCNT0;TCNT0=0X00;
                                if(n>=50) DHT11_DAT|=(1<<(7-i));
                                else DHT11_DAT&=~(1<<(7-i));
                        }
                }
                if(DHT11_DAT==DHT11_DAT+DHT11_DAT+DHT11_DAT+DHT11_DAT) ;
                else DHT11_DAT=0;DHT11_DAT=0;DHT11_DAT=0;DHT11_DAT=0;       
                DA_OUT;
                DA_1;
        }
}

sweet007 发表于 2012-9-9 17:39:43

难道没有人遇到这个问题吗
页: [1]
查看完整版本: 关于DHT11的2点疑问