5715|5

144

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

nRF905程序调试 [复制链接]

两个组合MCU1+nRF905,将nRF905模块和51单片机各引脚直接连接,其中一个为发送方,另一个为接收方。引脚配置如下:
sbit        TX_EN        =P1^0;
sbit        TRX_CE        =P3^2;
sbit        PWR_UP        =P1^1;


sbit        MISO        =P1^6;
sbit        MOSI        =P1^5;
sbit        SCK                =P1^7;
sbit        CSN                =P1^3;

sbit        AM                =P1^4;
sbit        DR                =P3^3;
sbit        CD                =P1^2;
*********************************************************************************
发送方和接收方的nRF905各引脚初始化配置相同,都为:


void nRF905Init(void)
{
        CSN=1;                                                // Spi         disable                                               
        SCK=0;                                                // Spi clock line init high


         DR=1;                                                // Init DR for input
        CD=0;
        AM=1;                                                // Init AM for input

        PWR_UP=1;                                        // nRF905 power on
        Delay(4);
        TRX_CE=0;                                        // Set nRF905 in standby mode
        TX_EN=0;                                        // set radio in Rx mode       
}

*************************************************************************************
发送方和接收方的905的10个字节的配置字也相同,这10个字节值放在结构体TxRxconf的成员buf[10]中:
{
    0x4c,        //配置频段为430MHz,
    0x0c,       //输出功率为10dBm,正常接收模式,不自动重发
    0x44,      //接收、发送的地址宽度为4字节
    0x20,0x20,  //接收、发送有效数据宽度为32字节
    0xcc,0xcc,0xcc,0xcc,   //接收地址的4个字节为0xcc,0xcc,0xcc,0xcc
    0x58                              //CRC校验允许,8位CRC校验,外部时钟信号不使能,16M晶振
}
********************************************************************************
发送方在发送前的准备工作:          |    接收方在接收前的准备工作:
对于发送方,                                  |                       对于接收方
void SetTxMode(void)                        |        void SetRXMode(void)
{                                                       |        {
        TRX_CE=0;                             |            TRX_CE=1;  
        TX_EN=1;                               |            TX_EN=0;
        Delay(1);                                        |             Delay(1);                        
}                                                       |         }

当PWR_UP=1;                              |当 PWR_UP=1;
   TRX_CE=0;                                  |     TRX_CE=1;
    TX_EN =1;                                |     TX_EN=0;
nRF905进入standby(待机)模式,   |nRF905进入接收模式
当TRX_CE=1时,便进入发送模式  |
**********************************************************************
发送方发送数据:                                                 |    接收方接收数据:
void TxPacket(unsigned char *TxBuf)                    |     unsigned char RxPacket(unsigned char *RxBuf)                 
{                                                                            |    {   
        uchar i;                                                          |          uchar i;                  
        CSN=0;                                                         |          if (DR)//当接收方接收完一个数据,nRF905会将其DR引脚置高
        SpiWrite(WTP); //写发送数据命令                  |        {
        for (i=0;i         {                                                                    |             CSN=0;
//MCU通过SPI接口将需要发送的32个数据送至缓存|             SpiWrite(RRP);//读接收数据
                SpiWrite(TxBuf);                                     |              for (i = 0 ;i < RxTxConf.buf[3] ;i++)
        }                                                                   |             {
        CSN=1;                                                             |                 RxBuf=SpiRead();
                                                                            |              }
        Delay(1);                                                     |                      CSN=1;
                                                                           |                           while(DR||AM);//MCU读取数据完毕,nRF905会将DR和AM引脚置低
               CSN=0;                                                           |                    TRX_CE=1; //nRF905重新进入接收模式
        SpiWrite(WTA);//写地址命令                                           |                      return 1;
        for (i=0;i         {                                                                |             else
                //写入接收机地址                                |              {
                SpiWrite(TxAddress);                         |                 return 0;
        }                                                                    |              }
        CSN=1;                                                            |           }
//将TRX_CE置高,启动发送                               |
        TRX_CE=1;                                                |
        Delay(1);                                                           |               
        TRX_CE=0;//发送完毕,进入待机模式          |       
}                                                                        |

发送方通过调用TxPacket(TxBuf)发送了32个字节数据,接收方接收并通过串口在PC机上显示,接收方和PC机的串口通信程序经调试没有问题。
问题在于,发送方和接收方之间没有通信。
根据坛友nicole088帖子“基于MSP430F149+nRF905无线数传模块的调试心得”,他提到,
31引脚 23 引脚 19引脚
发送机 1.5V 1.2V 1.8V
接收机 1.2V 1.2V 0V


我分别测了发送方和接收方
31、23和19引脚的电压值,   
31引脚 23引脚 19引脚
发送方 1.38V 0.44 0.64
接收方 1.27v 1.190.00
这样比较看来,我的接收方应该没有问题,问题出在发送方,也就是发送方根本就没有把数据发送出来,可是为什么就没有发送出来呢?
发送方程程序哪里不对吗?



此帖出自编程基础论坛

最新回复

楼主,救命,调不出来啊,求代码  详情 回复 发表于 2015-7-24 08:33
点赞 关注
 

回复
举报

144

帖子

2

TA的资源

一粒金砂(高级)

沙发
 
今天用示波器观察了发送方的DR引脚,有高低电平跳变,说明发送方确实把数据发送出去了,这说明是接收方 的问题了。
此帖出自编程基础论坛
 
 
 

回复

144

帖子

2

TA的资源

一粒金砂(高级)

板凳
 
有坛友说需要验证SPI通信是否正常,于是用了进行了验证,结果表明,SPI读写操作是没有问题的。
用示波器对接收方的DR引脚进行观察,看不出DR的电平变化,因为它的信号全部被一个正弦信号(这个正弦信号应该就是传说的工频干扰把)给淹没了。
所以,是接收方的问题
此帖出自编程基础论坛
 
 
 

回复

144

帖子

2

TA的资源

一粒金砂(高级)

4
 
我调试过接收方和PC机的串口通信,所以UART程序应该是没有问题的。
此帖出自编程基础论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

5
 
我这个程序调了好几天了,丝毫没有进展啊,楼主快调,调试完分享一下代码啦!
此帖出自编程基础论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼主,救命,调不出来啊,求代码
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表