搜索
bottom↓
回复: 19

DHT11显示一直为零

[复制链接]

出0入0汤圆

发表于 2014-4-14 16:57:28 | 显示全部楼层 |阅读模式
最近一直在调试DHT11,知道对时序要求比较高,延时函数都是用示波器测量的。 液晶是用的12864,就不贴程序了,一直显示的为0,求各位大虾帮忙解决一下。
MCU:atmega16  内部晶振:1MHz

void delay_10us()     //10us
{
          NOP();
}

void delay_20us()
{
    NOP();     //10us
        NOP();     //12us
        NOP();
        NOP();
        NOP();
        NOP();
        NOP();
        NOP();
        NOP();
        NOP();     //20us
}

void delay_nus(uint i)
                           
{   
    while(--i);
}

void delay_ms(uint ms)
{
    uint i;
    while(ms--)
        {
           for(i=144;i>0;i--);
        }
}

/*******DHT11的引脚控制*************/
#define DHT_OUT    DDRA|= BIT(3)
#define DHT_IN     DDRA&=~BIT(3)
#define DHT_1     PORTA|= BIT(3)
#define DHT_0     PORTA&=~BIT(3)
#define DHT_R    (PORTA& BIT(3))

/******变量的定义*******/
uchar RH_data_H,TM_data_H,RH_data_L,TM_data_L,Check_Data,temp;
uchar data[5];                 //数据缓冲数组

/*************************************************************
函数名称:Receive_Data
功能:接受数据
************************************************************/
void Receive_Data()
{
    uchar i,j,m;
    DHT_IN;
    for(i=0;i<5;i++)                  //五字节的数据
    {
        data[i]=0x00;
               
        for(j=0;j<8;j++)
        {
             while(!DHT_R);      //等待高电平的到来,当高电平到来后便开始计时
             delay_nus(5);      //这边的50us是低电平时隙开始
                         //延时50us后看还是不是高电平,如果是高那么这位就为1,否则为0
             //delay_nus(5);
                         //上面延时了50us,此时引脚数据寄存器还是高电平的话,表明接受到的是1
                         if(DHT_R)        //否则为0
             {                           
                 data[i]|=BIT(7-j);   //由此可知,先读取的高位,此命令只是写入1的位,data[i] = 0X00,所以没写的还是0
                 while(DHT_R);       //如果是低电平则表示下一位的开始
             }   
         }
     }
}

/***********************************************
函数名称:Ask_Reply_Do
功能:主机发出信号,DHT11回复信号,并且处理接收到的数据
**************************************************/
void Ask_Reply_Do()
{
    //主机拉低18ms
    uchar i;
    DHT_OUT;      //DATA_OUT;
    DHT_0;        //PORT_CLR;
    delay_ms(50);
    DHT_1;       //PORT_SET  
                     //总线由上拉电阻拉高 主机延时20us
    delay_nus(2);      
               
    DHT_IN;      //DATA_IN;
   // delay_10us();           //主机设为输入 判断从机响应信号  
   
    if(!DHT_R)   // 判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行                          
    {
        //判断从机是否发出 80us 的低电平响应信号是否结束         
        while(!DHT_R);      //等待从机把电平拉高
        while(DHT_R);       //从机是否发出了高电平,是的话就跳出继续
             //判断从机是否发出80us的高电平,如发出则进入数据接收状态
                          
        Receive_Data();   
        DHT_OUT;
                DHT_1;       //PORT_SET;
             //数据校验
        temp=(data[0]+data[1]+data[2]+data[3]);  
        if(data[4]==temp)               
        {
            RH_data_H=data[0];      //只要整数部分
            RH_data_L=data[1];                                       
            TM_data_H=data[2];
            TM_data_L=data[3];
            Check_Data=data[4];
        }                        
    }        
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-4-14 17:40:26 | 显示全部楼层
这种东西不准,做过你就知道了!

出0入0汤圆

发表于 2014-4-14 17:41:48 | 显示全部楼层
特别是湿度,变化大没法实用,只能玩玩。

出0入0汤圆

 楼主| 发表于 2014-4-14 23:28:10 | 显示全部楼层
ddcchh 发表于 2014-4-14 17:40
这种东西不准,做过你就知道了!

呵呵,就是想知道为什么我读的数据一直是零。

出0入0汤圆

 楼主| 发表于 2014-4-14 23:28:54 | 显示全部楼层
ddcchh 发表于 2014-4-14 17:41
特别是湿度,变化大没法实用,只能玩玩。

就是做着玩的,就是想知道为什么我读的数据是零。

出0入0汤圆

发表于 2014-4-14 23:36:54 | 显示全部楼层
下周末回家把我调好的程序贴出来,我是用4个LED显示的,弄了很长时间。

出0入0汤圆

 楼主| 发表于 2014-4-14 23:44:09 | 显示全部楼层
ddcchh 发表于 2014-4-14 23:36
下周末回家把我调好的程序贴出来,我是用4个LED显示的,弄了很长时间。

好的,谢谢     我已经弄了四五天了

出0入0汤圆

发表于 2014-4-15 00:00:01 | 显示全部楼层
不稀奇,光看Pdf文件也要一天,多想想有好处,很容易出来了,就不想搞了!
本来我想深入开发一下,但看了它的精度就不想弄了?我用的是广州奥松的传感DHT11有可能是dht11问题
我的贴子中有一个是内置单片机的,是dht11升级版,这个还内置了ds18b20.

出0入0汤圆

发表于 2014-4-15 08:10:41 来自手机 | 显示全部楼层
看我以前发的毕业分享的帖子,里面有51的程序

出0入0汤圆

 楼主| 发表于 2014-4-15 10:15:44 | 显示全部楼层
ddcchh 发表于 2014-4-15 00:00
不稀奇,光看Pdf文件也要一天,多想想有好处,很容易出来了,就不想搞了!
本来我想深入开发一下,但看了它 ...

好的,谢谢   做了玩的

出0入0汤圆

 楼主| 发表于 2014-4-15 10:18:01 | 显示全部楼层
eva015401 发表于 2014-4-15 08:10
看我以前发的毕业分享的帖子,里面有51的程序

好的  谢谢

出0入0汤圆

发表于 2014-4-21 09:34:12 | 显示全部楼层
楼主要的程序,参考一下,本来想拍一张实物图,但做过的东西太多,不好找。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-4-21 10:09:45 | 显示全部楼层
毕业设计做的是DHT21的,没有遇到这个情况!具体是什么原因呢?现在解决了没有?

出0入0汤圆

 楼主| 发表于 2014-4-21 16:57:13 | 显示全部楼层
奮闘ing 发表于 2014-4-21 10:09
毕业设计做的是DHT21的,没有遇到这个情况!具体是什么原因呢?现在解决了没有? ...

还没有解决   程序贴在上面了,不知道什么原因

出0入0汤圆

 楼主| 发表于 2014-4-21 17:03:21 | 显示全部楼层
ddcchh 发表于 2014-4-21 09:34
楼主要的程序,参考一下,本来想拍一张实物图,但做过的东西太多,不好找。

谢谢啦,用你的试试看

出0入0汤圆

发表于 2014-4-21 17:16:15 | 显示全部楼层
这种是用串口发至PCR的,很方便。

出0入0汤圆

发表于 2014-4-21 17:26:29 | 显示全部楼层
大多数是时序问题,如在晶振11.0592M和22.1148M的时序是不一的

出0入0汤圆

发表于 2014-4-21 17:27:22 | 显示全部楼层
会烧坏的哦 ~

出0入0汤圆

 楼主| 发表于 2014-4-26 09:33:33 | 显示全部楼层

会烧坏什么?

出0入0汤圆

发表于 2014-4-26 09:46:33 | 显示全部楼层
初始化时间比较长,有时要5分钟到10分钟才有数据,要是超过还没有数据那就是其它原因
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表