社区
C语言
帖子详情
NRF905一对多的问题
ywchn999123
2012-05-10 01:30:52
各位大虾,我现在在做NRF905的毕设。情况是这样的,我有一个主单片机板子,2个采集板子和一个控制板子。原理是两个采集部分采集到数据,通过NRF905传给主单片机,然后主单片机通过判断向控制的板子发送命令,做出相应的控制。单片机是用的STC的。请问这之间需要注意些什么,怎么样才能实现主单片机的接收和发送?????还有能否提供这方面的c程序?拜托了!!!
...全文
1433
9
打赏
收藏
NRF905一对多的问题
各位大虾,我现在在做NRF905的毕设。情况是这样的,我有一个主单片机板子,2个采集板子和一个控制板子。原理是两个采集部分采集到数据,通过NRF905传给主单片机,然后主单片机通过判断向控制的板子发送命令,做出相应的控制。单片机是用的STC的。请问这之间需要注意些什么,怎么样才能实现主单片机的接收和发送?????还有能否提供这方面的c程序?拜托了!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tingzhoubao
2014-09-01
打赏
举报
回复
楼主,#7是你用NRF905实现一发多收的源程序吗?
rfinchina2012
2012-08-14
打赏
举报
回复
nRF905是挪威Nordic公司推出的一款单片射频发射器芯片,采用32引脚5mm×5mm QFN封装,工作于433、868、915MHz 3个ISM(工业、科学和医学)频道,其中国内433频段可以免费使用。nRF905由频率合成器、接收解调器、功率放大器、晶体振荡器、调制器等功能组成,不需要外加声表滤波器也可以有良好的通信效果。nRF905使用SPI接口可以和任何MCU进行通信,其中地址、输出功率和通信频道可通过程序进行配置,所以可以用于多机通信。nRF905融合了ShockBurstTM技术,可以自动处理数据包字头,且内置CRC校验功能,确保数据可靠传输。nRF905功耗很低,在以-10dBm的功率发射时,工作电流也只有11mA;而对应接收机的工作电流只有12.5 mA,芯片可以软件设置空闲模式、关机模式,易于节能设计。适合工业数据采集、无线报警及安全系统等诸多领用。
NRF905基本特性
工作电压:1.9-3.6V
调制方式:GFSK
接收灵敏度:-100dBm
最大发射功率: 10mW (+10dBm)
最大传输数率:50kbps
瞬间最大工作电流: <30mA
工作频率:(422.4-473.5MHZ)
低功耗,待机模式下仅2.5uA;
可软件编程实现自动重发功能;
硬件集成载波侦听功能,地址匹配、收发完成状态指示;
发射速率恒定为50Kbit/s,GFSK调制解调抗干扰性能强;
433/868/915工作频段,国内433MHZ为ISM频段可免许使用;
接收发送功能合一,可实现半双工通信,收发完成状态指示;
10dbm发射功率条件下,配外置鞭状天线通信距离在300米左右;
内置硬件8/16位CRC校验,数据传输可靠稳定,降低系统开发难度;
芯片地址、工作频率可编程,可采用TDMA-FDMA原理实现无线网络通讯;
内置SPI接口,最高SPI时钟可大10Mbit/s,也可通过I/O口模拟SPI实现;
室内通信良好通信效果,3层之间可实现有效通信,很强的扰障碍穿透性能;
单次最多可发送接收32字节,并可软件设置发送/接收缓冲区大小2/4/8/16/32字节;
10dbm(10mw-200米左右)微功率:http://item.taobao.com/item.htm?id=1013188358&
20dbm(0.1w-500米左右)微功率:http://item.taobao.com/item.htm?id=1942649132&
27dbn(0.5w-800米左右)远距离:http://item.taobao.com/item.htm?id=3642435356&
30dbm(1w-1000米左右)远距离:http://item.taobao.com/item.htm?id=17739582&
33dbm(2w-2000米左右)远距离:http://item.taobao.com/item.htm?id=2954348816&
NRF905-51版本模块功能介绍:http://item.taobao.com/item.htm?id=10400633068&frm=
NRF905-avr版本模块功能介绍:http://item.taobao.com/item.htm?id=10508099098&frm=
NRF905-51评估板:http://item.taobao.com/item.htm?id=8731411120&
NRF905-AVR评估板:http://item.taobao.com/item.htm?id=1213057118&
NRF905-430评估板:http://item.taobao.com/item.htm?id=2883025694&
提供10mw 100mw 500mw 1W 2W NRF905系列模块,欢迎交流 需要请发邮件35625400@qq.com 索要资料
交流方式: 电话:024-62397375(陈先生) QQ: 35625400 MSN: ll88mm88@hotmail.com 邮箱: 35625400@qq.com
ywchn999123
2012-05-26
打赏
举报
回复
#include"reg52.h"
#include <intrins.h>
#include<absacc.h>
#include<stdio.h>
typedef unsigned char uchar;
typedef unsigned int uint;
//uint add=0xE8;
sbit RS = P2^5;
sbit RW = P2^6;
sbit E = P2^7;
sbit RES = P2^3;
sbit PSB = P2^4;
sbit F= P2^2;
sbit TXEN = P1^0;
sbit TRX_CE = P3^3;
sbit PWR = P1^1;
//状态输出口//
sbit CD = P1^2;
sbit AM = P3^2;
sbit DR = P1^3;
//SPI口定义//
sbit MISO = P1^7;
sbit MOSI = P1^4;
sbit SCK = P1^6;
sbit CSN = P1^5;
#define DataPort P0 //MCU P0<------> LCM
unsigned char value;
unsigned int flag=1;
void Init_Timer0();
void InitUART (void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs2x(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
检测忙位
------------------------------------------------*/
void Check_Busy()
{
RS=0;
RW=1;
E=1;
DataPort=0xff;
while((DataPort&0x80)==0x80);//忙则等待
E=0;
}
/*------------------------------------------------
写命令
------------------------------------------------*/
void Write_Cmd(unsigned char Cmd)
{
Check_Busy();
RS=0;
RW=0;
E=1;
DataPort=Cmd;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/*------------------------------------------------
写数据
------------------------------------------------*/
void Write_Data(unsigned char Data)
{
Check_Busy();
RS=1;
RW=0;
E=1;
DataPort=Data;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/*------------------------------------------------
液晶屏初始化
------------------------------------------------*/
void Init_ST7920()
{
DelayMs2x(20); //大于40MS的延时程序
PSB=1; //设置为8BIT并口工作模式
DelayMs2x(1); //延时
RES=0; //复位
DelayMs2x(1); //延时
RES=1; //复位置高
DelayMs2x(10);
Write_Cmd(0x30); //选择基本指令集
DelayUs2x(30); //延时大于100us
Write_Cmd(0x30); //选择8bit数据流
DelayUs2x(20); //延时大于37us
Write_Cmd(0x0c); //开显示(无游标、不反白)
DelayUs2x(30); //延时大于100us
Write_Cmd(0x01); //清除显示,并且设定地址指针为00H
DelayMs2x(15); //延时大于10ms
Write_Cmd(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动
DelayUs2x(30); //延时大于100us
}
void Lcd_Pst(unsigned char x,unsigned char y)
{
switch(y)
{
case 1:Write_Cmd(0x80+x);break;
case 2:Write_Cmd(0x90+x);break;
case 3:Write_Cmd(0x88+x);break;
case 4:Write_Cmd(0x98+x);break;
default:break;
}
}
void Lcd_Putstring(unsigned char code *s)
{
while(*s>0)
{
Write_Data(*s);
s++;
DelayUs2x(50);
}
}
/*------------------------------------------------
清屏
------------------------------------------------*/
void ClrScreen()
{
Write_Cmd(0x01);
DelayMs2x(15);
}
uchar TxRxBuffer[10];
uchar rxBuffer[6]={1,2,3,4,5,6};
bit lcdbit;
//延时
void Delay(uint x)
{
uint i;
for(i=0;i<x;i++){
_nop_();
}
}
//----------------------------------------------
//RF寄存器配置//
unsigned char idata RFConf[11]=
{
0x00, //配置命令
0x6C, //CH_NO,配置频段在433.2MHZ
0x0C, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x0A,0x06, //接收发送有效数据长度为4字节
0xE7,0xE7,0xE7,0xC2,//接收地址
0xDE, //CRC充许,16位CRC校验,外部时钟信号使能,16M晶振
};
//SPI口写数据到nRF905
void SpiWrite(uchar b)
{
uchar i=8;
while (i--)
{
Delay(10);
SCK=0;
MOSI=(bit)(b&0x80);
b<<=1 ;
Delay(10);
SCK=1;
Delay(10);
SCK=0;
}
SCK=0;
}
//由nRF905读数据
uchar SpiRead(void)
{
uchar i=8;
uchar ddata=0;
while (i--)
{
ddata<<=1 ;
SCK=0;
_nop_();_nop_();
ddata|=MISO;
SCK=1 ;
_nop_();_nop_();
}
SCK=0;
return ddata;
}
//接收数据包
void RxPacket(void)
{
uchar i;
i=0;
while(DR)
{
TxRxBuffer[i] = SpiRead();
i++;
}
}
/*
;写发射数据命令:20H
;读发射数据命令:21H
;写发射地址命令:22H
;读发射地址命令:23H
;读接收数据命令:24H
*/
void TxPacket(void)
{
TXEN=1;
CSN=0;
SpiWrite(0x22); //写发送地址,后面跟4字节地址//
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xC5);
CSN=1;
_nop_();_nop_();
CSN=0;
SpiWrite(0x20); //写发送数据命令
//SpiWrite(xuzu[0]); //四字节数据,符号位或百位
SpiWrite(rxBuffer[0]); //十位
SpiWrite(rxBuffer[1]); //个位
SpiWrite(rxBuffer[2]); //小数位
SpiWrite(rxBuffer[3]);
SpiWrite(rxBuffer[4]);
SpiWrite(rxBuffer[5]);
CSN=1;
_nop_();_nop_();
TRX_CE=1; //使能发射模式//
Delay(50); //等待发送完成
TRX_CE=0;
while(!DR);
}
/*
;写发射数据命令:20H
;读发射数据命令:21H
;写发射地址命令:22H
;读发射地址命令:23H
;读接收数据命令:24H
*/
//--------------------------------------
void DelayMs(uint n) //j=115@F=11.0592MHz
{ uchar j;
while(n--)
{for(j=0;j<115;j++);}
}
//等待接收数据包
//uchar temp;
void Wait_Rec_Packet(void)
{
TXEN=0;
TRX_CE=1;
while(1)
{
if(DR)
{
TRX_CE=0; //若数据准备好则进入待机模式,操作SPI
CSN=0;
SpiWrite(0x24);
RxPacket();
CSN=1;
DelayMs(200);
//}
break;
}
}
}
//初始化配置寄存器
void Ini_System(void)
{
uchar i;
CSN=1;
SCK=0;
PWR=1;
TRX_CE=0;//SPI写入
TXEN=0;
_nop_();
CSN=0;
for(i=0;i<11;i++)
{
if((i==9)&&(flag==0))RFConf[i]=0xC2;
if((i==9)&&(flag==1))RFConf[i]=0xC3;
if((i==9)&&(flag==2))RFConf[i]=0xC4;
SpiWrite(RFConf[i]);
}
//
CSN=1;
PWR=1;
if(flag!=2){
TRX_CE=1;//
TXEN=0; }
Delay(1000);
}
void main()
{
unsigned char kk=1;
InitUART();
Init_ST7920();
Ini_System();
Lcd_Pst(2,2);
Lcd_Putstring("Waitting...");
while(1)
{
switch(RFConf[9])
{
case 0xC2: {
Wait_Rec_Packet();
if(kk==1){kk=0;ClrScreen(); }
DelayMs(100);
Lcd_Pst(0,1);
Lcd_Putstring("C2 Rx1:");
Write_Data(0x30+TxRxBuffer[0]);
Write_Data(0x30+TxRxBuffer[1]);
Write_Data(TxRxBuffer[2]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[3]+0x30);
Write_Data(TxRxBuffer[4]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[5]+0x30);
Lcd_Pst(2,2);
Write_Data(TxRxBuffer[6]+0x30);
Write_Data(TxRxBuffer[7]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[8]+0x30);
Write_Data(TxRxBuffer[9]+0x30);
flag=1;
break;}
case 0xC3: {
Wait_Rec_Packet();
DelayMs(100);
Lcd_Pst(0,3);
Lcd_Putstring("C3 Rx2:");
Write_Data(0x30+TxRxBuffer[0]);
Write_Data(0x30+TxRxBuffer[1]);
Write_Data(TxRxBuffer[2]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[3]+0x30);
Write_Data(TxRxBuffer[4]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[5]+0x30);
Lcd_Pst(2,4);
Write_Data(TxRxBuffer[6]+0x30);
Write_Data(TxRxBuffer[7]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[8]+0x30);
Write_Data(TxRxBuffer[9]+0x30);
flag=2;
break;}
case 0xC4: {
ClrScreen();
Lcd_Pst(0,1);
Lcd_Putstring("C4 Tx:");
TxPacket();
ClrScreen();
Lcd_Pst(0,2);
Lcd_Putstring("C4 Tx:");
Write_Data(0x30+TxRxBuffer[0]);
Write_Data(0x30+TxRxBuffer[1]);
Write_Data(TxRxBuffer[2]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[3]+0x30);
Write_Data(TxRxBuffer[4]+0x30);
Write_Data('.');
Write_Data(rxBuffer[5]+0x30);
flag=0;
break;}
default: break;
}
Ini_System();
DelayMs(1000);
}
}
ywchn999123
2012-05-26
打赏
举报
回复
谢谢,其实我们已经弄的差不多了。通过地址码来区分的,就是一个地址问题,然后在switch一次判断。另外我们外加了fameview,GSM和一个远程控制软件。综合起来功能还是比较充实的。最后还是谢谢你的热心!!!!
langeldep
2012-05-15
打赏
举报
回复
其实这种东西类似早期的串口通信, 你不必使用socket, 就使用 NRF905即可。 你要遵循其规则, 我上面发了例子, 希望对你有用。
langeldep
2012-05-15
打赏
举报
回复
NRF905 无线传输c程序
发送部分
/****************************
//写发射数据命令:20H
//读发射数据命令:21H
//写发射地址命令:22H
//读发射地址命令:23H //读接收数据命令:24H
******************************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit TXEN = P2^7; //配置口定义5`6`7//
sbit TRX_CE = P2^6;
sbit PWR = P2^5;
sbit MISO = P2^2; //SPI口定义0`1`2`3//
sbit MOSI = P2^3;
sbit SCK = P2^1;
sbit CSN = P2^0;
sbit DR = P2^4; //状态输出口4//
sbit led=P1^0;
/************//*RF寄存器配置*//*************
// 0x00, //配置命令//
// 0x6C, //CH_NO,配置频段在433.2MHZ
// 0x0E, //输出功率为10db,不重发,节电为正常模式
// 0x44, //地址宽度设置,为4字节
// 0x03,0x03, //接收发送有效数据长度为3字节
// 0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校验,外部时钟信号使能,16M晶振//UP_CLK输出1MHZ频率
// 0xDE, //CRC充许
//******************************/
/*uchar code RFConf[11]={0x00,0x6c,0x0e,0x44,0x03,0x03,
0xe7,0xe7,0xe7,0xe7,0xde};
*/
uchar RFConf[11]=
{
0x00, //配置命令//
0x4c, //CH_NO,配置频段在423MHZ
0x0C, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x02,0x02, //接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC, //接收地址
0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void SpiWrite(uchar date) //用SPI口写数据至NRF905内//
{
uchar i;
for(i=0;i<8;i++)
{
delay(1);
SCK=0;
MOSI=(date&0x80);
date<<=1 ;
delay(1);
SCK=1;
delay(1);
SCK=0;
}
SCK=0;
}
void TxPacket(void)
{
// TXEN=1;
CSN=0;
SpiWrite(0x22); //写发送地址,后面跟4字节地址//
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
CSN=1;
delay(1);
CSN=0;
SpiWrite(0x20); //写发送数据命令,后面跟三字节数据//
SpiWrite(0x01);
SpiWrite(0x02);
// SpiWrite(0x04);
CSN=1;
delay(1);
TRX_CE=1;
TXEN=1; //CE,EN同时为1,为发送模式
delay(1); //等带发送完成//
led=~led;
// while(!DR); //在非屏蔽状态下,只能发射一次
TRX_CE=0;
//led=~led; //加上led后,对接收产生了一定的影响,
//while(!DR); //有时多接收一次的数据
}
void Ini_System(void)
{ //初始化配置寄存器//
uchar i;
// delay(1);
CSN=1;
SCK=0;
DR=0;
PWR=1; //进入掉电模式
TRX_CE=0;
TXEN=0;
delay(1);
CSN=0; //进入SIP模式
for(i=0;i<11;i++)
{
SpiWrite(RFConf[i]); //设置配置寄存器
}
CSN=1; //关闭SPI,进入发射状态
// PWR=1;
}
void main(void)
{
led=1;
Ini_System(); //设置配置,并进入发射模式
// PWR=1; //进入掉电模式
while(1)
{
TxPacket(); //发送数据
led=~led;
DR=0;
}
}
接收部分
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
bit lcdbit;
sbit TXEN = P2^7; //配置口定义7`6`5//
sbit TRX_CE = P2^6;
sbit PWR = P2^5;
sbit MISO = P2^2; //SPI口定义0`1`2`3//
sbit MOSI = P2^3;
sbit SCK = P2^1;
sbit CSN = P2^0;
sbit DR = P2^4; //状态输出口4//
sbit led=P1^0;
/************//*RF寄存器配置*//*************
// 0x00, //配置命令//
// 0x6C, //CH_NO,配置频段在433.2MHZ
// 0x0E, //输出功率为10db,不重发,节电为正常模式
// 0x44, //地址宽度设置,为4字节
// 0x03,0x03, //接收发送有效数据长度为3字节
// 0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校验,外部时钟信号使能,16M晶振//UP_CLK输出1MHZ频率
// 0xDE, //CRC充许
//******************************/
/*uchar code RFConf[11]={0x00,0x6c,0x0e,0x44,0x03,0x03,
0xe7,0xe7,0xe7,0xe7,0xde};
*/
uchar RFConf[11]={ //配置命令//
0x00,0x4c,0x0c,0x44,0x02,0x02,
0xcc,0xcc,0xcc,0xcc,0x58 //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
uchar TxRxBuffer[2];
uchar date;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void SpiWrite(unsigned char date) //用SPI口写数据至NRF905内//
{
uchar i;
for(i=0;i<8;i++)
{
delay(1);
SCK=0;
MOSI=(date&0x80);
date<<=1 ;
delay(1);
SCK=1;
delay(1);
SCK=0;
}
SCK=0;
}
unsigned char SpiRead(void) //from 905 read data//
{
uchar i;
for(i=0;i<8;i++)
{
date<<=1 ;
SCK=0;
delay(1);
date|=MISO;
SCK=1 ;
delay(1);
}
SCK=0;
return(date);
}
void RxPacket(void) //接收数据包//
{
uchar i;
//while(DR)
for (i = 0 ;i < 2 ;i++)
{
//led=~led;
TxRxBuffer[i] = SpiRead();
//i++;
}
}
void Wait_Rec_Packet(void) //等待接收数据包//
{
// uchar temp;
// PWR=1;
TXEN=0; //接收模式
TRX_CE=1;
delay(2);
while(!DR)
{ delay(10);
// if(DR) //数据接收成功
{
led=~led;
TRX_CE=0; //如果数据准备好,则进入待机模式,以便SPI口操作
CSN=0;
delay(1);
SpiWrite(0x24); //读nRF905所接受到的数据
RxPacket(); //保存数据
CSN=1;
delay(10);
TRX_CE=1;
/*temp=TxRxBuffer[0]+TxRxBuffer[1]+TxRxBuffer[2];
if(temp==0x07)
{
lcdbit=!lcdbit; //lcdbit=0
}*/
break;
}
}
}
void Ini_System(void) //初始化配置寄存器//
{
uchar i;
//lcdbit=1;
CSN=1;
SCK=0;
DR=0;
PWR=1; //进入掉电模式
TRX_CE=0;
TXEN=0;
delay(1);
CSN=0; //进入SIP模式
for(i=0;i<11;i++)
{
SpiWrite(RFConf[i]); //设置配置寄存器
}
CSN=1; //关闭SPI,进入接收状态
PWR=1;
//TRX_CE=1;
//TXEN=0;
}
void main(void)
{
P0=0x00;
led=1;
Ini_System(); //设置配置,并进入接收模式 (收)
PWR=1; //进入掉电模式
while(1)
{
Wait_Rec_Packet(); //等待接收完成,保存完接收数据(保存数据+地址)
//CSN=0;
P0 = TxRxBuffer[0];
delay(600);
P0 = TxRxBuffer[1];
delay(600);
P0 = TxRxBuffer[2];
delay(600);
//CSN=1;
}
}
程序经本人测试后没太大问题,如要深入研究,本人附加详细资料,希望对您有所帮助。
附加资料
基于nRF905 模块的AT89S 单片机无线收发系统设计
管脚 名称 管脚功能 说明
1 VCC 电源 电源+3.3~3.6V DC
2 TX_EN 数字输入 工作模式选择
3 TRX_CE 数字输入 使能芯片发射或接收
4 PWR_UP 数字输入 芯片上电
5 uCLK 时钟输出 (未使用)
6 CD 数字输出 载波检测
7 AM 数字输出 地址匹配
8 DR 数字输出 接收或发射数据完成
9 MISO SPI 接口 SPI 输出
10 MOSI SPI 接口 SPI 输入
11 SCK SPI 时钟 SPI 时钟
12 CSN SPI 使能 SPI 使能
13、14 GND 地 接地
下面为典型的 nRF905 模块数据发送流程[3]:
(1)当微控制器要发送数据时,将接收机的地址和发
送数据通过SPI 接口传输给nRF905 模块;
(2)微控制器设置TRX_CE 和TX_EN 管脚同时置为
高电平,启动发送端的nRF905 模块为发送模式;
(3)发送端的nRF905 模块发送过程处理:
a)射频寄存器开启;
b)数据打包(加字头和CRC 校验码);
c)数据包发送;
d)当数据包发送结束,将数据发送完成管脚(DR 管脚)
置为高电平;
(4)如果AUTO_RETRAN 被设置为高,nRF905 模块
将连续地发送数据包,直到TRX_CE 被设置为低;
(5)TRX_CE 被设置为低时,nRF905 模块数据包发送
过程结束并回到待机模式。
AT89S 单片机控制nRF905 模块数据发送流程图如图3
所示。
下面为典型的 nRF905 模块数据接收流程[4]:
(1)微控制器控制TRX_CE 为高电平、TX_EN 为低电
平,nRF905 模块进入接收模式;
(2)650us 后,nRF905 模块监测空中的信息,等待接
收数据;
(3)当nRF905 模块检测到与接收频率相同的载波时,
设置载波检测管脚(CD 管脚)为高电平;
(4)当nRF905 模块接收到有效的地址时,设置地址匹
配管脚(AM 管脚)为高电平;
(5)当一个正确的数据包接收完毕后,nRF905 模块自
动去掉数据包的字头、地址和CRC 校验码,然后将数据接
受完成管脚置为高电平;
(6)微控制器将TRX_CE 设置为低电平;
(7)微控制器通过SPI 接口以一定的速率提取数据包
中的有效接收数据;
(8)当所有的有效数据接收完毕,微控制器控制nRF905
模块数据接收完成管脚(DR 管脚)和地址匹配管脚(AM
管脚)为低电平;
(9)nRF905 进入待机模式。
说明:(1)VCC电压范围为DC 3.3V~3.6V之间,不能超过3.6V否则会烧坏模块。
(2)模块
AnYidan
2012-05-15
打赏
举报
回复
用什么协议,
数据采集后的处理
ywchn999123
2012-05-14
打赏
举报
回复
这几被板子都是放在大棚里的各个点上,要求就是要用NRF905做传输。另外我是学C的,现在学SOCKET有点迟了。
langeldep
2012-05-10
打赏
举报
回复
你这几个板子如果都在一起的话, 串口链接, 通过RS232串口API即可进行通信, 如果是距离很远, 用网线进行数据传输, 那么你就得懂socket网络编程了, 或者也可以主单片机提供web service接口, 让另外两个单片机通过http协议进行数据传输, 总之这个问题其实是很简单的。
基于
nRF905
的无线数据多点跳传通信.rar_905_
NRF905
一对多
点_nRF_
nrf905
_无线
这是基于
nrf905
的无线多点调频通讯系统的一片文章
51单片机的
nRF905
无线发射接收程序
基于C51单片机的
NRF905
无线收发木块的C程序。接口注意
5G移动通信技术初级课程
一、5G技术的发展简介2018年6月,5G NR独立组网标准冻结,标志着5G时代的来临。5G仅仅是比4G的网速更快吗?绝非如此。5G不仅提供了极高的网速,而且将网络时延、可靠性、容量等性能大幅提升,使得5G成为一个万物互联的平台,从而可以极大地推动大量相关产业的发展。中国信息通信研究院在其研究报告中称:“第五代移动通信技术(5G)正在阔步前行,它将以全新的网络架构,提供至少十倍于4G 的峰值速率、毫秒级的传输时延和千亿级的连接能力,开启万物广泛互联、人机深度交互的新时代。”中国电信在其《5G技术白皮书》中也写道:“5G将是引领科技创新、实现产业升级、发展新经济的基础性平台”。 由此可以看到,5G技术的应用,将不再局限于用户间的通信联系以及个人用户的信息获取,而是渗透到了诸多行业,满足各种行业应用的通信需求,从而推动整个社会的智能化进程,这将是一场广泛而深刻的通信变革。二、本课程的特色这门课程,是我花费了大量的时间,在阅读了大量的资料的基础上,精心编写、录制而成的。这门课程的目标人群是那些已经有了一定的移动通信知识,但对5g网络尚未有系统了解和掌握的朋友们。在编写课件的过程中,我力争做到深入浅出,既能把技术
问题
探讨到一定的深度,不流于肤浅,又能易于理解,避免晦涩难懂。从内容的选择上,我力争做到全面而系统,对于5G的组网策略、核心网、接入网、承载网、网络切片技术、大规模MIMO和移动边缘计算等内容都纳入了课程内容。如果各位认真地学完这门课程,我想您会对5G移动通信技术有一个相当程度的了解和掌握,您会感到“课有所值”。三、本课程主要内容本课程包括八个方面的内容:1、从1G到5G在这一部分主要讲述了蜂窝移动通信系统的基本概念,1G、2G、3G、4G和5G移动通信系统的特点、发展演变的过程,以及5G的三大应用场景—eMBB(增强移动宽带)、mMTC(海量大连接)、URLLC(低时延高可靠),并以VR/AR(虚拟现实/增强现实)、智能家居、农业传感、智能制造、自动驾驶等具体应用来说明5G在垂直行业的应用场景。2、5G的独立组网和非独立组网模式主要讲述5G的组网方案,包括独立组网的2种模式和非独立组网的3个系列8种模式。课程中对各种组网方式的网络结构、优缺点、对业务的支持情况等进行了详细的分析,讲解了双连接、用户面、控制面、锚点等概念,并且对目前5G网络运营商如何选择各种组网模式进行了介绍。3、5G核心网解析主要讲述5G核心网SBA(基于服务的架构)、网络功能虚拟化、微服务、NF的调用、CUPS(控制面和用户面分离)、网络切片等内容,课程中对5G核心网的总体结构和各个NF(NSSF、NEF、NRF、PCF、UDM、AUSF、AMF、SMF、UPF)的作用都进行了讲解。4、5G接入网架构在这一部分,首先为大家回顾了从2G到4G接入网的发展过程,简述了它们各自的结构和特点。接下来,重点讲解了5G接入网的总体架构,CU、DU、AAU的作用,以及它们之间的功能划分。最后介绍了5G标准支持的多种接入网设备部署方案,包括CU/DU合设的两种方案和CU/DU分设的两种方案,以及它们各自的特点和适用场景。5、5G承载网作为移动通信网的三大子网之一,5G时代的承载网同样需要向前演进。这部分课程首先讲解了5G网络对承载网在带宽、时延、时间同步和网络切片等方面的性能需求。在参考大量文献资料的基础上,我尽量将这些性能需求量化,以期达到能够对实际工作起到指导和参考的作用。在带宽需求方面,针对前传、中传和回传网,分别给出了带宽需求的范围。接下来,课程讲解了5G承载网的技术实现方案,包括前传网的三种技术方案:光纤直连、无源WDM和有源OTN,以及中传和回传网络的通用分层结构、PAM4技术、FLEX-E技术、SR技术等,并介绍了中国移动、中国电信和中国联通的5G中、回传网技术方案:SPN(切片分组网络)、M-OTN(面向移动承载优化的OTN)和IP RAN增强,讲解了这三种技术的发展由来和技术特点。6、MIMO及大规模MIMO技术这一章包括四个部分的内容。第一部分是MIMO技术的原理,主要讲述了MIMO技术的基本概念、历史发展、对网络性能的改善(提高系统容量、对抗多经衰落、降低系统内干扰)等。第二部分讲MIMO技术的应用,主要包括MIMO技术的三种应用方式—空间复用、传输分集和波束成形的技术特点和优势,以及MIMO技术在WLAN、3G、B3G和4G系统的应用。第三部分讲解大规模MIMO技术的原理,包括它的技术特点、对系统性能的改善(信道容量大幅增加、波束更窄、系统内干扰更低、可实现3D波束赋形)以及它的缺点(算法复杂度高等)。第四部分是大规模MIMO技术的应用,主要介绍了它在4G和5G网络的应用,分析了大规模MIMO技术对4G网络容量提升的实测结果。7、5G网络切片技术这一章首先介绍了在5G网络中引入网络切片技术的必要性,以及网络切片技术的定义等内容,然后讲解了实现网络切片的技术基础。网络切片的实现,需要两个主要的技术来支撑,一个是NFV(网络功能虚拟化),另外一个是SDN(软件定义网络),课程中对这两项技术进行了比较详细的介绍。最后讲述了5G网络切片的实现,内容包括核心网切片、接入网切片以及承载网切片的实现,涉及到网络切片的选择、GROUP A、B、C三种切片构成方式、子载波间隔的选择等内容。8、5G与移动边缘计算这一章首先介绍了MEC(移动边缘计算)的起源和发展,追溯了IBM与诺基亚西门子开发的最早的MEC,ETSI在MEC方面的工作,以及3GPP在4G和5G标准中关于MEC的相关内容。接下来,讲解了MEC在5G网络的部署,包括边缘级、区域级和地区级MEC三种部署方式以及它们的适用场景。最后列举了一些具体的应用场景来说明MEC的应用情况,包括视频优化加速、车联网、VR直播和视频优化分析。四、讲师简介老铁于1991年毕业于南开大学电子系。从1994年开始,进入移动通信行业,先后在摩托罗拉公司、中国联通和中国电信的省级公司工作。2011年进入高校,从事移动通信相关课程的教学工作。 在联通和电信工作期间,老铁从事过移动通信网络的建设、规划、优化等工作,可以说在移动通信网络技术方面积累了比较丰富的知识和经验。在联通工作期间,参加过许多技术项目,也获得了一些奖项,包括中国通信标准化协会颁发的科学技术奖一等奖、信息产业部颁发的“CDMA网络创新贡献”奖,以及中国联通的“科技进步奖”三等奖。
nRF24L01无线模块实现一对一、
一对多
、多对一收发程序
nRF24L01无线模块实现一对一、
一对多
、多对一收发程序 简单实用 明了
nrf24l01
一对多
nrf24l01实现无线
一对多
通信,C51例子
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章