最近做个东西, 需要用到温湿度.
在淘宝找了一圈, 只有AM系列的, AM230x 是单总线, AM231X是IIC总线.
由于我的ARM9的IIC还要做别的用, 于是买了单总线的, 尺寸小一些.
第一次做单总线的东西, 都还不知道是个啥意思, 问了一下奥康客服, 说就是用GPIO.
于是采购了1个.
在ARM口上找个电源, 给AM2302接好电源(3.7V的锂电).
然后参考AM2302的demo 和 手册. 还是中文产品好啊, 看得懂.
demo有2个, 一个AVR, 一个51单片机.
结合说明书, 熟读2个代码后, 开始动手
平台: WINCE5 ARM9 2440A, VC2005,
建立一个类, 打开GPIO驱动
然后将AVR的代码翻译过来
总是不行.
后来看51的代码, 还明了一下, 至少和VC的风格感觉接近一些,\
于是根据51的代码写了一份.
经过奋战1天(-_-~!), 终于搞定, 但是还是有些不稳定.
心得:
1. 找到WINCE的 us延时函数, google一下.
2. 将51里面的5个宏(输出 输入 高电平 低电平 读取) 翻译成你平台的代码, 对于我来说就是DriverControlIO, 读取代码用了一个函数.
3. 然后用你的宏替换51定义的5个宏.
未解决的问题:
读取8个字节的函数(ReadSensor 和 COM), 里面的延时原本需要30us, 但是我只延时1~5us, 才可以正常读取到数据. 不过有些不稳定, WINCE的延时函数我验证了, 还算准确.
原因: 可能出在读取电平时, 需要调用驱动代码, 耗用了一部分时间, 所以有时候同步不上.
解决办法: 我已近将线程设置为100的优先级; 所以这个问题还不知道如何解决, 将代码做成驱动, 也许延时会小很多.
用ARM9 2440的GPIO口实现与温湿度传感器(AM2302)的单总线通信! WINCE 分享一下心得
最新推荐文章于 2023-04-01 17:03:55 发布