nRF905传输数据方式
- 格式:doc
- 大小:794.50 KB
- 文档页数:20
nRF905传输数据时为非实时方式,即发送端发出数据,接收端收到后先暂存于芯片存储器内,外面的MCU可以在需要时再到芯片中去取。
nRF905一次的数据传输量最多为32B。
无线数据传送的实现本设计中将单片机P89LPC916的SPI接口和nRF905的SPI接口相连,另外再选几个I/O口连接nRF905的输入输出信号,如图2所示。
nRF905控制电路图2 nRF905控制电路nRF905在正常工作前应由P89LPC916先根据需要写好配置寄存器,其后的工作主要是两个:发送数据和接收数据。
发送数据时,P89LPC916先把nRF905置于待机模式(PWR_UP引脚为高、TRX_CE引脚为低),然后通过SPI总线把发送地址和待发送的数据都写入相应的寄存器中,之后把nRF905置于发送模式(PWR_UP、TRX_CE和TX_EN全置高),数据就会自动通过天线发送出去。
为了数据可靠地传输,将射频配置寄存器中的自动重发位(AUTO_RETRAN)设为有效,数据包重复不断地一直向外发,直到P89LPC916把TRX_CE拉低,退出发送模式为止。
接收数据时,P89LPC916把nRF905的TRX_CE 引脚置为高电平,TX_EN引脚拉为低电平后,就开始接收数据。
本设计中P89LPC916设定的40s内一直判断nRF905的DR引脚是否变高,若为高,则证明接收到了有效数据,可以退出接收模式,若一直没有接收到,待时间到时也退出接收模式。
退出后在待机模式,P89LPC916通过SPI总线把nRF905内部的接收数据寄存器中的数据读出,即接收到的有效数据。
软件设计本系统设计的重点是控制nRF905的程序设计,首先是对nRF905进行初始配置,配置完成后按需要编写用户数据的发送或接收程序。
软件系统的整体数据处理流程图3 软件系统的整体数据处理流程初始化·初始化nRF905的射频配置寄存器这些寄存器中有很多信息,必须根据实际情况进行配置,本设计中nRF905外接16MHz晶体,XOF应配置为011;PA_PWR为发射功率、RX_RED_PWR为接收灵敏度,可根据需要配置;另外还有发送地址、接收地址、发送数据和接收数据的长度(字节数),可根据实际应用配置。
注意这组寄存器中还有接收时的实际地址,而发送地址在其他单独寄存器中。
·配置nRF905的发送地址在实际工作中,nRF905可以自动滤除地址不相同的数据,只有地址匹配且校验正确的数据才会被接收,并存储在接收数据寄存器中。
本设计中配置最多4个字节(32位),发送端的发送地址应与接收端设备的接收地址相同。
用户程序根据系统的硬件设计方案,分为发送端和接收端两个部分,软件系统的整体数据处理流程如图3所示。
软件系统分为5个模块:温湿度采集模块、外部设备模块、RF发送模块、RF接收模块、中央监控系统报表统计分析模块。
通信协议系统结构为有多个发送端向1个接收端单向发送温湿度数据,同时要求接收端能够根据接收的数据内容判断信号来自哪一个发送模块;接收端根据温湿度数据是否越界从而驱动前端外部设备。
为此,将系统通信协议设置为如下格式:Preamble为引导字节,Add为接收机地址,Payload为有效加载数据(包括接收显示单元识别码Rid、源发送单元识别码Sid及Data字——在接收时Data字高八位内容即为温度数据,低八位内容即为湿度数据;发送控制命令即为外部设备控制字,长度为2字节),CRC为校验码。
nRF905处于发射模式时,Add和Payload由微控制器按顺序送入射频模块nRF905,Preamble和CRC由nRF905自动加载。
接收时,nRF905先接收一个数据包,分别验证Preamble、Add和CRC正确后,再将Payload数据送入微控制器处理;当接收显示单元微处理器判断Payload中的Rid和本机识别码一致时,继续处理后继数据,并通过Sid来判断收到的数据来自哪一个监测点,保存至中央监控系统数据库供后期数据分析处理。
3 硬件设计单片机选用ATMEL公司生产的AT89LV51单片机。
它具有低功耗、低电压(与nRF905共用同一电压)的特性,它既适合结构比较简单的应用系统,也适合于比较复杂的实时系统。
单片机主要完成两个方面的工作,一方面完成对射频芯片通信过程的控制,另一方面通过RS-232总线与上位机相连。
由于AT89LV51内部没有集成SPI接口,因此通过软件模拟的方法来实现与nRF905的SPI通信。
硬件连接上,由P2口、P3.2、P3.3、P3.5连接到nRF905模块的连接器相应的引脚上。
电路如图1所示。
4 软件设计4.1 发射子程序(1)当单片机有数据需要发往规定节点时,接收节点的地址(TX_address)和有效数据(TX_payload)通过SPI接口传送给nRF905,单片机设置接口速度。
(2)单片机设置TRX_CE,TX_EN为高电平来启动传输。
(3)nRF905内部处理:无线系统自动上电;数据包完成(加前导码和CRC校验码);数据包发送(5Ok, GFSK,曼彻斯特编码)。
(4)如果AUTO_RETURN被设置为高电平,nRF905将连续的发送数据包,直到TRX_CE被设置为低。
(5)当TRX_CE被设置为低时,nRF905结束数据传输并将自己设置成待机模式。
发送程序流程图如图2所示。
4.2 接收子程序(1)通过设置TRX_CE高,TX_EN低来选择RX模式。
(2)650us后,nRF905监测空中的信息;(3)当nRF905发现和接收频率相同的载波时,载波检测(CD)被置高;(4)当nRF905接收到有效的地址时,地址匹配(AM)被置高;(5)当nRF905接收到有效的数据包(CRC校验正确)时,nRF905去掉前导码,地址和CRC位,数据准备就绪(DR)被置高;(6)单片机设置TRX_CE低,进入待机模式;(7)单片机以合适的速率通过SPI接口读出有效数据。
接收程序流程图如图3所示。
nRF905模块和SPI接口的点对点无线通信[日期:2010-03-23 ] [来源:本站编辑作者:admin] [字体:大中小] (投递新闻)采用一般的无线传输方式时可能因为环境噪声大,干扰信号强而导致接收数据的准确性很低。
针对这种情况,设计一种低成本、高准确率的无线数据传输系统——基于PIC16F876的SPI和nRF905模块的点对点无线通信系统。
利用PIC16F876和nRF905模块直接进行SPI数据交换,时序同步性好,程序编写简单。
PIC16F876通过相应的I/O口连接到编程器,可直接进行在线调试。
鉴于无线通信环境中噪声大,信号干扰大的特点,采用的nRF905模块引入自动重发,高抗干扰GFSK调制和最高16位CRC校验机制,确保了数据传输的可靠性。
1 硬件电路规划PIC16F876、nRF905模块及编程器连接头J1之间的电路连接,220V一5V电路实现,5V一3V电压转换电路如图1、图2、图3所示。
图1 PIC16F876、nRF905模块及编程器之间的电路连接①本系统所用的nRF905模块系指迅通科技公司的一个nRF905无线通信模块。
此模块在与单片机P1C16 F876相连时,只用了核心芯片nRF905的14个引脚(见图1)。
在图1中,单片机PIC16F876输入输出口与nRF905模块相应接口连接情况:RC7~nRF905模块时钟分频输出,RC6~nRF905模块地址匹配输出AM,RC5~MISO,RC4~MOSI,RC3~SCK,RC2~CSN,R B7 RB6&RB3~J1编程器连接线,RB5~nRF905模块数据就绪输出DR,RB2~PWR,RB1~TXEN,RB0~TRX_CE。
单片机通过RB7、RB6和RB3与编程器相连,可进行在线编程;由RC5输出数据到nRF905模块,由RC4从nRF905模块输入数据。
由一个4 MHz陶瓷晶体振荡器为单片机提供时钟输入。
16F876的工作电压是4.5~5.5 V,通过图2中的DBA元件实现从220 V市电到5 V电压的转换。
由于nRF905模块的工作电压是1.9~3.6 V,需从5 V电压转换得到一个符合nRF905模块正常工作的稳定电压。
考虑使用分压电阻与3 V稳压管串联分压,从稳压管两端可得到一个稳定的3 V电压输出,如图3所示。
2 软件设计考虑到nRF905模块内置完整的通信协议和CRC,软件设计工作主要集中在如何实现对nRF905模块的有效初始配置,以及16F876与nRF905模块之间SPI通信的实现。
其中须保证16F876与nRF905模块时序的一致,并充分考虑nRF905模块对时序的要求。
SPI时序如图4所示。
对应程序设计:MOV LW B'11000000' ;bit7=smp=1MOV WF SSPSTAT ;在输出数据的末尾采样输入数据;bit6=cke=1,ckp=0时上升沿;发送数据MOV LW B'00000001' ;bit2~bito设置晶振/16,SPI主控方式MOV WF SSPCON ;bit4=CKP=0空闲时钟低电平nRF905模块存在4种工作模式:掉电和SPI编程模式、待机和SPI编程模式、发射模式、接收模式。
BSF PORTB,2 ;待机和SPI编程方式BCF PORTB,0 ;PWR_UP= 1,TRX_EN= 0,TX_EN= 0BCF PORTB,1BSF PORTB,0 ;往芯片中写数据操作完毕,转换到发射模式BSF PORTB,1BSF PORTB,0 ;往芯片中写数据操作完毕,转换到接收模式;RB0_TRX_CE= 1,RB1_TXEN= 0通过对16F876相应输出口高低电平的转换,可控制nRF905模块工作模式的变化。
将单片机的SPI接口与nRF905模块的相应SPI口互连,实现16F876与nRF905模块之间的数据传递或实现16F876向nRF9 05模块发出控制命令;在编程模式下,可将预配置的命令或数据送入单片机收发缓冲器SSPBUF中,以16 F876作为主控模式,并提供SPI通信必需的SCK时钟,nRF905模块作为从动模式,在SCK上升沿,双方进行数据传递,启动SCK后可将单片机数据逐位移人nRF905模块中,以完成对其初始配置。
参照nRF905模块数据手册进行初始配置:nRF905模块的发射功率,工作频段,发送数据宽度,发送数据地址,接收数据宽度,接收数据地址,CRC校验等。
若该nRF905模块作为发射部分,则将已采集并存储在单片机中的数据送入nRF905模块,以备发射。
MOV LW 58H;BIT7=CRC_MODE=1,8位CRC校验位;BIT6=CRC_EN=1,CRC校验允许;BIT[5:3]=XOF[2:0]=000,晶振4 MHz;BIT2=UP_CLK_EN=0外部时钟信号禁止;BIT[1:0]=UP_CLK_FREQ[1:0]=11,500 kHzMOV LW B'001001100';BIT5=AUTO_RETRAN=0不重发数据;输出功率为-10 dBm,;BIT4=RX_RED_PWR=0正常工作模式;BIT1=HEREQ_PLL=0.433 MHz频段;CH_NO[8]=0设计一个SPI通信模块程序进行循环调用,以简化程序设计,提高可读性。