完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好!我正在处理PIC18F45K22和DHT22温湿度传感器之间的通信。然而,在读取连接它们的串行线上的位流时,我有一些问题。为了通信,使用单个数据线。PIC通过拉下通常由电阻器拉起的线来请求信息,而DHT22产生5字节的数据。要发送0,DHT拉下数据线50us,然后将其提升到26-28us。要发送a1,它拉下数据线50us,然后将其提升到70us。我使用函数wich的单个字节包含以下代码:((我使用MPLAB IDE 8.92和C18进行编程)((RC0_bit是连接到行的引脚的名称))我突出显示了while函数,这是我的代码“冻结”(在第一次使用它时,因此它冻结在f上)DHT22)发送的第一位,我不能解释它为什么会冻结在那里:似乎行下降到逻辑0,然后上升到1,而不做其他任何事情。正因为如此,我用逻辑嗅探器控制数据行,并且DHT22似乎工作正常:它通常返回到零。试图等待40个用户而不是使用while函数,但是我只得到了用于调试程序的LCD上的“1”。所以现在我有点困惑PIC这种奇怪的(对我来说)行为的原因是什么。有人能帮我吗?非常感谢你!!)
|
|
相关推荐
8个回答
|
|
任何建议都是宝贵的,THNX
|
|
|
|
再次尝试发布您的代码…
|
|
|
|
我在发布代码时遇到了一些问题,我正在努力,谢谢!!
|
|
|
|
好的,我试着发布的代码就是问题所在。我已经修改了它,现在代码是Poestd笑:
|
|
|
|
好啊!(论坛有很多问题,确实……)您的代码有些低效,但可能会起作用。你使用C18吗?考虑使用Delay1Tcy()和类似的函数进行延迟,因为您的空循环“可能”被优化了,而且它们也不能提供精确的延迟定时。
|
|
|
|
是的,我使用C18编译器,绝对是的:我的代码效率很低。我已经使用定时器编写了一个替代代码(而不是使用延迟等待),并且知道是否发送了1或0,但是这个冻结的while函数不允许我使用它。好的,我将使用Delay1Tcy而不是Nop。代码冻结的while函数是第二个::)
|
|
|
|
好的,那么你应该张贴你的完整代码。你能读懂那个PIN吗?我是说,如果你把它移到高还是低?PIN是否具有任何模拟特性或共享模块?
|
|
|
|
是的,管脚在输入和输出模式下都工作得很好:在PIC读取所有数据之前,它必须沿着线路移动5ms以激活DHT22,然后等待25us并通过TRIS寄存器将RC0_bit管脚切换为输入。然后,它必须等待DHT将线路向下移动80us,然后向后移动80us,这是一个知识信号。然后沟通开始。所有这些由写和读引脚状态组成的部分都是由PIC和代码完成的(几乎以可以接受的方式,因为我的代码不是很有效)。我没有发布所有的代码,因为代码很长,并且在发布之前有很多垃圾需要清理。真正让我不安的是所有的代码以前看起来运行得很好,但是当涉及到阅读时,有些地方出错了。对不起,我没有写这篇文章,我完全忘了。它也被用在振荡器模块中作为OSC1,我已经禁用了配置位中的所有外部振荡器特性,所以引脚只能用作IO引脚。
|
|
|
|
只有小组成员才能发言,加入小组>>
5088 浏览 9 评论
1958 浏览 8 评论
1893 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3123 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2192 浏览 5 评论
643浏览 1评论
526浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
386浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
549浏览 0评论
452浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-7 02:06 , Processed in 1.483891 second(s), Total 91, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号