Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830322
  • 博文数量: 213
  • 博客积分: 5048
  • 博客等级: 大校
  • 技术积分: 1883
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 10:14
文章分类

全部博文(213)

文章存档

2011年(4)

2010年(55)

2009年(47)

2008年(107)

我的朋友

分类: 嵌入式

2009-10-30 11:26:50

nRF905有四种模式,Rxmode,Txmode,Standbymode,PowerdownMode。其中StandbyMode和PowerdownMode是节能模式。下图给出一些参数,晶振频率和提供给外部芯片(如MCU)使用的频率。
其中决定这几种模式的是三个引脚

这几种模式切换需要的时间:


注意:
while (1) {
    TxMode();//三引脚赋值

    RxMode();//三引脚赋值
}
这种代码最多只会发一次,RxMode切换需要时间,而且TxMode后面要判断DR管脚,如果没有发出去就切换模式会导致不确定结果,很可能发布出去。
修改后
while (1) {
    TxMode();
    while (LOBIT(DR)) ;//发完了DR脚会变高
    RxMode();
    msDly(1);
}

发现905还是很多细节要注意的,不知道是我编程不够规范,还是905datasheet上bug多。
情况一:如果我powerup管脚初始化没有拉低,然后直接拉高905可能会不工作,10个里面大概会出现一个这样的905吧
情况二:如果standby模式,我们如果只是把TRX_CE拉低,TXEN不管,那么接下来如果马上变成TX模式,这时判断DR是有问题的。。这样会导致发送不出去的情况。想不通,如果standby模式把TRX_CE和TXEN都拉低的话就不会有这样的问题,看datasheet觉得无解。。
下面示意代码可以出现这样的情况,cpu时钟16M
    RxMode();
    TxMode();
    while (LOBIT(DR)) ;
    standbyMode();
    msDly(3);
    TxMode();
    RxMode();
    msDly(25);
    TxMode();
    RxMode();
上面这段代码是不是看起来应该发送了三次数据,但是如果你的standbyMode只是拉低TRX_CE,没管TXEN的话,不好意思,数据只会发两次。如果两者都拉低了,恭喜你发了三次。无语。


整体的流程datasheet都有。
一点切记:转换状态是需要时间的,不要一拉管脚就想当然的认为状态转换了,大部分905问题都是这样导致的。
文件:nRF905_v1.5.pdf
大小:710KB
下载:下载

阅读(1060) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~