nRF2401无线通信模块调试

发布者:fnfeecjknquc最新更新时间:2012-08-18 来源: 51hei关键字:nRF2401  无线通信  模块调试 手机看文章 扫描二维码
随时随地手机看文章

最近有人过来问2401的调试问题,在这里把调试过程中应该注意的问题简要说明如下:

1.nRF2401是3.3V供电的,电压过低或过高都会对通信造成影响,要么不能完全通信要么断断续续地通信,至于怎么稳压到3.3V,可以采用稳压二级管,可以使用LM317,这几种方法都试用过,都可行。
2.一般的微处理器的I/O口电压为5V,而2401的I/O口电压为3.3V,若直接相连,容易烧坏2401,可以采用串连2K电阻的方法,也可以使用3.3V和5V电平转换芯片如74LVX3245。

3.至于程序部分,一两句话也说不清楚,请仔细阅读nRF2401的使用说明书。下面公布一段2401程序仅供参考,此程序多次修改,久经考验,应该没有问题。

2401.h下面的代码

//说明:nRF2401 CE脚控制收发使能,CS控制片选,均为高电平有效
//===============引脚定义=======================
#define nRF2401_CE_PORT       PORTD.1//
#define nRF2401_CE_DDR        DDRD.1//

#define nRF2401_PWR_PORT    PORTD.0//
#define nRF2401_PWR_DDR     DDRD.0//

#define nRF2401_CS_PORT       PORTD.3//
#define nRF2401_CS_DDR      DDRD.3//  

#define nRF2401_CLK1_PORT   PORTD.5//
#define nRF2401_CLK1_DDR  DDRD.5// 

#define nRF2401_DATA1_PORT   PORTD.4
#define nRF2401_DATA1_DDR  DDRD.4 
#define nRF2401_DATA1_PIN  PIND.4

#define nRF2401_DR1_PORT     PORTD.2//
#define nRF2401_DR1_DDR    DDRD.2//
#define nRF2401_DR1_PIN    PIND.2//

unsigned char Address[4]={0x00,0x00,0x00,0x99};                                   

//===================配置字定义================================
unsigned char nRF2401_InitData[15]={    //设配置字          //test
8,8,                        //通道2与通道1数据宽度设置为8位
0,0,0,0,57,                 //通道2接收地址
0x00,0x00,0x00,0x00,0x99,  //通道1接收地址
0x83,                      //通道1和通道2地址宽度为32位,开CRC,16位,CRC 校验
0x6F, //4F  //双频道功能禁用,ShockBurst mode,传输速率1M,晶振频率16M
0x02                       //Channel = 2400MHz + RF_CH * 1.0MHz ,发送模式
};                         //0:Tx 1:Rx                                          
//===========================================================

//===================发送单字节数据==============================
void nRF2401_SendByte(unsigned char Data)
 {
  unsigned char i;
  nRF2401_DATA1_DDR = 1;
  for(i=0;i<8;i++)
  {
     if((Data&0x80)!=0)
     nRF2401_DATA1_PORT=1;
     else  nRF2401_DATA1_PORT=0;
     delay_us(1);  //最小500ns   
     nRF2401_CLK1_PORT=1;
     delay_us(1);//最小500ns
     Data<<=1;
     nRF2401_CLK1_PORT=0;
     delay_us(1);
   } 
 }
//===========================================================
//==================从nRF2401A数据缓冲区读取数据==================
void nRF2401_GetData(unsigned char *DataBuffer)
 {
   unsigned char i=0,temp=0;
   nRF2401_DATA1_DDR =  0;//数据输入
   while(nRF2401_DR1_PIN)
   {
    for(i=0;i<8;i++)
    {
      temp<<=1;  
      nRF2401_CLK1_PORT=1;delay_us(1);
      temp|=nRF2401_DATA1_PIN;
      nRF2401_CLK1_PORT=0;delay_us(1); 
    }
   }
   *DataBuffer=temp;
 }                                  

//=====================nRF2401A发送/接收方式设置=================
//Mode=0:发送方式   Mode=1:接收方式
void nRF2401_SetMode(unsigned char Mode)
 { 
     nRF2401_PWR_PORT=1;nRF2401_CE_PORT=0;nRF2401_CS_PORT=1;//设置模式
     nRF2401_DATA1_DDR = 1;
     delay_us(10);  //最小5us进入配置模式
     nRF2401_DATA1_PORT=Mode;                                    
     nRF2401_CLK1_PORT=1;delay_us(1);
     nRF2401_CLK1_PORT=0;delay_us(1);       //写入最低配置位
     nRF2401_PWR_PORT=1;nRF2401_CS_PORT=0;nRF2401_CE_PORT=1; //进入收发模式、
     delay_us(300);
 }
//===========================================================

//====================数据发送=================================
void nRF2401_SendData(unsigned char *Address,unsigned char DataBuffer)
 {
   unsigned char i=4; 
   nRF2401_PWR_PORT=1;nRF2401_CS_PORT=0;nRF2401_CE_PORT=1;  //进入收发模式    
   delay_us(10);
   while(i--)nRF2401_SendByte(*Address++);                //发送地址字节 
   nRF2401_SendByte(DataBuffer);            //发送数据字节
   nRF2401_CE_PORT=0;                       //发射数据
   delay_us(300);    //等待结束
 }
//===========================================================

//======================初始化===============================
void nRF2401_Init()
 {                       
     unsigned char i;
     nRF2401_CLK1_DDR=1;
     nRF2401_DATA1_DDR=1;
     nRF2401_CS_DDR = 1;
     nRF2401_CE_DDR = 1;
     nRF2401_PWR_DDR = 1;
     nRF2401_DR1_DDR = 0;
    
     nRF2401_DR1_PORT=0;
     nRF2401_CLK1_PORT=0;
     nRF2401_DATA1_PORT=0;
    
     nRF2401_CE_PORT=0;
     nRF2401_CS_PORT=0;//空闲模式,低功耗
     nRF2401_PWR_PORT=1;//上电
     delay_ms(5);//从上电到进入配置模式最大 3ms 的延时
     nRF2401_CS_PORT=1;//进入配置模式
     delay_us(10); //最小5us              
     for(i=0;i<15;i++)nRF2401_SendByte(nRF2401_InitData[i]);
     delay_us(10);
     nRF2401_CS_PORT=0;            //低功耗模式    
     delay_ms(6);
 }
//===========================================================

 

现将发送部分和接收部分的程序一并贴上

发送部分:

//=======单片机:ATmega16,编译器:CodeVision v1.24==========

#include
#include
#include "2401.h" 
unsigned char a=0;
main()
{
  nRF2401_Init();
  nRF2401_SetMode(0);//发送模式
while(1)
{ 
  nRF2401_SendData(Address,a++);
  delay_ms(100);    
}
}

接收部分:

//=======单片机:ATmega16,编译器:CodeVision v1.24==========

//==== 采用的是中断接收方式=================================

//Writen by ChenZhou
#include
#include
#include "2401.h" 
unsigned char a=0;
main()
{
  MCUCR=0X03;GICR=0X40;#asm("sei");//启用外部中断INT0,上升沿中断
  nRF2401_Init();
  nRF2401_SetMode(1);//接收模式
while(1)
{ 
//=========在这里显示变量a的数值即可,若为0到225则是正确的
  delay_ms(10);        
}
}

interrupt [2] void int0(void)
{
nRF2401_GetData(&a);
} 
关键字:nRF2401  无线通信  模块调试 引用地址:nRF2401无线通信模块调试

上一篇:边显示滚动汉字边播放音乐的汇编程序
下一篇:AT89s52-LCD12864多页菜单按键选择操作

推荐阅读最新更新时间:2024-03-16 13:06

ZigBee无线通信--BasicRF无线点对点通信
实验现象: 一个EB2530(终端A)定义为发射模块,另一个EB2530(终端B)定义为接收模块。 按EB2530(终端A)上的按键,无线控制另一个EB2530(终端B)上的LED1灯亮灭。 Main函数开始初始化外设、配置通信参数: 在初始化好之后,判断appMode的值,来决定进入发射模式还是接收模式 在发送模式时是核心在于basicRfSendPacket~ 在接收模式中,看代码也比较好理解:
[单片机]
ZigBee<font color='red'>无线通信</font>--BasicRF无线点对点通信
C1210的GPRS无线通信系统设计
引言 近年来,通信技术和网络技术的迅速发展,特别是无线通信技术的发展,使得电力系统的自动化程度进一步提高。GSM网络出现后,技术人员很快把GSM模块嵌入到各种仪表仪器中,如多功能电能表、故障测录仪、抄表系统和用电负荷监控等,从而使这些仪表仪器具有远程通信功能。 GPRS是在现有GSM系统上发展出来的一种新的数据承载业务,支持TCP/IP协议,可以与分组数据网(Internet等)直接互通。GPRS无线传输系统的应用范围非常广泛,几乎可以涵盖所有的中低业务和低速率的数据传输,尤其适合突发的小流量数据传输业务。 本文设计的GPRS无线通信模块,内嵌了TCP/IP协议,采用工业级的GPRS模块,适用于单片机数据采集传输系统没有TCP/
[单片机]
C1210的GPRS<font color='red'>无线通信</font>系统设计
STM32F103C8T6的RC522 RFID模块调试程序
单片机源程序如下: #include usart.h #include stm32f10x_spi.h #include RC522.h #include delay.h #include string.h #include spi_driver.h #include stdio.h /****************************************************************************** 硬件连接 STM32F103C8T6 RC522模块 PA4(SPI1_NSS) SDA PA5(SPI1_SCK) S
[单片机]
STM32F103C8T6的RC522 RFID<font color='red'>模块</font><font color='red'>调试</font>程序
Imagination发布最新款Ensigma无线通信IP 支持WiFi与蓝牙
Imagination的GPU IP很出名,收购MIPS后也有了CPU IP,可你并不一定了解Ensigma内核,Ensigma是通信类IP,主要是与ARM及CEVA竞争,目标市场是无线相关设计领域。 芯片和IP公司从来都是注重性能指标、面积及功耗,Imagination无线事业部副总裁Chakra Parvathaneni表示: 我们的技术相比于其他厂商有两倍的性能优势,同时待机功耗也是最低的。 公司新推出的Ensigma Whisper射频处理单元(PSU),采用第五代架构,集成WiFi802.11n、蓝牙两种无线技术,RPU采用MIPS架构,产品结合了软件定义的灵活性及硬件处理的高速度两个特点。 尽管I
[半导体设计/制造]
Imagination发布最新款Ensigma<font color='red'>无线通信</font>IP 支持WiFi与蓝牙
单片机与无线通信技术在特殊探测需求下的应用实例
作者:张啸 韩孝冉 汪荣权 全方逸 摘 要: 为实现某些特殊场合下的信息探测,在总结国内外探测系统研究现状和不足之处的基础上,提出了一种基于和模块的信息探测机器人设计方案,阐述了该探测机器人系统关键部分的、软件设计方案,并对其整体的功能设计方案进行了实际验证及改进。实验结果表明,在一定的工作范围内,探测机器人能实现对信息的实时采集和传输,人员也可对其进行远程操控。 0 引言 在生产和日常生活中,常会出现寻物、探测、救援等特殊需求,涉及的地点有可能是狭小空间、较深洞穴、建筑废墟,甚至是含有毒物质的空间,这些工作场合往往人员难以进入,可越障运行、探测并传输信息的无人化探测机器人在此显得极为重要
[机器人]
Imagination Ensigma 无线通信 IP 通过 Wi-Fi CERTIFIED™ 认证
2016 年 12 月 19 日─ ─ Imagination Technologies 宣布,该公司的高性能 Ensigma Explorer 无线通信 IP 已再次获得 Wi-Fi CERTIFIED™ 认证。此次的认证以基于 CxT200 芯片的参考设计而取得,而 CxT200 正是 Creator Ci40 开发板所内置的芯片。Wi-Fi 联盟 (Wi-Fi Alliance®) 的认证包含:针Wi-Fi CERTIFIED a、b、g、n、ac;且包含两个空间流的认证;以及WPA™ — 企业与个人;WPA2™ — 企业与个人;还有 WMM®。 通过单一架构来支持所有的无线通信标准,Imagination Ensigm
[网络通信]
2.4GHz射频芯片CC2420实现ZigBee无线通信设计
摘要:CC2420是Chipcon公司推出的一款符合IEEE 802.15.4规范的2.4GHz射频芯片,用来开发工业无线传感及家庭组网等PAN网络的ZigBee设备和产品。文中介绍了CC2420的主要功能、结构及典型应用电路。 关键词:IEEE802.15.4;多点对多点通信;ZigBee;CC2420 1 引言 ZigBee是一种基于IEEE 802.15.4规范的无线技术。它具有在802.15.4规范上创建的安全和应用层接口、工作于免授权频段、以年计算的超低电池寿命、低至3美金的超低成本、极大可伸缩的网格和星型网络拓扑每个主设备可支持4万多个节点等诸多优点是家庭互联、工厂自动化、医疗设备、传感网络和汽车应用等的理
[网络通信]
硅锗技术以功率放大器进军无线通信和手机应用领域
随着工艺进步,硅锗技术业已用于CDMA、GSM和 WLAN 应用中的高功率放大器,提供新一代集成解决方案   现今,硅锗 (silicon germanium, SiGe) 技术已经从一种富有潜力的技术,发展成为目前和新一代移动设备的先进解决方案,广泛应用于手机、无线局域网 (WLAN) 和蓝牙等产品。自上世纪 80 年代问世以来,SiGe 一直是那些追求低成本,并要求性能高于普通硅器件的高频应用开发人员最感兴趣的一种半导体材料。在无线通信应用中,这种技术已被广泛接受,用于下变频器、低噪声放大器 (low-noise amplifier, LNA)、前置放大器 (preamplifier) 和 WLAN 功率放大器 (power
[半导体设计/制造]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved