OpenEdv-开源电子网

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

DHT11数字温湿度传感器实验中的两个问题

[复制链接]

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2014-10-30
在线时间
1 小时
发表于 2015-10-15 21:50:29 | 显示全部楼层 |阅读模式
5金钱
第一个问题:
我将DHT11_Read_Bit函数中的 
      delay_us(40);//等待40us 

       if(DHT11_DQ_IN)return 1; 

       else return 0; 
这三行改为了 
retry=0; 
while(DHT11_DQ_IN&&retry<150) 

retry++; 
delay_us(1); 

if(retry<40) 

return 0; 

else 
return 1; 


第二个问题:
对于上面的40微秒的延迟,我不太认同,从上升沿开始延迟,如果这段时序是0时序,接下来仍然是0时序,那么这里的四十秒延迟后正好在下一个0时序的上升沿附近,这时再去判断电平,有可能电平值是1,从而导致返回值错误。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2014-10-30
在线时间
1 小时
 楼主| 发表于 2015-10-15 21:51:01 | 显示全部楼层
请各位帮忙看看,万分感谢!
回复

使用道具 举报

22

主题

2255

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4511
金钱
4511
注册时间
2013-4-22
在线时间
337 小时
发表于 2015-10-16 08:56:39 | 显示全部楼层
这个看你的IIC的时钟速率是多快的,可能他这么写没有问题
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2014-10-30
在线时间
1 小时
 楼主| 发表于 2015-10-16 09:36:31 | 显示全部楼层
各位不好意思,第一个问题没打全,我将那三行代码改了之后LCD显示屏就显示温度和湿度都为0了
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2014-10-30
在线时间
1 小时
 楼主| 发表于 2015-10-16 09:42:19 | 显示全部楼层
回复【3楼】三叶草:
---------------------------------
我就改了http://www.openedv.com/posts/list/13402.htm中DHT11_Read_Bit函数中的上述那三行代码,从频率上来说应该没问题吧。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165558
金钱
165558
注册时间
2010-12-1
在线时间
2118 小时
发表于 2015-10-16 22:39:40 | 显示全部楼层
回复【4楼】空翼0:
---------------------------------
说明你的代码改错了....
为什么,可以去看DHT11数据手册。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2014-10-30
在线时间
1 小时
 楼主| 发表于 2015-10-20 08:44:54 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
那对于我提出的第二个问题,根据时序图,延迟40微秒再判断是高电平还是低电平是不是不太可靠?因为假如说这个当前位和下一位都为0的话,延迟40微秒正好在下一位时序的上升沿附近
回复

使用道具 举报

70

主题

6769

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13197
金钱
13197
注册时间
2012-11-26
在线时间
3820 小时
发表于 2015-10-20 09:21:58 | 显示全部楼层
你觉得你是对的 那就按照你的来写
学无止境
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2014-10-30
在线时间
1 小时
 楼主| 发表于 2015-10-20 09:33:37 | 显示全部楼层
回复【8楼】jermy_z:
---------------------------------
调试了好几遍了,还是出不来结果。。。。也可能是我调试的方法不对吧,这里原子哥是延时四十微秒后判断电平高低,我改的思路是等待该位时序结束,判断高电平持续时间,因为‘1’时序的高电平持续时间是116-118us,‘0’时序的高电平持续时间是26-28us,所以我以40为界,高电平持续时间大于40为1,否则为0,能不能请大神看看我这个思路对不对?谢谢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165558
金钱
165558
注册时间
2010-12-1
在线时间
2118 小时
发表于 2015-10-20 23:09:00 | 显示全部楼层
回复【9楼】空翼0:
---------------------------------
实践是检验真理的唯一标准.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2016-3-16
在线时间
27 小时
发表于 2017-2-24 15:29:31 来自手机 | 显示全部楼层
正点原子 发表于 2015-10-20 23:09
回复【9楼】空翼0:
---------------------------------
实践是检验真理的唯一标准.

原子哥,我最近也在研究这个。
也是不太明白一些!
看了程序,有的地方的时序,时间跟别处的不一样,导致理解程序花了很多冤枉路。
还有就是这个
delay_us(40);
"0"的响应高电平不是26-28us吗???延时40us,这样能判断高低,但岂不是影响了下一个数据的读取????
求解答!
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2016-3-16
在线时间
27 小时
发表于 2017-2-24 15:38:24 来自手机 | 显示全部楼层
正点原子 发表于 2015-10-20 23:09
回复【9楼】空翼0:
---------------------------------
实践是检验真理的唯一标准.

是不是即使读取了下一个bit的低电平,也不影响继续读取的结果呢???
回复

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2017-1-17
在线时间
8 小时
发表于 2017-2-27 09:47:19 | 显示全部楼层
你第二个应该组合在一起   因为循环的话 时序会有乱的时候
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2016-3-16
在线时间
27 小时
发表于 2017-2-27 16:55:52 来自手机 | 显示全部楼层
wangzx 发表于 2017-2-27 09:47
你第二个应该组合在一起   因为循环的话 时序会有乱的时候

啥意思?不懂
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-23 21:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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