首页 > 无线通信 > WiFi和蓝牙技术问答 > nRF905模块和SPI接口的点对点无线通信系统

nRF905模块和SPI接口的点对点无线通信系统

来源:    评论:0     点击:
在某些环境监测、安防警报等环境下,不便进行有线线路的铺设,而采用无线数据通信方式。
  采用一般的无线传输方式时可能因为环境噪声大,干扰信号强而导致接收数据的准确性很低。针对这种情况,设计一种低成本、高准确率的无线数据传输系统—— 基于PIC16F876的SPI和nRF905模块的点对点无线通信系统。利用PIC16F876和nRF905模块直接进行SPI数据交换,时序同步性好,程序编写简单。PIC16F876通过相应的I/O口连接到编程器,可直接进行在线调试。鉴于无线通信环境中噪声大,信号干扰大的特点,采用的nRF905模块引入自动重发,高抗干扰GFSK调制和最高16位CRC校验机制,确保了数据传输的可靠性。
  1、硬件电路规划
  PIC16F876、nRF905模块及编程器连接头J1之间的电路连接,220V一5V电路实现,5V一3V电压转换电路如图1、图2所示。
   图1 PIC16F876与nRF905模块及编程器之间的电路连接  ①本系统所用的nRF905模块系指迅通科技公司的一个nRF905无线通信模块。此模块在与单片机P1C16F876相连时,只用了核心芯片nRF905的14个引脚(见图1)。
  在图1中,单片机PIC16F876输入 输出口与nRF905模块相应接口连接情况:RC7nRF905模块时钟分频输出,RC6nRF905模块地址匹配输出AM,RC5MISO,RC4MOSI,RC3 SCK,RC2CSN,RB7 RB6&RB3J1编程器连接线,RB5nRF905模块数据就绪输出DR,RB2PWR,RB1 TXEN,RB0 TRX_CE。单片机通过RB7、RB6和RB3与编程器相连,可进行在线编程;由RC5输出数据到nRF905模块,由RC4从nRF905模块输入数据。由一个4MHz陶瓷晶体振荡器为单片机提供时钟输入。16F876的工作电压是4.55.5V,通过图2左中的DBA元件实现从220V市电到5V电压的转换。由于nRF905模块的工作电压是1.93.6V,需从5V电压转换得到一个符合nRF905模块正常工作的稳定电压。考虑使用分压电阻与3V稳压管串联分压,从稳压管两端可得到一个稳定的3V电压输出,如图2右所示。
 
  图2 220V市电到5V电压的转换及5V到3V电压转换  2、软件设计
  考虑到nRF905模块内置完整的通信协议和CRC,软件设计工作主要集中在如何实现对nRF905模块的有效初始配置,以及16F876与nRF905模块之间SPI通信的实现。其中须保证16F876与nRF905模块时序的一致,并充分考虑nRF905模块对时序的要求。SPI时序如图3所示。
   图3 SPI时序图  对应程序设计:
  MOVLW B’11000000′ ;bit7=smp=1
  MOVWF SSPSTAT ;在输出数据的末尾采样输入数据
  ;bit6=cke=1,ckp=0时上升沿
  ;发送数据
  MOVLW B’00000001′ ;bit2bito设置晶振/16,SPI主控方式
  MOVWF SSPCON ;bit4=CKP=0空闲时钟低电平
  nRF905模块存在4种工作模式:掉电和SPI编程模式、待机和SPI编程模式、发射模式、接收模式。
  BSF PORTB,2 ;待机和SPI编程方式
  BCF PORTB,0 WR_UP= 1,TRX_EN= 0,TX_EN= 0
  BCF PORTB,1
  BSF PORTB,0 ;往芯片中写数据操作完毕,转换到发射模式
  BSF PORTB,1
  BSF PORTB,0 ;往芯片中写数据操作完毕,转换到接收模式
  ;RB0_TRX_CE= 1,RB1_TXEN= 0
  通过对16F876相应输出口高低电平的转换,可控制nRF905模块工作模式的变化。将单片机的SPI接口与nRF905模块的相应SPI口互连,实现16F876与nRF905模块之间的数据传递或实现16F876向nRF905模块发出控制命令;在编程模式下,可将预配置的命令或数据送入单片机收发缓冲器SSPBUF中,以16F876作为主控模式,并提供SPI通信必需的SCK时钟,nRF905模块作为从动模式,在SCK上升沿,双方进行数据传递,启动SCK后可将单片机数据逐位移人nRF905模块中,以完成对其初始配置。
  参照nRF905模块数据手册进行初始配置:nRF905模块的发射功率,工作频段,发送数据宽度,发送数据地址,接收数据宽度,接收数据地址,CRC校验等。若该nRF905模块作为发射部分,则将已采集并存储在单片机中的数据送入nRF905模块,以备发射。
  MOVLW 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 kHz
  MOVLW B’001001100′
  ;BIT5=AUTO_RETRAN=0不重发数据
  ;输出功率为-10 dBm,
  ;BIT4=RX_RED_PWR=0正常工作模式
  ;BIT1=HEREQ_PLL=0.433 MHz频段
  ;CH_NO[8]=0
  设计一个SPI通信模块程序进行循环调用,以简化程序设计,提高可读性。
  ;SPI通信子程序
  OUT_IN
  BSF SSPCON,SSPEN ;允许SPI模式
  MOVWF SSPBUF ;数据送给SSPBUF后开始发送LP2
  BCF STATUS,RP1 ;选择RAM 体1
  RSF STATUS.RP0
  BTFSS SSPSTAT,BF ;查询发送/接收完否
  GOTO LP2 ;否,继续查询
  BCF STATUS,RP0 ;是,选择RAM 体0
  MOVF SSPBUF,W ;从缓冲器取出数据
  RETURN ;子程序返回
  程序流程如图4所示。
 
  图4 程序流程图  结语:本无线数据传输系统已成功应用于无线抄表项目之中,在实际的工作环境运行半年多时间,情况良好。经过现场测试,在空旷地,无须另加功放或外接天线,无线通信的有效半径约100 m。本系统除可应用在无线抄表领域外,还可用于环境监测、门禁系统、无线遥控系统等。

相关热词搜索:模块 数据 编程器

上一篇:ralink 软件高手请进来指教
下一篇:BK2421通信距离问题

  网站地图