新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 2.4G無線發射模塊nRF2402應用

        2.4G無線發射模塊nRF2402應用

        作者: 時間:2016-09-07 來源:網絡 收藏

          花了我一個下午的時間,終于調試好了無線發射模塊,有一點值得注意的,是單獨發射模塊,單通道的,具體應用和nRF2401差不多,就是值得注意的是配置控制字(Configuration Word)不一樣。

        本文引用地址:http://www.104case.com/article/201609/296667.htm

         

          模塊引腳圖如下:

          

         

          值得注意到是nRF2402配置控制字和nRF2401不一樣,具體看datasheet,我摘錄了一部分如下

          

         

          有4個字節的控制字,其中D0-D19是需要配置的,D31-D20空,可以配置為0.

          源程序:

          /***********************************************************/

          /*nRF2402學習板V1.0 */

          /*創建人 :鄭 文(ClimberWin) 日期:2010-02-20 */

          /*功能描述:nRF2402無線數據傳輸 */

          /*芯片 :STC89C51RC 晶振 11.0592M */

          /*版本 :V1.0 */

          /***********************************************************/

          //測試OK,功能描述:

          //8個LED接在P0口,低電平有效

          //按鍵1是LED加 按鍵2LED減 按鍵3 LED全亮 按鍵4 LED全滅

          //串口輸出數據

          //添加串口發送數據給單片機再無線發送

          #include

          #include

          #include

          #define uchar unsigned char

          #define uint unsigned int

          #define ulong unsigned long

          //端口定義

          ///////LED定義//////////

          sbit LED1 = P0^0;

          sbit LED2 = P0^1;

          sbit LED3 = P0^2;

          sbit LED4 = P0^3;

          sbit LED5 = P0^4;

          sbit LED6 = P0^5;

          sbit LED7 = P0^6;

          sbit LED8 = P0^7;

          ///////按鍵定義////////////

          sbit K1 = P3^3;

          sbit K2 = P3^4;

          sbit K3 = P3^5;

          sbit K4 = P3^6;

          sbit speaker=P3^7;//蜂鳴器輸出引腳

          /*****************************************/

          void speakertest(void); //蜂鳴器程序

          void init_rs232(void); //串口初始化

          void keytest(void); //按鍵測試程序

          /*****************************************/

          /* 串口通信初始化設置 */

          void init_rs232(void)

          {

          SCON=0x50;

          PCON=0x00;

          TH1=0xFD; //波特率 9600 11.0592MHZ 時候

          TL1=0XFD;

          TMOD=0X20;

          TR1=1;

          }

          void speakertest(void)//蜂鳴器程序

          {

          unsigned char i;

          for(i=0;i<100;i++)

          {

          speaker=0;

          delayms(1);

          speaker=1;

          delayms(1);

          }

          }

          /*****************************************/

          void keytest(void) //按鍵測試程序

          {

          ////////按鍵K1判斷程序////////

          while(K1==0)

          {

          delayms(100);//按鍵去抖

          if(K1==1)

          {

          nRF2402_flag|=0x02; //按鍵標志位nRF2402_flag_bit1=1

          speakertest();

          nRF2402_Data[0]++;

          }

          else

          {;}

          }

          /////////////////////////////

          ////////按鍵K2判斷程序////////

          while(K2==0)

          {

          delayms(100);//按鍵去抖

          if(K2==1)

          {

          nRF2402_flag|=0x02; //按鍵標志位nRF2402_flag_bit1=1

          speakertest();

          nRF2402_Data[0]--;

          }

          else

          {nRF2402_flag&=0xfd; } //清除按鍵標志位nRF2402_flag_bit1=0

          }

          /////////////////////////////

          ////////按鍵K3判斷程序////////

          while(K3==0)

          {

          delayms(100);//按鍵去抖

          if(K3==1)

          {

          nRF2402_flag|=0x02; //按鍵標志位nRF2402_flag_bit1=1

          speakertest();

          nRF2402_Data[0]=0x00;

          }

          else

          {nRF2402_flag&=0xfd; } //清除按鍵標志位nRF2402_flag_bit1=0

          }

          /////////////////////////////

          ////////按鍵K4判斷程序////////

          while(K4==0)

          {

          delayms(100);//按鍵去抖

          if(K4==1)

          {

          nRF2402_flag|=0x02; //按鍵標志位nRF2402_flag_bit1=1

          speakertest();

          nRF2402_Data[0]=0xff;

          }

          else

          {nRF2402_flag&=0xfd; } //清除按鍵標志位nRF2402_flag_bit1=0

          }

          if((nRF2402_flag&0x02)==0x02)//判斷是否有按鍵按下

          {

          P0=~nRF2402_Data[0];

          nRF2402_Transmit_Mode(); //設置為發送模式

          nRF2402_Transmit_Data(nRF2402_Data); //發送數據

          nRF2402_flag&=0xfd; //清除按鍵標志位nRF2402_flag_bit1=0

          }

          else

          {;}

          }

          void main(void)

          {

          delayms(1000);//開機延時

          nRF2402_Data[0] = 0x55;

          init_rs232(); //串口初始化

          TI=1; //串口發射有效

          nRF2402_config(); //nRF2402初始化配置

          delayms(100);

          speakertest(); //蜂鳴器叫一聲

          nRF2402_Transmit_Mode(); //設置為發送模式

          nRF2402_Transmit_Data(nRF2402_Data);//發送測試數據

          SBUF=0x55; //串口輸出0x55 測試是否有正確的串口數據

          delayms(100);

          while (1)

          {

          keytest(); //調用按鍵子程序,無線發送數據

          }

          }

          ///////////////////////////////////////////////////////////////////////////////////////////////

          頭文件:nRF2402.h

          /*************************************************************/

          /**********************中文版本*******************************/

          /*****功能描述 : nRF2402無線收發模塊應用頭文件 *****/

          /*****調試平臺 : 51單片機 11.0592M晶振 *****/

          /*****作 者 : 鄭文(ClimberWin) *****/

          /*****編寫日期 : 2010年02月20日 *****/

          /*****版本信息 : V1.0 *****/

          /*****修改日期 : *****/

          /*************************************************************/

          #ifndef __nRF2402_H__

          #define __nRF2402_H__

          #include

          #include

          #define uchar unsigned char

          #define uint unsigned int

          sbit nRF2402_PWR_UP = P1^4;

          sbit nRF2402_CE = P1^5;

          sbit nRF2402_CS = P1^3;

          //////////////////////

          sbit nRF2402_CLK = P1^6;

          sbit nRF2402_DIN = P1^2;

          //////////////////////

          //Configuration Word datasheet(page17 of 37)

          //Reserved for testing

          #define ADDR_W 2*8 //發送/接收地址寬度(單位:Bit)

          #define DATA1_W 28*8 //通道1 payload數據長度設置(bit)

          //D31 MSB

          #define PLL 0x00 // D19

          #define UNUSED_bit18 0x01 //未定義 必須置1

          #define PREAMBLE_bit17 0x01 //Logic 0: No generation of Preamble |Logic 1: Preamble generation enabled (default)

          #define UNUSED_bit16 0x01 //未定義 必須置1

          #define CRC_L 0x01 //CRC 模式 0:8 位 1:16 位

          #define CRC_EN 0x01 //CRC 校驗 0:禁用 1:啟用

          #define CM 0x01 //0:Direct mode 1:ShockBurst mode

          #define RFDR_SB 0x00 //傳輸速率0:250kbps 1:1Mbps(requires 16MHZ crystal)

          #define XO_F 0x03 //晶振頻率 D11-D9(000:4MHZ 001:8MHZ 010:12MHZ 011:16MHZ 100:20MHZ)

          #define RF_PWR 0x03 //發射模式的輸出功率D8-D7(00:-20dBm 01:-10dBm 10:-5dBm 11:0dBm)

          #define RF_CH 0x02 //Channel 發射頻率設置Channel=2400MHz+RF_CH * 1.0MHz datasheet(page22 of 37)

          uchar code nRF2402_Config_Word[4] =

          {

          0x00,0x07,0xe7,0x82

          };

          uchar code Channel_Addr[]={0x34,0x12,0x00,0x00,0x00};//設置通道1地址,發射和接收必須匹配

          uchar nRF2402_Data[32]; //定義nRF2402數據發送接收臨時存儲地址

          uchar nRF2402_flag;//定義標志位,bit7-bit2 暫時保留 | bit0:是否有接收數據標志位 1:有 0:無

          //| bit1:是否有按鍵數據標志位 1:有 0:無

          void delayms(uint count); //延時程序

          uchar nRF2402_Read_Byte(void); //讀字節

          void nRF2402_Write_Byte(uchar Send_Byte);//寫字節

          void nRF2402_config(void); //參數配置

          void nRF2402_Transmit_Mode(void); //設置為發射模式

          void nRF2402_Transmit_Data(uchar TxBuf[]); //nRF2402發送數據子程序

          /*************延時子程序start*****************/

          void delayms(unsigned int count)

          {

          unsigned int i,j;

          for(i=0;i for(j=0;j<120;j++);

          }

          /**************延時子程序end****************/

          /************讀數據子程序***********/

          uchar nRF2402_Read_Byte(void)

          {

          uchar i,j,temp;

          temp=0x00;

          for (i=0;i<8;i++)

          {

          nRF2402_CLK=1;

          _nop_();

          if (nRF2402_DIN==1) j=1;

          else j=0;

          temp=(temp<<1)|j;

          nRF2402_CLK=0;

          }

          return temp;

          }

          /************寫數據子程序***********/

          void nRF2402_Write_Byte(uchar Send_Byte)

          {

          uchar i;

          for (i=0;i<8;i++)

          {

          Send_Byte=Send_Byte<<1;

          nRF2402_DIN=CY; //讀進位數據

          nRF2402_CLK=1;

          _nop_();

          nRF2402_CLK=0;

          }

          }

          /*********配置參數子程序***********/

          void nRF2402_config(void)

          {

          uchar i;

          //////stand by/////////////

          nRF2402_PWR_UP=1;

          nRF2402_CE=0;

          nRF2402_CS=0;

          ///////////////////////////// datasheet(page24 of 37)

          delayms(3);// PWR_DWN -> ST_BY_mode | MAX 3ms | name: Tpd2sby |

          nRF2402_CS=1; //進入配置模式Configuration

          ////4個字節的配置字////////////// datasheet(page17 of 37)

          for (i=0;i<4;i++)

          {

          nRF2402_Write_Byte(nRF2402_Config_Word[i]);

          }

          delayms(1);

          nRF2402_CS=0; //nRF2402_CS 置低使配置有效 datasheet(page26 of 37);

          }

          /*********設置發射模式子程序*********/

          void nRF2402_Transmit_Mode(void)

          {

          //設置為Active(Tx)模式

          nRF2402_PWR_UP=1;

          nRF2402_CE=1;

          nRF2402_CS=0;

          delayms(1);

          }

          /********發送數據子程序*********/

          void nRF2402_Transmit_Data(uchar temp[]) //datasheet(page22 of 37);

          {

          uchar i;

          nRF2402_CE=1;

          delayms(1);

          for (i=0;i<(ADDR_W/8);i++)//寫入接收地址

          {

          nRF2402_Write_Byte(Channel_Addr[i]);

          }

          for (i=0;i<(DATA1_W/8);i++)//寫入需要發送的數據

          {

          nRF2402_Write_Byte(temp[i]);

          }

          nRF2402_CE=0; //nRF2402_CE 置低使發送有效

          delayms(1);

          }

          #endif



        關鍵詞: 2.4G nRF2402

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 鄂托克前旗| 阿克陶县| 长沙县| 进贤县| 旺苍县| 原阳县| 大兴区| 全州县| 姚安县| 手游| 保康县| 曲松县| 张家川| 措美县| 萨迦县| 孝义市| 依安县| 微山县| 建瓯市| 浮梁县| 秭归县| 兰溪市| 泗水县| 建昌县| 台湾省| 临沧市| 开封县| 克东县| 江达县| 运城市| 美姑县| 沾化县| 太白县| 宝山区| 东莞市| 聂荣县| 玛纳斯县| 曲周县| 永川市| 本溪市| 余干县|