最近调试DHT11,但返回值一直为零。
使用原子的程序,测试硬件,读数正确。
然后,把该测试程序移植至大程序,读数一直为零。
观测 DHT11最原始的数据,发现条件buf[0]+buf[1]+buf[2]+buf[3])==buf[4]一直不能满足
同一环境条件下:
测试程序的测量数据: 1C 00 19 00 35
移植进大程序的测量数据:21 00 34 00 EF
相同的驱动程序,单总线通信接收数据差异比较大,初步判断是延时函数的问题
大程序使用了与原子不同的延时函数(这是前人所做的工作)
延时函数改与不改都很纠结!!
有什么简单的替代函数吗?
怎样检测延时函数的准确性?
如何用示波器捕捉DHT11的通信过程?
求大神帮助
今晚终于做出来了,看似简单的程序,不细调也做不出来。
今天早上,凑合写了一个延时函数,通过DEBUG,设断点看延时函数的实际精度,
调好之后,再用新的延时函数替代,结果还是。。。
没办法,认真把DHT11的通信时序和原子哥的程序看懂,发现原来程序对延时的精度要求很低
昨晚做出的假设被否决
今晚,再从其他地方找问题,发现是UCOS引起的,加上OSIntEnter()和OSIntExit()读数就正常了;
好烦!对ucos还不熟悉!!!
我也遇到这个问题,但OSIntEnter()和OSIntExit()不能在任务级函数中调用,得加在中断函数里。目前发现ds18b20用起来没有出现读数据错误的情况,dht11我实在找不到数据读不出来的原因
不是遇到读不上数据都是这个问题。。。先看看波形对不对把
一周热门 更多>