OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9149|回复: 21

dht22(am2302)读数据的时候有时候读的到,有时读不到

[复制链接]

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-5-4
在线时间
25 小时
发表于 2016-5-13 16:00:34 | 显示全部楼层 |阅读模式
1金钱
最近在调试一个dht22的模块,代码是根据原子哥的dht11照着时序图改的,可就是很奇怪有时候可以读得出,有时读不出,原本以为是没拉上啦电阻的原因,但是即使有上拉电阻也没起什么作用,有人玩这个模块出现过这样的问题吗?有这个相关的工程能发给我看一下吗?用了好多个dht22都这个样子,我不知道是什么原因了,心好累。。。。。。

最佳答案

查看完整内容[请看2#楼]

终于是搞好了,发现了一个特大的问题,原来这个的校验和是个bug,温度高八位+温度低八位+湿度高八位+湿度低八位的和怎么可能一直是八位而已呢,我就是碰巧一直被他溢出导致我检验一直错误的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-5-4
在线时间
25 小时
 楼主| 发表于 2016-5-13 16:00:35 | 显示全部楼层
终于是搞好了,发现了一个特大的问题,原来这个的校验和是个bug,温度高八位+温度低八位+湿度高八位+湿度低八位的和怎么可能一直是八位而已呢,我就是碰巧一直被他溢出导致我检验一直错误的
QQ图片20160514225011.png
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-5-13 20:09:26 | 显示全部楼层
帮顶
回复

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-5-4
在线时间
25 小时
 楼主| 发表于 2016-5-14 08:57:28 | 显示全部楼层
回复

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-5-4
在线时间
25 小时
 楼主| 发表于 2016-5-14 15:32:23 | 显示全部楼层
用示波器观察波形,发现主机有发送信号给他,从机有回应80us低电平和80us高电平,接下来就是40位数据,但是数据验证的时候一直不正确,是什么问题呢?sda端口有上拉5.1k电阻
回复

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-5-4
在线时间
25 小时
 楼主| 发表于 2016-5-14 17:21:51 | 显示全部楼层
自顶
回复

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-5-4
在线时间
25 小时
 楼主| 发表于 2016-5-14 18:38:59 | 显示全部楼层

原子哥我想请教一下单总线通信,例如我那个dht22已经有收到主机的呼叫信号,也成功返回了应答信号(完全正确,跟手册的一样)但是后面那些数据就不正确了,这个是什么原因造成的呢?应该不是程序的问题吧??
回复

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-5-4
在线时间
25 小时
 楼主| 发表于 2016-5-14 22:53:28 | 显示全部楼层
希望别人在弄这个模块能看到吧,不用走太多的弯路啦
回复

使用道具 举报

Rose丶BL 该用户已被删除
发表于 2017-2-15 21:28:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2014-12-4
在线时间
717 小时
发表于 2017-2-17 22:07:46 | 显示全部楼层
最近也在做,debug时发现校验不对。不知道楼主发现溢出后怎么处理的??
回复

使用道具 举报

头像被屏蔽

102

主题

113

帖子

0

精华

禁止访问

积分
386
金钱
386
注册时间
2017-2-17
在线时间
47 小时
发表于 2017-2-18 00:26:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-7-1
在线时间
31 小时
发表于 2017-2-24 14:27:14 | 显示全部楼层
我直接把校验位那里删掉了,就可以正常显示了
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-6-20
在线时间
30 小时
发表于 2017-3-13 19:38:40 | 显示全部楼层
楼主怎么解决这个溢出问题呢
回复

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-2-24
在线时间
5 小时
发表于 2017-3-23 20:50:46 | 显示全部楼层
644374874@qq.co 发表于 2017-2-24 14:27
我直接把校验位那里删掉了,就可以正常显示了

楼主666!!!谢谢!我也是这个问题,困扰了2天!谢谢谢谢!!!!
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-7-1
在线时间
31 小时
发表于 2017-3-24 19:19:49 | 显示全部楼层
Ruben 发表于 2017-3-23 20:50
楼主666!!!谢谢!我也是这个问题,困扰了2天!谢谢谢谢!!!!

然而我并不是楼主
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-10-22
在线时间
8 小时
发表于 2017-10-22 23:30:36 | 显示全部楼层
bg1cxf 发表于 2017-2-18 00:26
我在51移植的,相对来说好用点。

你好,源代码可以借鉴学习一下吗,QQ1306501801,非常感谢
回复

使用道具 举报

6

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
320
金钱
320
注册时间
2017-10-14
在线时间
80 小时
发表于 2017-10-23 08:02:15 | 显示全部楼层
校验和其实没有错,他是把三个数据加起来取得低八位
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-9-27
在线时间
11 小时
发表于 2018-1-19 15:42:41 | 显示全部楼层
将湿度高低八位和温度高低八位加起来取低八位就是校验位
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2018-9-5
在线时间
4 小时
发表于 2019-3-4 23:28:26 | 显示全部楼层
太感谢了,我就是在这个地方卡了两天!!!
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-11-25
在线时间
2 小时
发表于 2020-2-21 12:00:57 | 显示全部楼层
DHT11_Data->sum=DHT11_Data->humi_H + DHT11_Data->humi_L + DHT11_Data->temp_H + DHT11_Data->temp_L;
DHT11_Data->sum=(DHT11_Data->sum&0x00FF);

把高位屏蔽掉就ok了
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-3-20
在线时间
3 小时
发表于 2020-3-20 18:16:17 | 显示全部楼层
你好,源代码可以借鉴学习一下吗,QQ1006286634,非常感谢
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2020-5-6
在线时间
6 小时
发表于 2020-5-13 15:33:08 | 显示全部楼层
请问一下,为甚么AM2302响应一直停在高电平
         
        AM2302_Mode_out_PP();//输出
       
       
        AM2302_DATA_OUT(LOW);//低电平
        delay_ms(20);        //20ms       
       
       
        AM2302_DATA_OUT(HIGH);//释放
       delay_us(30);        //30us

        AM2302_Mode_IPU();//输入模式
               
       
        while(AM2302_DATA_IN());//一直为高电平
       
       
        if(AM2302_DATA_IN() == Bit_RESET)
        {
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 15:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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