5935|11

219

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

NRF905的应用问题 [复制链接]

谁用过NRF905啊?我参照网上的资料写了一个程序,怎么都调试不通,有经验的大侠帮我看看那有问题。谢谢!

[ 本帖最后由 烟雨 于 2011-5-6 11:34 编辑 ]

nrf905.rar

4 KB, 下载次数: 26

此帖出自RF/无线论坛

最新回复

提供10mw   100mw   500mw  1W  2W   NRF905系列模块,欢迎交流 需要请发邮件35625400@qq.com 索要资料 交流方式: 电话:024-62397375(陈先生) QQ: 35625400  MSN: ll88mm88@hotmail.com 邮箱: 35625400@qq.com  详情 回复 发表于 2012-8-14 15:01
点赞 关注
 

回复
举报

6066

帖子

92

TA的资源

裸片初长成(初级)

沙发
 
楼主把程序贴出来,这样大家看起来会方便一点哟
此帖出自RF/无线论坛
 
 

回复

452

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
这个时序很重要的
此帖出自RF/无线论坛
个人签名人生苦短,何必为声名所累,放开自己心态,去追求自己想要的梦想去吧!http://pytech-inc.taobao.com/
 
 
 

回复

219

帖子

0

TA的资源

一粒金砂(中级)

4
 

NRF905的程序

#include "MSP430x14x.h"
#include "nRF905.h"

#define uchar unsigned char
#define uint  unsigned int

unsigned char  TxBuf[32];
unsigned char  RxBuf[32];
unsigned char  TxAddress[4]={TX_ADDRESS_0 , TX_ADDRESS_1 , TX_ADDRESS_2 , TX_ADDRESS_3};
unsigned char  RxAddress[4]={RX_ADDRESS_0 , RX_ADDRESS_1 , RX_ADDRESS_2 , RX_ADDRESS_3 };
unsigned char  DATA_BUF;

//===============================延时600us函数==================================
void delay_us(uchar n)
{
        uint i;
        while(n--)
        for(i=0;i<33;i++);
        _NOP();       
}

//=============================关闭nRF905=======================================
void NRF905_off()
{
        PWR_UP_0;
}
//================================发送模式======================================
void NRF905_TxOn()
{
        TX_EN_1;
        TRX_CE_0;
        delay_us(5); //delay for mode change (>=650us)
}
//================================启动发送======================================
void NRF905_TxSend()
{
        TRX_CE_1;
        delay_us(5);
        TRX_CE_0;
}
//================================接收模式======================================
void NRF905_RxOn()     
{
        TX_EN_0;
        TRX_CE_1;
        delay_us(5); //delay for mode change (>=650us)
}
//=============================spi写函数==================================
void SpiWrite(uchar byte)
{
        unsigned char i;
        DATA_BUF=byte;        //将需要发送的数据写入缓存
        for (i=0;i<8;i++)     //循环8次发送一个字节的数据
        {
                if (DATA_BUF&0x80)        //总是发送最高位
                MOSI_1 ;
                else
                MOSI_0 ;

                SCK_1;               //置时钟线为高
                _NOP();
                DATA_BUF=DATA_BUF<<1;//左移一位,为下一位的发送做准备
                SCK_0;               //置时钟线为低
                _NOP();
        }
}

//===============================读SPI的函数====================================
uchar SpiRead(void)
{
        unsigned char i;
        for (i=0;i<8;i++)
        {
                DATA_BUF=DATA_BUF<<1;//左移一位,准备接收下一位数据
                SCK_1 ;         //SCK=1;
               
                if (MISO)        //读取最高位,保存至最末尾,通过左移位完成整个字节
                DATA_BUF|=0x01;
                else
                DATA_BUF&=~0x01;

                SCK_0 ; //SCK=0;
         }
         return DATA_BUF;//DATA_BUF为接收到的完整数据
}
//=================================配置nRF905===================================
void NRF905_Config(void)
{                               
        CSN_0;                                       // Spi 使能
        SpiWrite(WC);                              // 写配置命令
        SpiWrite(CH_NO_BYTE);                      //中心频率低8位
        SpiWrite(PA_PWR_10dBm | HFREQ_PLL_433MHz|AUTO_RETRAN); //发射+10dBm,发射频率433MHz,中心频率第9位=0
        SpiWrite(TX_AFW_4BYTE | RX_AFW_4BYTE);     //接收地址宽度4字节,发送地址宽度4字节
        SpiWrite(RX_PW_32BYTE);                    //接收数据宽度32字节
        SpiWrite(TX_PW_32BYTE);                    //发送数据宽度32字节
        SpiWrite(RX_ADDRESS_0);                    //接收有效地址第1字节
        SpiWrite(RX_ADDRESS_1);                    //接收有效地址第2字节
        SpiWrite(RX_ADDRESS_2);                    //接收有效地址第3字节
        SpiWrite(RX_ADDRESS_3);                    //接收有效地址第4字节
        SpiWrite(0xdb);           //CRC16模式使能,晶体振荡器频率16MHz
        CSN_1;                    //Spi 不使能
}

//===============================发送数据=======================================
void TxPacket()
{
        uchar i;   
        TRX_CE_0;        
        CSN_0;              // Spi使能
        SpiWrite(WTP);            // 写配置命令
        for (i=0;i<32;i++)
        SpiWrite(TxBuf); // 写32字节       
        CSN_1;              // Spi 不使能
        delay_us(2);
        
        CSN_0;              //        Spi使能
        SpiWrite(WTA);            // 写地址命令
        for (i=0;i<4;i++)   // 写4个字节的地址
          {
            SpiWrite(TxAddress);
          }
        CSN_1;              //Spi 不使能
       // NRF905_RxOn();
      //  RxPacket();
        NRF905_TxSend();          //启动发送
        

}
//================================接收数据======================================
void RxPacket()
{
    if(DR)
    {
        uchar i;            
        TRX_CE_0;  
        CSN_0;                    // 允许Spi使能       
        SpiWrite(RRP);                  // 读载荷命令
        for (i=0;i<32;i++)
          {
            RxBuf=SpiRead();  //读数据到缓存区       
          }
        CSN_1;                  // 不允许Spi使能               
        while(AM||DR);
        TRX_CE_1;
    }
}
//==============================IO口初始化======================================
void InitIO()
{
        P4DIR|=BIT5+BIT6+BIT7; //P4.5~P4.7为输出口
        P5DIR|=BIT0+BIT1+BIT3; //P5.0~P5.3为输出口
        
        PWR_UP_1;    //nRf905上电
        TRX_CE_0;    //设置为待机模式
        TX_EN_0;     //设置为接收模式
        
        CSN_1;      //  SPi禁制
        SCK_0;      //        Spi时钟线置低
}
此帖出自RF/无线论坛
 
 
 

回复

219

帖子

0

TA的资源

一粒金砂(中级)

5
 

配置

#ifndef _nRF905
#define _nRF905
/*-------------------------------------------------------------------------------------------
nrf905配置寄存器宏定义 author:HotPower
        nrf905配置寄存器(10Byte)
工作频率f=(422.4+CH_NO/10)*(1+HFREQ_PLL)MHz
-------------------------------------------------------------------------------------------*/
#define RX_ADDRESS           0x12345678               //接收有效地址(本方)
#define TX_ADDRESS           0x12345678             //发送有效地址(对方)

#define CH_NO_FREQ_422_4MHz  0x000                     //工作频率422.4MHz(433MHz频段最低频率)
#define CH_NO_FREQ_422_5MHz  0x001                     //工作频率422.5MHz
#define CH_NO_FREQ_425_0MHz  0x01a                     //工作频率425.0MHz
#define CH_NO_FREQ_427_5MHz  0x033                     //工作频率427.5MHz

#define CH_NO_FREQ_430_0MHz  0x04c                     //工作频率430.0MHz
#define CH_NO_FREQ_433_0MHz  0x06a                     //工作频率433.0MHz(433MHz频段基准频率)
#define CH_NO_FREQ_433_1MHz  0x06b                     //工作频率433.1MHz
#define CH_NO_FREQ_433_2MHz  0x06c                     //工作频率433.2MHz
#define CH_NO_FREQ_434_7MHz  0x07b                     //工作频率434.7MHz
#define CH_NO_FREQ_473_5MHz  0x1ff                     //工作频率473.5MHz(433MHz频段最高频率)

#define CH_NO_FREQ_844_8MHz  0x000                     //工作频率844.8MHz(868MHz频段最低频率)

#define CH_NO_FREQ_862_0MHz  0x056                     //工作频率862.0MHz
#define CH_NO_FREQ_868_0MHz  0x074                     //工作频率868.0MHz(868MHz频段基准频率)
#define CH_NO_FREQ_868_2MHz  0x075                     //工作频率868.2MHz
#define CH_NO_FREQ_868_4MHz  0x076                     //工作频率868.4MHz
#define CH_NO_FREQ_869_8MHz  0x07d                     //工作频率869.8MHz
#define CH_NO_FREQ_895_8MHz  0x0ff                     //工作频率895.8MHz
#define CH_NO_FREQ_896_0MHz  0x100                     //工作频率896.0MHz
#define CH_NO_FREQ_900_0MHz  0x114                     //工作频率900.0MHz
#define CH_NO_FREQ_902_2MHz  0x11f                     //工作频率902.2MHz
#define CH_NO_FREQ_902_4MHz  0x120                     //工作频率902.4MHz
#define CH_NO_FREQ_915_0MHz  0x15f                     //工作频率915.0MHz(915MHz频段基准频率)
#define CH_NO_FREQ_927_8MHz  0x19f                     //工作频率927.8MHz
#define CH_NO_FREQ_947_0MHz  0x1ff                     //工作频率947.0MHz(915MHz频段最高频率)

#define CH_NO_FREQ           CH_NO_FREQ_433_0MHz       //工作频率433.0MHz
#define CH_NO_BYTE           CH_NO_FREQ & 0xff         //工作频率低8位       Byte0       01101100

#define AUTO_RETRAN          0x20                      //重发数据包          Byte1.5     0
#define RX_RED_PWR           0x10                      //接收低功耗模式      Byte1.4     0
#define PA_PWR__10dBm        0x00                      //输出功率-10dBm      Byte1.3~2   00
#define PA_PWR_2dBm          0x04                      //输出功率+2dBm       Byte1.3~2
#define PA_PWR_6dBm          0x08                      //输出功率+6dBm       Byte1.3~2
#define PA_PWR_10dBm         0x0c                      //输出功率+10dBm      Byte1.3~2   
#define HFREQ_PLL_433MHz     0x00                      //工作在433MHz频段    Byte1.1     0
#define HFREQ_PLL_868MHz     0x02                      //工作在868MHz频段    Byte1.1
#define HFREQ_PLL_915MHz     0x02                      //工作在915MHz频段    Byte1.1
#define CH_NO_BIT8           CH_NO_FREQ >> 8           //工作频率第9位       Byte1.0     0

#define TX_AFW_1BYTE         1 * 16                    //发送地址宽度1字节   Byte2.7~4
#define TX_AFW_2BYTE         2 * 16                    //发送地址宽度2字节   Byte2.7~4
#define TX_AFW_3BYTE         3 * 16                    //发送地址宽度3字节   Byte2.7~4
#define TX_AFW_4BYTE         4 * 16                    //发送地址宽度4字节   Byte2.7~4   100
#define RX_AFW_1BYTE         1                         //接收地址宽度1字节   Byte2.3~0
#define RX_AFW_2BYTE         2                         //接收地址宽度2字节   Byte2.3~0
#define RX_AFW_3BYTE         3                         //接收地址宽度3字节   Byte2.3~0
#define RX_AFW_4BYTE         4                         //接收地址宽度4字节   Byte2.3~0   100

#define RX_PW_1BYTE          1                         //接收数据宽度1字节   Byte3.5~0
#define RX_PW_32BYTE         32                        //接收数据宽度32字节  Byte3.5~0   00100000
#define TX_PW_1BYTE          1                         //发送数据宽度1字节   Byte4.5~0
#define TX_PW_32BYTE         32                        //发送数据宽度32字节  Byte4.5~0   00100000

#define RX_ADDRESS_0         RX_ADDRESS >> 24          //接收有效地址第1字节 Byte5       11100111
#define RX_ADDRESS_1         (RX_ADDRESS >> 16) & 0xff //接收有效地址第2字节 Byte6       11100111
#define RX_ADDRESS_2         (RX_ADDRESS >> 8) & 0xff  //接收有效地址第3字节 Byte7       11100111
#define RX_ADDRESS_3         RX_ADDRESS & 0xff         //接收有效地址第4字节 Byte8       11100111
      
#define CRC_MODE_16BIT       0x80                      //CRC16模式           Byte9.7     1
#define CRC_MODE_8BIT        0x00                      //CRC8模式            Byte9.7     
#define CRC_EN               0x40                      //CRC使能             Byte9.6     1
#define CRC16_EN             0xc0                      //CRC16模式使能       Byte9.7~6   11
#define CRC8_EN              0x40                      //CRC8模式使能        Byte9.7~6
#define XOF_20MHz            0x20                      //晶体振荡器频率20MHz Byte9.5~3
#define XOF_16MHz            0x18                      //晶体振荡器频率16MHz Byte9.5~3   100
#define XOF_12MHz            0x10                      //晶体振荡器频率12MHz Byte9.5~3
#define XOF_8MHz             0x08                      //晶体振荡器频率8MHz  Byte9.5~3
#define XOF_4MHz             0x00                      //晶体振荡器频率4MHz  Byte9.5~3
#define UP_CLK_EN            0x40                      //输出时钟使能        Byte9.2     1
#define UP_CLK_FREQ_500kHz   0x03                      //输出时钟频率500kHz  Byte9.1~0   11
#define UP_CLK_FREQ_1MHz     0x02                      //输出时钟频率1MHz    Byte9.1~0
#define UP_CLK_FREQ_2MHz     0x01                      //输出时钟频率2MHz    Byte9.1~0
#define UP_CLK_FREQ_4MHz     0x00                      //输出时钟频率4MHz    Byte9.1~0

#define UP_CLK_EN_500kHz     0x43                      //输出时钟频率500kHz  Byte9.2~0   111
#define UP_CLK_EN_1MHz       0x42                      //输出时钟频率1MHz    Byte9.2~0
#define UP_CLK_EN_2MHz       0x41                      //输出时钟频率2MHz    Byte9.2~0
#define UP_CLK_EN_4MHz       0x40                      //输出时钟频率4MHz    Byte9.2~0

#define TX_ADDRESS_0         TX_ADDRESS >> 24          //发送有效地址第1字节
#define TX_ADDRESS_1         (TX_ADDRESS >> 16) & 0xff //发送有效地址第2字节
#define TX_ADDRESS_2         (TX_ADDRESS >> 8) & 0xff  //发送有效地址第3字节
#define TX_ADDRESS_3         TX_ADDRESS & 0xff         //发送有效地址第4字节

/*-----------------------------------------------
        nrf905命令控制字 author:HotPower
------------------------------------------------*/
#define WC        0x00            // 写配置寄存器命令
#define RC        0x10            // 读配置寄存器命令
#define WTP       0x20            // 写 TX 载荷命令
#define RTP       0x21            // 读 TX 载荷命令
#define WTA       0x22            // 写 TX 地址命令
#define RTA       0x23            // 读 TX 地址命令
#define RRP       0x24            // 读 RX 载荷命令
#define CSN_0    (P5OUT&=~BIT0)
#define CSN_1    (P5OUT|=BIT0)
#define MOSI_0   (P5OUT&=~BIT1)
#define MOSI_1   (P5OUT|= BIT1)
#define MISO     (P5IN&(BIT2))

#define SCK_0       (P5OUT&=~BIT3)
#define SCK_1       (P5OUT|=BIT3)
#define DR          (P4IN&(BIT2))
#define CD          (P4IN&(BIT3))
#define AM          (P4IN&(BIT4))
#define PWR_UP_0    (P4OUT&=~BIT5)
#define PWR_UP_1    (P4OUT|=BIT5)
#define TX_EN_0     (P4OUT&=~BIT6)
#define TX_EN_1     (P4OUT|=BIT6)
#define TRX_CE_0    (P4OUT&=~BIT7)
#define TRX_CE_1    (P4OUT|=BIT7)

extern void InitIO(void);                        // Initialize IO port
extern void NRF905_Config();                        // Config nRF905 module配置NRF905模式
extern void RxPacket();                        // Send data by nRF905
extern void TxPacket();       
extern void NRF905_RxOn();
extern void NRF905_TxOn();
extern void SpiWrite(unsigned char );                        // Write data to nRF905
extern unsigned char SpiRead(void);                        // Read data to nRF905
extern void delay_us(unsigned char n);                        // Delay 100us
extern unsigned char  TxBuf[32];
extern unsigned char  RxBuf[32];
#endif
此帖出自RF/无线论坛
 
 
 

回复

219

帖子

0

TA的资源

一粒金砂(中级)

6
 
就是调试不通,感觉好像模块都没有在工作。有经验的朋友帮我看看。谢谢
此帖出自RF/无线论坛
 
 
 

回复

219

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 板凳 梦之旅 的帖子

能帮我指点指点吗?
此帖出自RF/无线论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(高级)

8
 
这个时序非常重要,特别是发送/接收状态切换的时候以及写发送寄存器的时候,LZ注意一下这两个地方,可以在这两个地方把延时先设长一些
此帖出自RF/无线论坛
 
 
 

回复

219

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 8楼 ghoulich 的帖子

我设的时间都大于650us了,可是感觉发射模块还是没有工作,我是一个发射,一个接收的。
此帖出自RF/无线论坛
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

10
 

OK

void nRF905Init(void)
{
    CSN=1;      // Spi  disable
SCK=0;      // Spi clock line init low
DR=0;      // Init DR for input
AM=0;      // Init AM for input
CD=0;      // Init CD for input
PWR=1;     // nRF905 power on
TRX_CE=0;     // Set nRF905 in standby mode
TXEN=0;     // set radio in Rx mode
}
    如上,我把DR设为了低电平,根据电路基础知识知道,高电平于低电平线与得 低电平,高电平只有与高电平线与才能得高电平。所以现在人们都是通过初始化设管脚为高来设置不需 设输入输出的IO口。由此看来,DR设为高便可。

试试! 我也是用MSP430作为控制器,正在调试中,一个星期了没整出来。欢迎加入QQ
2432748170讨论
此帖出自RF/无线论坛
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

11
 

最全的905系列模块了啊

下载看下吧

NRF905基本特性.txt

3.77 KB, 下载次数: 9

所有和905相关的

此帖出自RF/无线论坛
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

12
 

找我啊

提供10mw   100mw   500mw  1W  2W   NRF905系列模块,欢迎交流 需要请发邮件35625400@qq.com 索要资料
交流方式: 电话:024-62397375(陈先生) QQ: 35625400  MSN: ll88mm88@hotmail.com 邮箱: 35625400@qq.com
此帖出自RF/无线论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表