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

最近做个东西, 需要用到温湿度.
在淘宝找了一圈, 只有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的优先级; 所以这个问题还不知道如何解决, 将代码做成驱动, 也许延时会小很多. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值