您的位置:首页 > 其它

用ARM9 2440的GPIO口实现与温湿度传感器(AM2302)的单总线通信! WINCE 分享一下心得

2012-02-27 09:48 218 查看
最近做个东西, 需要用到温湿度.

在淘宝找了一圈, 只有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的优先级; 所以这个问题还不知道如何解决, 将代码做成驱动, 也许延时会小很多.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐