基于12864的nrf2401
基于nrf2401的无线数据传输系统的设计与实现
![基于nrf2401的无线数据传输系统的设计与实现](https://img.taocdn.com/s3/m/fae990ae4a7302768e9939c4.png)
接收端:无线数据传输接收系统与无线数据传输发
并行数据接口,读写时序适配6800系列时序,可直接与 送系统相类似,系统在工作之前要进行初始化,按照程
8位微处理器相连。其中2管脚与单片机PB6链接,控制 序设计开始读取接收到的数据,判定后进行数据处理与
OLED12864 12C总线的SCL功能。1管脚与单片机PB7链 显示,在显示屏上显示HC-SR04超声波检测传感器测的
接,控制OLED12864 12C总线的SDA功能。
距离值。检测到数据后,在OLED显示屏上显示当前检
测出的距离,通过接收端读取NRF24L01寄存器。并通
二系统软件设计
过OLED显示模块进行显示,显示完毕后返回NRF24L01。
(一)无线数据传输系统主程序设计
如果超出设定的距离,报警器进行报警。如果接收不到
首先对发送和接收部分分别进行系统初始化,然后 数据则继续检测。
发送部分的超声波模块检测距离,经过初始化后接收部
(四)OLED数据显示电路子程序设计
分开始接受发送端发送的数据并进入判断程序当接收到
OLED数据显示电路在工作之前会进行系统初始化。
数据未到达报警值时,程序直接进入OLED显示模块显示 初始化后等待无线数据传输发送系统采集端采集到的数
(三)无线数据传输收发系统子程序设计
作者简介: 曲镇帮、田江伟,男,沈阳工学院。郑琳(通讯作者),
女,汉族,辽宁人,沈阳工学院,教师,讲师,硕士学位。
发送端:首先对系统进行初始化,设置为发送模式,
卫星电视与宽带多媒体 15
卫星电视2019第5期正文.indd 15
2019/6/3 14:36:06
(二)HC-SR04超声波测距电路子程序设计 HC-SR04超声波测距电路在工作之前会对串口1进行
基于NRF2401射频模块的温度测量系统的设计
![基于NRF2401射频模块的温度测量系统的设计](https://img.taocdn.com/s3/m/7a0bc43653d380eb6294dd88d0d233d4b14e3fd7.png)
基于NRF2401射频模块的温度测量系统的设计熊杰【期刊名称】《电脑知识与技术》【年(卷),期】2012(000)035【摘要】This Paper introduces a method about the design of the short distance wireless temperature measurement system based on nRF2401. System microcontroller and RF nRF2401 chip as the core, using the digital temperature sensor DS18B20, applica⁃tion of sensor technology and wireless transceiver technology to realize the collection of temperature and short distance wireless transmission, through the host computer software LABVIEW to display the temperature value and the curve information, so as to realize wireless data transmission.% 介绍了基于nRF2401的短距离无线温度测量系统的设计方法。
系统以单片机和射频芯片nRF2401为核心,采用数字式温度传感器DS18B20,应用传感技术和无线收发技术实现温度的采集和短距离无线传输,通过上位机软件LABVIEW显示温度值及曲线信息,从而实现无线数据传输。
【总页数】2页(P8566-8567)【作者】熊杰【作者单位】鄂东职业技术学院机电工程系,湖北黄冈 438000【正文语种】中文【中图分类】TP311【相关文献】1.基于nRF2401的汽车轮胎温度监测装置设计 [J], 王文虎;任艳惠;赵波2.基于nRF2401和GPRS的无线温度传输系统设计 [J], 刘斌3.基于nRF2401芯片的多路无线分布式温度测量系统设计 [J], 秦玉龙;付慧生4.基于NRF2401的无线温度传感器的设计 [J], 徐治根5.基于单片机的微型嵌入式温度测量仪的设计与实现分析基于PIN光电二极管的毫米级物体速度测量系统设计 [J], 何滔;雷富坤因版权原因,仅展示原文概要,查看原文内容请购买。
毕业论文基于nRF2401模块的无线温度监测系统设计说明
![毕业论文基于nRF2401模块的无线温度监测系统设计说明](https://img.taocdn.com/s3/m/203ea3fd6edb6f1aff001ffe.png)
基于nRF24L01模块的无线通信系统设计摘要温度是一个非常重要的参数。
在工业、医疗、军事和生活等许多地方,都需要用到测温装置来检测温度。
传统直接布线测量不满足要求,特别是在某些环境恶劣的工业环境和户外环境,通过直接布线测量不现实。
因此采用无线传输温度检测尤为必要。
目前有些设计能够实现无线温度采集,但价格过高是其最大的缺点。
在实际温度控制过程中既要求系统具有稳定性、实时性又需要降低功耗。
因此设计一种低功耗的无线温度检测系统很有意义。
本文提出一种采用单片机AT89S52控制DS18B20实现的无线温度测量系统。
通过简单的无线通信协议,实现可靠性与功耗平衡,该系统能实现对温度的检测,能够同时进行温度检测,是可以实现远程控制的无线温度检测系统。
低功耗、实时性的无线温度检测是该设计的最大特点。
无线传输采用nRF24L01模块传输。
该系统结构简单,可靠,功耗较低,成本低,是一种无线传感器的解决方案。
关键字:单片机 AT89S52 无线传输 nRF24l01 DS18B20AbstractTemperature is a very important parameters. In the industrial, medical and military and life and many other place, it needs to use the temperature measurement device to detect temperature. The traditional direct measurement wiring does not meet the requirements, especially in some environmental bad industrial environment and outdoor environment, through the direct wiring measurement is not practical. So using wireless transmission temperature testing is necessary.At present some design can realize the wireless temperature gathering, but the price is too high, its biggest weakness. In the actual temperature control process requires both system has stability, real-time and the need to reduce power consumption. So the design of a kind of low power consumption wireless temperature detection system is very meaningful. This paper presents a USES the monolithic integrated circuit AT89S52 control DS18B20 of the realization of the wireless temperature measuring system. Through the simple wireless communication protocol, realize the reliability and power balance, the system can realize to the temperature detection, can simultaneously determine the temperature, can be realized the wireless remote control temperature detection system. Low power consumption, real-time wireless temperature detection is the biggest characteristic of the design. Wireless transmission using nRF24L01 module transmission.The system structure is simple, reliable, low power consumption, low cost, it is a kind of wireless sensor solutions.Key word:MCU AT89S52 wireless transmission nRF24l01 DS18B20目录摘要IAbstractII目录IV前言11系统方案分析与选择论证31.1 系统方案设计31.1.1 主控芯片方案31.1.2 无线通信模块方案31.1.3 温度传感方案41.1.4 显示模块方案41.1.5 单片机与PC机通信模块51.2 系统最终方案52 主要芯片介绍和系统模块硬件设计72.1 AT89S5272.1.1 单片机控制模块112.2 单片2.4GHz nRF24L01无线模块122.2.1 nRF24L01芯片概述122.2.2 引脚功能与描述122.2.3 工作模式132.2.4 工作原理142.2.5 配置字152.2.6 nRF24L01模块原理图172.3 温度传感器 DS18B20172.3.1 DS18B20管脚配置和部结构182.3.2 DS18B20的工作原理202.3.3 DS18B20的硬件设计222.4 显示模块232.4.1 接收端显示模块232.4.2 发送端显示模块232.5 报警电路232.6 接收端与PC机通信242.7 电源电路设计242.8 其他外围电路253 系统软件设计263.1 单片机软件设计263.1.1 发送端软件设计263.1.2 接收端软件设计274 系统仿真284.1 电源电路的仿真284.1.1 +5V电源电路仿真284.2 发送端温度采集与显示仿真284.3 接收端LCD1602显示温度仿真295 硬件电路板设计315.1 系统硬件原理图315.1.1 发送端原理图315.1.2 接收端原理图325.2 系统PCB图345.2.1 发送端PCB图345.2.2 接收端PCB图355.3 硬件制作355.4 硬件调试375.5 硬件调试结果376 nRF24L01应用于无线组网396.1 无线组网的意义与研究价值396.2 通信模型与协议设计39总结41致43参考文献44前言随着社会的进步和生产的需要,利用无线通信进行温度数据采集的方式应用已经渗透到生活各个方面。
基于nRF2401A全双工通信的红外点名器
![基于nRF2401A全双工通信的红外点名器](https://img.taocdn.com/s3/m/3c7ebe2a647d27284b7351fd.png)
基于 nRF2401 通信的红外点名器
三明学院
物理与机电工程学院
SetTxMode();//设置为发送模式 for(i=0;i<8;i++) {nRF2401_TxPacket(set_flag);} //发送反馈信号,每周 期连续发射 8 次,提高发射效率 } receive[0]=0; delay(600); } switch(flag) { case 1: SetTxMode();//设置为发送模式 for(i=0;i<8;i++) //连续发射提高发射效率 { nRF2401_TxPacket(jishu);} SetRxMode(); // 设置为接模式 case 0: SetRxMode(); // 设置为接模式 } ge=jishu%10; shi=jishu/10; if(jishu==100|jishu<0) { jishu=0; } display(); } } c 函数 delay. delay.c #include "delay.h" void delay(unsigned char k) { while(k--); } void Delay100(void) { unsigned int i;
第三章 各模块电路设计 3.1 3.2 3.3 555 定时红外发射电路…………………………… 7 红外接受电路设计………………………………… 8 RF2401B 模块电路………………………………… 9
第四章 系统程序设计 4.1 4.2 软件设计流程及描述……………………………… 10 源程序代码………………………………………… 11
7
基于 nRF2401 通信的红外点名器
三明学院
nrf2401中文资料_数据手册_参数
![nrf2401中文资料_数据手册_参数](https://img.taocdn.com/s3/m/071ec747ddccda38376baf60.png)
nRF2401无线通讯模块资料解析
![nRF2401无线通讯模块资料解析](https://img.taocdn.com/s3/m/96e469cbb14e852458fb5750.png)
PRODUCT SPECIFICATION nRF2401 Single Chip 2.4 GHz Radio Transceiver PCB layout example Figure 22 shows a PCB layout example for the application schematic in Figure 21. A double-sided FR-4 board of 1.6mm thickness is used. This PCB has a ground plane on the bottom layer. Additionally, there are ground areas on the component side of the board to ensure sufficient grounding of critical components. A large number of via holes connect the top layer ground areas to the bottom layer ground plane. No components in bottom layer Top silk screen Top view Bottom view Figure 22 nRF2401 RF layout with single ended connection to 50Ω antenna and 0603 size passive components Nordic Semiconductor ASA Revision: 1.1 - Vestre Rosten 81, N-7075 Tiller, Norway - Phone +4772898900 - Page 36 of 39 Fax +4772898989 June 2004PRODUCT SPECIFICATION nRF2401 Single Chip 2.4 GHz Radio Transceiver DEFINITIONS Data sheet status Objective product specification Preliminary product specification Product specification This data sheet contains target specifications for product development. This data sheet contains preliminary data; supplementary data maybe published from Nordic Semiconductor ASA later. This data sheet contains final product specifications. Nordic Semiconductor ASA reserves the right to make changes at any time without notice in order to improve design and supply the best possible product. Limiting values Stress above one or more of the limiting values may cause permanent damage to the device. These are stress ratings only and operation of the device at these or at any other conditions above those given in the Specifications sections of the specification is not implied. Exposure to limiting values for extended periods may affect device reliability. Application information Where application information is given, it is advisory and does not form part of the specification. Table 24. Definitions Nordic Semiconductor ASA reserves the right to make changes without further notice to the product to improve reliability, function or design. Nordic Semiconductor ASA does not assume any liability arising out of the application or use of any product or circuits described herein. LIFE SUPPORT APPLICATIONS These products are not designed for use in life support appliances, devices, or systems where malfunction of these products can reasonably be expected to result in personal injury. Nordic Semiconductor ASA customers using or selling these products for use in such applications do so at their own risk and agree to fully indemnify Nordic Semiconductor ASA for any damages resulting from such improper use or sale. Product Specification: Revision Date: 07.06.2004. Data sheet order code: 070604-nRF2401. All rights reserved ®. Reproduction in whole or in part is prohibited without the prior written permission of the copyright holder. Nordic Semiconductor ASA Revision: 1.1 - Vestre Rosten 81, N-7075 Tiller, Norway - Phone +4772898900 - Page 37 of 39 Fax +4772898989 June 2004PRODUCT SPECIFICATION nRF2401 Single Chip 2.4 GHz Radio Transceiver YOUR NOTES Nordic Semiconductor ASA Revision: 1.1 - Vestre Rosten 81, N-7075 Tiller, Norway - Phone +4772898900 - Page 38 of 39 Fax +4772898989 June 2004PRODUCT SPECIFICATION nRF2401 Single Chip 2.4 GHz Radio Transceiver Nordic Semiconductor ASA – World Wide Distributors For Your nearest dealer, pleasesee http://www.nordicsemi.no Main Office: Vestre Rosten 81, N-7075 Tiller, Norway Phone: +47 72 89 89 00, Fax: +47 72 89 89 89 Visit the Nordic Semiconductor ASA website at http://www.nordicsemi.no Nordic Semiconductor ASA Revision: 1.1 - Vestre Rosten 81, N-7075 Tiller, Norway - Phone +4772898900 - Page 39 of 39 Fax+4772898989 June 2004。
nRF2401无线模块产品说明书
![nRF2401无线模块产品说明书](https://img.taocdn.com/s3/m/87ebda3f376baf1ffc4fad2b.png)
3.1 配置文件 ..................................................................................... 4 3.2 驱动文件 ..................................................................................... 6
2. 硬 件 模 块 说 明
nRF2401 无线模块产品说明书
图 1 nRF2401 丝印图
2.1 NRF2401 及其外围电路
nRF2401 及其外围电路如图 2 所示,包括 nRF2401 芯片部分、稳压部分、晶振部分、天线部分。电 压 VDD 为芯片提供工作电压;晶振部分包括 Y1、C11、C12,晶振 Y1 允许值为:4MHz、8MHz、12MHz、 16MHz,如果需要 1Mbps 的通信速率,则必须选择 16MHz 晶振。天线部分包括电感 L1、L2、L3(板子 自身天线)或者 L1、L3、ANT2(外接天线),用来将 nRF2401 芯片 ANT1、ANT2 管脚产生的 2.4G 电平 信号转为电磁波信号,或者将电磁波信号转换为电平信号输入芯片的 ANT1、ANT2 管脚。
R3 330 PWR_UP
VDD
CE CLK2 DATA2 CS
R5 330 R6 330 R7 330 R8 330
nrf2401编程指南
![nrf2401编程指南](https://img.taocdn.com/s3/m/589c4b294b73f242336c5fe7.png)
说明 MCU 通过 MOSI 输出数据 同时通过 CLK1 送出 SPI 时钟信号 从 MISO 读入数据 有两个 10K 电阻隔离 MOSI 送出的数据不会影响 nRF2401 输出的数据
因为图中
软件编程 流程与上面 I/O 直接连接方式相同 读写 nRF2401 子程序
下面给出带 51 内核的 P89LPC913 单片机的 SPI 读写子程序 供参考 /********************************************************/ 名 称 Spi_Init 功 能 P89LPC913 单片机 SPI 接口初始化 C 语言子程序 入口参数 无 出口参数 无 影响资源 无 /********************************************************/ sfr SPSTAT = 0xE1; sfr SPCTL = 0xE2; sfr SPDAT = 0xE3; sfr IEN1 = 0xE8; sbit ESPI = IEN1^3 ; void Spi_Init(void) { SPCTL =0xd1; //bit7 :SSIG =1 忽略 SS 信号 // bit6 :SPEN=1 ,允许 SPI //bit5 :DROD=0 高位在前 //bit4 :MASTER =1 主模式 //bit3 :CPOL=0 , SPI_CLK 空闲时为低电平 //bit2 :CPHA =0 , 前时钟上升沿驱动输出及采样方式 //bit1~0 :01 CCLK/16 SPI 时钟频率 1MHz max
COPYRIGHT ©2005 ALL RIGHTS RESERVED 迅通科技
TEL: (010)64390486
http://:
基于nRF2401 的无线数据传输系统
![基于nRF2401 的无线数据传输系统](https://img.taocdn.com/s3/m/58d69d10f18583d0496459e7.png)
基于nRF2401的无线数据传输系统王 博,李 迅,马宏绪(国防科学技术大学,湖南省长沙市410073)【摘 要】介绍了一种利用无线数字传输芯片和单片机构成的无线数据传输系统,讨论了系统的硬件电路设计和软件设计,以及无线数字传输芯片在突发传递模式下通过单片机的控制进行无线数据传输的原理,设计了在突发传递模式下可实现半双工通信的通用电路,并讨论了无线数字传输芯片初始配置和数据发送程序开发的关键技术。
运行表明,该系统控制方便、工作稳定,能实现可靠的无线数据传输。
关键词:无线数据传输系统,单片机,nRF2401芯片中图分类号:TN919.72收稿日期:2004-05-190 引 言在监测系统中,数据从采集设备到处理终端,监测控制指令从处理终端到采集设备,均需经过传输过程这一重要环节。
当数据采集点处于运动状态,或者所处的环境不允许铺设电缆,采集设备必须与终端设备分离,此时只能通过无线方式进行数据传输。
本文介绍的无线数据传输系统,应用ATMEL 公司的AT89C52单片机控制NORDIC 公司的无线数字传输芯片nRF2401,通过无线方式进行数据双向远程传输,两端采用半双工方式通信,两端数据传输模块完全通用。
该系统使用灵活、成本低廉,可方便地嵌入到无线监测系统中。
1 nRF2401芯片工作原理无线数字传输芯片nRF2401为本系统核心部件,芯片工作频段为2.4GHz ~2.5GHz ,工作电压为1.9V ~3.6V ,工作温度为-40℃~+85℃,有多达125个频道可供选择,最高通信速率1Mbit /s ,工作参数全部通过芯片状态字配置。
nRF2401提供掉电状态,在没有数据通信时可降低芯片功耗。
具有突发传递和直接传递两种工作模式。
突发传递模式应用在片缓冲器,以低速率向nRF2401写入待发数据,以高速率无线传输,尽量降低功耗。
直接传递模式与传统RF 器件工作模式一致。
1.1 nRF2401引脚功能芯片引脚排列见图1。
nRF2401的原理及应用
![nRF2401的原理及应用](https://img.taocdn.com/s3/m/c100ef20cc17552706220821.png)
单片2.4GHz无线收发一体芯片nRF2401及其应用nRF2401是挪威Nordic公司推出的单片2.4GHz无线收发一体芯片。
它将射频、8051MCU、9通道12位ADC、外围元件、电感和滤波器全部集成到单芯片中,并采用2.4GHz频带和0.18μm工艺,可提供ShockBurst、DuoCeiver、片上CRC以及地址计算编码等功能。
文章详细介绍了nRF2401的结构特点、引脚功能和工作原理,给出了它的典型应用电路。
nRF2401无线收发一体芯片和蓝牙一样,都工作在2.4GHz自由频段,能够在全球无线市场畅通无阻.nRF2401支持多点间通信,最高传输速率超过1Mbit/S,而且比蓝牙具有更高的传输速度.它采用SoC方法设计,只需少量外围元件便可组成射频收发电路.与蓝牙不同的是,nRF2401没有复杂的通信协议,它完全对用户透明,同种产品之间可以自由通信.更重要的是,nRF2401比蓝牙产品更便宜.所以nRF2401是业界体积最小、功耗最少、外围元件最少的低成本射频系统级芯片.2 主要特点和引脚功能nRF2401的引脚排列如图1(顶视图)所示.它采用5mm×5mm的24引脚QFN封装.nRF2401的主要特点如下:●采用全球开放的2.4GHz频段,有125个频道,可满足多频及跳频需要;●速率(1Mbps)高于蓝牙,且具有高数据吞吐量;●外围元件极少,只需一个晶振和一个电阻即可设计射频电路;●发射功率和工作频率等所有工作参数可全部通过软件设置;●电源电压范围为1.9~3.6V,功耗很低;●电流消耗很小,-5dBm输出功率时的典型峰值电流为10.5mA;●芯片内部设置有专门的稳压电路,因此,使用任何电源(包括DC/DC开关电源)均有很好的通信效果;●每个芯片均可以通过软件设置最多40bit地址,而且只有收到本机地址时才会输出数据(提供一个中断指示),同时编程也很方便;●内置CRC纠检错硬件电路和协议;●采用DuoCeiver技术可同时接收两个nRF2401的数据;●采用ShockBurstTM模式时,能适用极低的功率操作和不严格的MCU执行;●带有集成增强型8051内核、9路10bitADC、UART异步串口、SPI串口和PWM输出;●内置看门狗;●无需外部SAW滤波器;●可100%RF检验;●带有数据时隙和数据时钟恢复功能.3 工作原理nRF2401的内部结构原理及外部组成框图如图2所示,下面介绍其工作原理.3.1 ShockBurstTM模式nRF2401的ShockBurstTM RX/TX模式采用片上先进先出(FIFO)来进行低数据率的时钟同步和高数据率的传输,因此极大的降低了功耗.ShockBurstTM发射主要通过MCU接口引脚CE、CLK1和DATA来完成.当MCU请求发送数据时,置CE为高电平,此时的接收机地址和有效载荷数据作为nRF2401的内部时钟,可用请求协议或MCU将速率调至1Mbps;置CE为低电平可激活ShockBurstTM发射.ShockBurstTM接收主要使用MCU接口引脚CE、DR1、CLK1和DATA来实现.当正确设置射频包输入载荷的地址和大小后,置CE为高电平可激活RX.此后便可在nRF2401监测信息输入200μs,若收到有效数据包,则给MCU一个中断并置DR1为高电平,以使MCU 以时钟形式输出有效载荷数据,待系统收到全部数据后nRF2401再置DR1为低此时如果CE保持高电平,则等待新的数据包.若CE置低电平,则开始接收新的序列.3.2 DuoCeiverTM的双信道接收模式nRF2401的DuoCeiverTM技术为RX提供了两个独立的专用数字信道,因而可代替两个单独接收系统.图3所示是DuoCeiverTM同时双接收信道结构图.nRF2401 可以通过一个天线接口从相隔8MHz的两个1Mbps接收机上接收数据.同时将两个数字信道的输出反馈到两个单独的MCU接口.具体的两个信道如下:数字信道1:CLK1,DATA,DR1;数字信道2:CLK2,DOUT2,DR2;应当说明的是,数字信道2的频率只有在比数字信道1的频率高出8MHz时,才能保证正常接收.4 典型应用nRF2401的电源电压范围为1.9~3.6V,可工作在-40~+85℃的温度范围内.灵敏度为-90dbm.图4是nRF2401的一个典型应用电路.该电路由50V陶瓷电容器(C1~C9)、nRF2401无线电收发器(U1)以及一个晶振组成,由图可见,该电路外围元件很少.。
芯片nRF2401介绍
![芯片nRF2401介绍](https://img.taocdn.com/s3/m/f25bcf0b640e52ea551810a6f524ccbff121ca60.png)
业界体积最小、功耗最少、外围元件最少的
2.4GHz无线单片收发芯片nRF2401
♦全球开放的2.4GHz频段,125个频道,满足多频及跳频需要
♦高速率1Mbps,高于蓝牙,具有高数据吞吐量
♦极少的外围元件,只需一个晶振和一个电阻
♦发射功率、工作频率等所有工作参数全部通过软件设置完成
♦ 1.9~3.6V低功耗,满足低功耗设计需要
♦独特设计:芯片内部设置了专门的稳压电路,使用各种电源包括DC/DC开关电源均有很好的通信效果
♦独特设计:每个芯片可以通过软件设置最多40bit地址,只有收到本机地址时才会输出数据(提供一个中断指示),编程很方便
独特设计:纠检错是无线通信设计的难点,nRF2401内置了CRC纠检错硬件电路和协议,对于软♦
件开发人员太方便了。
♦独特设计:nRF2401的DuoCeiver技术可以同时接收两个nRF2401的数据。
♦广泛适用于手持终端PDA、无线耳机、数字视频、无线鼠标、无线键盘以及其他短距离高速无线应用♦nRF2401-Quick-DEV快速开发系统,含开发板、源代码、原理图等详细资料
♦nRF2401-Quick-Kit快速开发套件,含各芯片和主要配套器件,方便开发
♦可供即插即用的嵌入式2.4Ghz无线模块,提供领先的2.4GHz无线光电鼠标,2.4G无线键盘参考设计。
NRF2401 模块说明书介绍
![NRF2401 模块说明书介绍](https://img.taocdn.com/s3/m/4b0c77b2daef5ef7bb0d3c25.png)
常见问题解答1 问:2.4G模块的距离有多远?答:空旷距离下内置PCB天线比如我们的NF-02 NF-03 系列,最远无障碍在240米处还能收到信号。
但是有遮挡的情况比较难说,还有附近的WIFI干扰也会严重影响传输距离,因此我们的+7DB输出功率,若做遥控用,空旷距离最好距离在200米左右。
2 问:同样的NF-03为什么有两种价格,一款4.5的一款6.5?答:一款原产台湾,一款原产品挪威,随着众多IC晶圆厂自己无线IC的推出,兼容模块的价格从2008年的20元左右一直跌落到目前的4.5,利润由当初的10元降到现在的0.5元以下,其中挪威版的出的最早,价格虽然猛降,但是始终拼不过台产芯片。
3问:挪威版本的NRF24L01+和台产版的哪个使用效果会更好?答:台产版的完全克隆挪威版的,并在以前的基础上加了+7DB的功放电路,使之距离上是挪威版本的2倍还多。
4 问:挪威版最大可编程发射功率是0DBM 台产版的是+7DBM。
是个什么概念??答:每增加+3DBM 发射功率增加一倍,+7DB M就是0DBM发射功率的四倍。
在最大发射功率下,台产版的电流在40MA 左右。
挪威版在0DB时12MA左右5 问:同问题4,那是否说明台产版的比挪威版的耗电???答:在同样发射功率下,功耗一样,比如在0DBM下,电流都是12MA。
6 问内置PCB天线和外置鞭状天线,效果对比如何?答:发射功率基本相当,但是实地测试空旷距离,外置天线距离比PCB天线远25%-30%左右。
7 问:我想用来传输语音或图像信号可以吗?答:这个传输的是数字信号,要传输语音和图像信号也可以完成,只是要先进行数模转化,数据压缩算法,以及出错重传,防碰撞处理和时效性问题,是个不小的工程!8 你们公司的两大类型无线产品SI4432模块和NRF24L01模块我选哪一个好?答:先从关注的传输距离上说,SI4432是一款相当不错的芯片,内置—+20DBM功放,可谓是所有315M-433M中最强悍的一款,距离上再1200波特率下,能传输1公里左右,在家居安防与小区组网上非常有用,NRF24L01+外置功放的情况下距离和SI4432相当,但穿透性和绕射性能比SI4432差,与SI4432比较最大的优点是:传输速率比较快,最大能到2M适合传输大批量数据,要求或者持续时间比较短的应用。
基于nRF2401的无线数据收集系统毕业设计
![基于nRF2401的无线数据收集系统毕业设计](https://img.taocdn.com/s3/m/44c614861ed9ad51f11df2d5.png)
毕业设计说明书基于nRF2401的无线数据收集系统设计专业自动化 学生姓名 班级B 自动化071 学号01 指导教师 完成日期 2011年5月20日基于nRF2401的无线数据收集系统设计摘要:本设计主如果基于nRF2401无线传输模块的数据收集系统的设计方案及实现方式。
nRF240[1]1技术比较成熟、本钱相对较低,已被普遍应用于各类远程的无线监测系统中。
本设计以nRF2401无线通信模块为基础,构建一个远程的温湿度数据收集系统,采用nRF2401模块、单片机[2]实现远程数据收集系统设计。
本设计第一简单介绍了温湿度传感器及无线通信模块的进展状况,结合系统方案的要求详细论证了实现温度数据收集与无线传输方案的设计思路及系统的整体架构,然后详尽地论述了系统的硬件电路结构和完成各项功能相关的软件设计,并进行相关测试。
系统以PC实现收集数据显示、处置,以宏晶公司的一块STC89C51单片机为发送端,以另一块STC89C51单片机为接收端,采用nRF2401无线传输模块,及数字温湿度传感器,应用无线通信技术、传感技术及单片机微控制技术,实现温度数据的收集和无线传输。
系统由PC机,发送端,接收端3部份组成。
由发送端收集温湿度数据,并通过nRF2401发送给接收端,接收端通过nRF2401接收数据,并通过串口转发给PC,由PC进行数据必然量的存储。
系统工作稳固,靠得住性高,适用于多种领域。
关键词:nRF2401;数据收集;STC89C51单片机;无线传输;数字温湿度传感器Based on NRF2401 wireless data acquisitionsystem designAbstract: This design is mainly based on nRF2401 wireless transmission module of data acquisition system design and realization method. nRF2401 technology more mature, relatively low cost, has been widely applied in all kinds of remote wireless monitoring system. This design is based nRF2401 wireless communication module, constructing a remote data acquisition system of temperature and humidity, the nRF2401 module, SCM realizing remote data acquisition system design.This design first briefly introduces the temperature and humidity sensor and wireless communication module, combining with the development situation of system plan demonstrated requirements detailed realization temperature data acquisition and wireless transmission scheme design and system, the general framework of the then expounded system hardware circuit structure and complete all related software design, function and carry out relevant test.System to collect data display, PC realize treatment to a piece of STC89C51 macro chip company for the sender, with single-chip microcontroller STC89C51 another piece for the receiver, using nRF2401 wireless transmission module, and digital temperature and humidity sensors, application of wireless communication technology, the sensing technology and single-chip microprocessor control technology to realize temperature data acquisition and the wireless transmission.System consists of the PC and the sender and the receiver 3 parts. Humidity data collected by the sender, and through nRF2401 sent to the receiver, the receiver nRF2401 receiving data through, and through a serial port forwarding to PC, a certain amount ofdata by PC storage. System working stability, high reliability, it is applicable for various fields.Key Words:nRF2401; Data acquisition; STC89C51 microcontroller; Wireless transmission; Digital temperature and humidity sensors.目录基于nRF2401的无线数据收集系统设计 (1)1概述 (1)研究背景 (2)国内外研究现状 (2)课题研究的内容及意义 (3)2系统硬件整体设计 (4)主要器件选型 (4)基于nRF2401的无线数据收集系统整体设计框图 (7)3 基于nRF2401的无线数据收集系统硬件设计 (7)数字温湿度传感器SHT11的电路设计 (8)STC89C51单片机最小系统 (11)12864液晶显示电路设计 (13)nRF2401芯片 (14)串口电路设计 (19)系统电源设计 (20)4系统的软件设计 (20)系统软件的整体设计 (21)SHT11数据收集程序设计流程图 (21)致谢 (27)附录 (28)附录1:程序清单 (28)附录2:设计图纸 (32)附录3:元器件目录表 (39)基于nRF2401的无线数据收集系统设计1概述最近几年来,无线监测系统在各行各业取得了普遍的应用。
(word完整版)NRF2401使用详解
![(word完整版)NRF2401使用详解](https://img.taocdn.com/s3/m/2685b306f61fb7360a4c6533.png)
基于NRF2401和MSP430F149实现无线通信一、实验目的:1、掌握无线通信模块NRF2401的使用方法,学会用此模块实现数据传输;2、进一步了解MSP430F149单片机的编程语言和环境.二、实验功能:本实验完成无线通信功能,具体是通过NRF2401实现一个发送数据一个接受数据,发送端实现0~99循环发送,接收端接受数据并显示在数码管上。
注意:由于NRF2401价格不菲且易坏,所以将此模块插入到最小系统板上的插槽时应注意师父查反,正确的方向是天线端向外,且插拔时一定要断电.三、实验原理:NRF2401是单片射频收发一体芯片,工作于2.4—2。
5GHz ISM频段,适用于多种无线通信场合,如无线遥控器、无线鼠标等,且传输数据稳定,这种无线通信解决方案适合传输距离较近的无线控制项目,它只需要和处理器配合使用便能实现可靠的数据传递。
下面详细介绍如何运用MSP430单片机控制NRF2401完成无线通信。
1、RT2411模块按照设计流程,应该是根据NRF2401的datasheet搭建硬件电路,但是为了使用方便,我们使用了模块电路RT2411,RT2411是NRF2401的典型应用电路(如图1所示),使用此模块电路的好处是我们只需要将各个引脚连到单片机对应管脚,配合正确的程序就可实现无线通信功能。
相关的两个文档是《NRF2401A..pdf》和《RT2411使用手册》,尤其要注意RT2411模块价格昂贵且容易损坏,使用前一定要认真阅读《RT2411使用手册》第二页的五个注意事项,要尽量避免由于使用不当造成芯片损坏。
图1. RT2411模块实物图(左)和原理图(右)2、实验说明和硬件连接我们将做一个简单实验,由发送机连续循环发送数字1—99,接收机接收数据并将其显示到数码管上,这样可以看到实验效果:接收机数码管上循环显示数值1-99。
发送机和接收机都是由一块MSP430F149最小系统板和一个RT2411模块组成,共需两套MSP430F149最小系统板和两个RT2411模块。
nrf2401
![nrf2401](https://img.taocdn.com/s3/m/4ff1d49632d4b14e852458fb770bf78a65293aec.png)
nrf2401介绍nrf2401是一款低功耗无线通信模块,采用2.4GHz频段进行通信。
该模块非常适用于需要远距离无线通信的应用,如物联网设备、无线传感器网络、遥控器等。
特性• 2.4GHz全向射频模块•内置射频前端和调制解调器•最大传输距离可达100米•工作频率范围为2.400-2.525GHz•最大发射功率为0dBm•支持多通道通信•低功耗设计,适合电池供电设备•强大的抗干扰能力•简单易用的SPI接口硬件规格•工作电压:3.3V•工作温度范围:-40°C 到 +85°C•尺寸:15mm x 29mm连接方式nrf2401模块采用SPI接口进行与主控芯片的通信。
需要连接如下几个引脚:•MOSI:主控芯片的SPI信号输出引脚•MISO:主控芯片的SPI信号输入引脚•SCK:主控芯片的SPI时钟引脚•CSN:片选引脚,用于使能模块•CE:片选引脚,用于控制模块的工作模式应用示例以下是一个基本的nrf2401模块应用示例:```c #include <SPI.h>// 定义连接nrf2401模块的引脚 #define MOSI 11 #define MISO 12 #define SCK 13 #define CSN 10 #define CE 9void setup() { SPI.begin(); SPI.setDataMode(SPI_MODE0); SPI.setClockDivider(SPI_CLOCK_DIV4);pinMode(CSN, OUTPUT); digitalWrite(CSN, HIGH);pinMode(CE, OUTPUT); digitalWrite(CE, LOW); }void loop() { // 选择通信通道 selectChannel(2);// 发送数据 sendData(。
噶米基于NRF240的RFID读卡系统的设计与实现
![噶米基于NRF240的RFID读卡系统的设计与实现](https://img.taocdn.com/s3/m/b0a42a1d43323968011c927a.png)
基于NRF2401的RFID读卡系统的设计与实现05级卢敏漆维陈旭东摘要射频识别(RFID,Radio Frequency Identification)技术是一种利用无线射频通信实现的非接触式自动识别技术。
与目前广泛采用的条形码技术相比,RFID 具有容量大、识别距离远、识别速度快、穿透能力强、可多卡识别、抗污性强等特点,近年来越来越受到业界人士的广泛关注。
本文首先介绍了射频识别技术的基本工作原理,并在此基础上设计了一个简单的RFID 系统,包括读卡器和有源标签两部分,可以适用于停车场的车辆管理等场合。
本系统采用无线收发一体芯片NRF2401(读卡器用)和NRF24e1(标签用),工作频率为2.4~2.5GHz。
系统设计包括硬件和软件两部分,标签设计为有源式,可主动发送向读卡器发送标签内带有的信息;读卡器接收到相关信息后,由MCU芯片控制,通过串口将有效数据传输到后台PC机内,进行相关处理。
关键词射频识别读卡器有源标签NRF2401/24e1 RS-232 AT89S52正文一、课题背景1.1 RFID技术概述在我们的现实生活中,各种各样的活动或事件都会产生这样或那样的数据,这些数据包括人、物质、财务的数据,也包括采购、生产和销售中的数据,这些数据的采集与分析对于我们的生产或者生活决策来说十分重要。
如果没有这些实际的数据支持,生产和决策将成为一句空话,将缺乏现实基础。
在信息系统早期,相当一部分数据的处理都是通过人工手工录入的,这样不仅数据量十分庞大,劳动强度大,而且数据误码率较高,也失去了实时的意义了。
为了解决这些问题,人们需要研究和发展了各种各样的自动识别技术(automatic identification system, AIS),将人们从繁重且十分不精确的手工劳动中解放出来,提高了系统信息的实时性和准确性,从而为生产的实时调整、财务的及时总结以及决策的正确制定提供了正确的参考依据。
在计算机信息处理系统中,数据的采集是信息系统的基础,这些数据通过数据系统的分析和过滤,最终成为影响我们决策的信息。
基于nRF2401的无线LED点阵显示系统的设计
![基于nRF2401的无线LED点阵显示系统的设计](https://img.taocdn.com/s3/m/ad86d7f649649b6648d7472c.png)
基于nRF2401的无线LED点阵显示系统的设计摘要:提出了一种基于nrf2401的 led点阵信息显示系统的设计方法和电路。
系统使用stc89c52rc和stc89c516rd单片机作为控制器,采用nrf2401进行数据无线传输,外部存储器使用m25p80进行存储。
实验结果表明,该系统能够实现点阵信息无线传输和稳定显示,具有较高的性价比和良好的控制性能。
关键词:nrf2401 led点阵无线传输中图分类号:tp29 文献标识码:a 文章编号:1007-9416(2011)12-0048-021、引言传统的led显示屏的信息输入通常通过数据线与电脑直接连接来进行,并且只能固定地显示控制器内存储的信息,如果需要发布新的信息只能通过电脑联机来更新信息,对led屏位置作调整时必须进行重新布线,因此传统led显示屏不能满足远程信息实时发布的需求。
本文提出设计一种基于nrf2401的无线led点阵显示系统,将待显示的字符通过无线传输的方式发送到led点阵显示屏进行显示,增强了点阵显示屏信息发布的灵活性、实时性和便携性。
2、总体设计系统总体设计框图如图1所示。
上位机软件将用户输入信息进行字模转化后,通过rs-232串口传输发送控制模块,通过spi接口连接无线发射模块,连接无线发射模块。
无线发送模块进行fsk调制产生2.4ghz的射频信号,通过天线将数据发出,无线接收模块接收射频信号进行解调,无线接收模块通过spi接口连接接收显示控制模块,接收显示控制模块通过spi接口连接外部存储器,并控制led显示模块进行显示。
3、系统硬件设计3.1 无线发送与接收电路发送端模块的核心是一片stct89c52rc单片机,单片机接收上位机发送的数据,并通过位于上位的nrf2401送给位于下位的nrf2401。
nrf2401是单片射频收发芯片,工作于2.4~2.5ghz ism频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置,内置地址解码器、先入先出堆栈区、解调处理器、时钟处理器、gfsk滤波器、低噪声放大器、频率合成器,功率放大器等功能模块。
nrf24l01对码思路
![nrf24l01对码思路](https://img.taocdn.com/s3/m/e7b3f4f9c8d376eeaeaa318f.png)
这样做如何:对码时,让RX发送码值,TX处于接收状态,TX将接收到的码值写入相应寄存器作为发射地址,RX发完后将发送的码值写入相应寄存器作为接收地址。
对码就完成了。
RX设置为接收状态,如果规定时间之内未收到TX的数据,那么可能对码不成功,可以继续对码。
我犯了一个很坑爹的错误。
其实我的对码功能早就实现了。
只是不清楚对码完成时接收机是怎样的状态,搞了我一个月。
现在和大家分享一下我的代码吧。
谢谢楼上提出意见的朋友。
一下关于24l01的代码原来用在STM32上面的,现在我用在stm8l上面所以代码做了修改。
实现了对码的功能。
//24l01寄存器配置////////////////////////////////////////////////////////////////////////////////////////////////////////////NRF24L01寄存器操作命令#define NRF24L01_READ_REG 0x00 //读配置寄存器,低5位为寄存器地址#define NRF24L01_WRITE_REG 0x20 //写配置寄存器,低5位为寄存器地址#define NRF24L01_RD_RX_PLOAD 0x61 //读RX有效数据,1~32字节#define NRF24L01_WR_TX_PLOAD 0xA0 //写TX有效数据,1~32字节#define NRF24L01_FLUSH_TX 0xE1 //清除TX FIFO寄存器.发射模式下用#define NRF24L01_FLUSH_RX 0xE2 //清除RX FIFO寄存器.接收模式下用#define NRF24L01_REUSE_TX_PL 0xE3 //重新使用上一包数据,CE为高,数据包被不断发送.#define NRF24L01_NOP 0xFF //空操作,可以用来读状态寄存器//SPI(NRF24L01)寄存器地址#define CONFIG 0x00 //配置寄存器地址;bit0:1接收模式,0发射模式;bit1:电选择;bit2:CRC模式;bit3:CRC使能;//bit4:中断MAX_RT(达到最大重发次数中断)使能;bit5:中断TX_DS使能;bit6:中断RX_DR 使能#define EN_AA 0x01 //使能自动应答功能 bit0~5,对应通道0~5#define EN_RXADDR 0x02 //接收地址允许,bit0~5,对应通道0~5#define SETUP_AW 0x03 //设置地址宽度(所有数据通道):bit1,0:00,3字节;01,4字节;02,5字节;#define SETUP_RETR 0x04 //建立自动重发;bit3:0,自动重发计数器;bit7:4,自动重发延时 250*x+86us#define RF_CH 0x05 //RF通道,bit6:0,工作通道频率;#define RF_SETUP 0x06 //RF寄存器;bit3:传输速率(0:1Mbps,1:2Mbps);bit2:1,发射功率;bit0:低噪声放大器增益#define STATUS 0x07 //状态寄存器;bit0:TX FIFO满标志;bit3:1,接收数据通道号(最大:6);bit4,达到最多次重发//bit5:数据发送完成中断;bit6:接收数据中断;#define MAX_TX 0x10 //达到最大发送次数中断#define TX_OK 0x20 //TX发送完成中断#define RX_OK 0x40 //接收到数据中断#define OBSERVE_TX 0x08 //发送检测寄存器,bit7:4,数据包丢失计数器;bit3:0,重发计数器#define CD 0x09 //载波检测寄存器,bit0,载波检测;#define RX_ADDR_P0 0x0A //数据通道0接收地址,最大长度5个字节,低字节在前#define RX_ADDR_P1 0x0B //数据通道1接收地址,最大长度5个字节,低字节在前#define RX_ADDR_P2 0x0C //数据通道2接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;#define RX_ADDR_P3 0x0D //数据通道3接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;#define RX_ADDR_P4 0x0E //数据通道4接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;#define RX_ADDR_P5 0x0F //数据通道5接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;#define TX_ADDR 0x10 //发送地址(低字节在前),ShockBurstTM模式下,RX_ADDR_P0与此地址相等#define RX_PW_P0 0x11 //接收数据通道0有效数据宽度(1~32字节),设置为0则非法#define RX_PW_P1 0x12 //接收数据通道1有效数据宽度(1~32字节),设置为0则非法#define RX_PW_P2 0x13 //接收数据通道2有效数据宽度(1~32字节),设置为0则非法#define RX_PW_P3 0x14 //接收数据通道3有效数据宽度(1~32字节),设置为0则非法#define RX_PW_P4 0x15 //接收数据通道4有效数据宽度(1~32字节),设置为0则非法#define RX_PW_P5 0x16 //接收数据通道5有效数据宽度(1~32字节),设置为0则非法#define FIFO_STATUS 0x17 //FIFO状态寄存器;bit0,RX FIFO寄存器空标志;bit1,RX FIFO满标志;bit2,3,保留//bit4,TX FIFO空标志;bit5,TX FIFO满标志;bit6,1,循环发送上一数据包.0,不循环;////////////////////////////////////////////////////////////////////////////////////////////////////////////24L01操作线CE#define Set_NRF24L01_CE {GPIO_SetBits(GPIOB,GPIO_Pin_2);}#define Clr_NRF24L01_CE {GPIO_ResetBits(GPIOB,GPIO_Pin_2);}//#define NRF24L01_CSN PCout(4) //SPI片选信号#define Set_NRF24L01_CSN {GPIO_SetBits(GPIOB,GPIO_Pin_4);}#define Clr_NRF24L01_CSN {GPIO_ResetBits(GPIOB,GPIO_Pin_4);}//#define NRF24L01_IRQ PCin(5) //IRQ主机数据输入#define Set_NRF24L01_IRQ {GPIO_SetBits(GPIOB,GPIO_Pin_3);}#define Clr_NRF24L01_IRQ {GPIO_ResetBits(GPIOB,GPIO_Pin_3);}#define NRF24L01_IRQ (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_3))//24L01发送接收数据宽度定义#define TX_ADR_WIDTH 5 //5字节的地址宽度#define RX_ADR_WIDTH 5 //5字节的地址宽度#define TX_PLOAD_WIDTH 32 //20字节的用户数据宽度#define RX_PLOAD_WIDTH 32 //20字节的用户数据宽度void NRF24L01_Init(void);//初始化void RX_Mode(void);//配置为接收模式void TX_Mode(void);//配置为发送模式u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 u8s);//写数据区u8 NRF24L01_Read_Buf(u8 reg, u8 *pBuf, u8 u8s);//读数据区u8 NRF24L01_Read_Reg(u8 reg); //读寄存器u8 NRF24L01_Write_Reg(u8 reg, u8 value);//写寄存器u8 NRF24L01_Check(void);//检查24L01是否存在u8 NRF24L01_TxPacket(u8 *txbuf);//发送一个包的数据u8 NRF24L01_RxPacket(u8 *rxbuf);//接收一个包的数据void tx_addr(void);#endif//24l01底层代码const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x3c,0xe4,0x83,0x3d,0xed}; //发送地址const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x3c,0xe4,0x83,0x3d,0xed}; //发送地址u8 packet[RX_PLOAD_WIDTH]={0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x02,0x0d,0x0c};//初始化24L01的IO口void NRF24L01_Init(void){GPIO_Init (GPIOB,GPIO_Pin_2,GPIO_Mode_Out_PP_High_Fast);//CESet_NRF24L01_CE;GPIO_Init (GPIOB,GPIO_Pin_4,GPIO_Mode_Out_PP_High_Fast);//nssSet_NRF24L01_CSN;GPIO_Init (GPIOB,GPIO_Pin_3,GPIO_Mode_In_PU_IT);//IRQSPIx_init(); //初始化SPIClr_NRF24L01_CE; //使能24L01Set_NRF24L01_CSN; //SPI片选取消}//检测24L01是否存在//返回值:0,成功;1,失败u8 NRF24L01_Check(void){u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};u8 i;//SPIx_SetSpeed(SPI_SPEED_8); //spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)NRF24L01_Write_Buf(NRF24L01_WRITE_REG+TX_ADDR,buf,5);//写入5个字节的地址.NRF24L01_Read_Buf(TX_ADDR,buf,5); //读出写入的地址for(i=0;i<5;i++)if(buf[i]!=0XA5)break;if(i!=5)return 1;//检测24L01错误return 0; //检测到24L01}//SPI写寄存器//reg:指定寄存器地址//value:写入的值u8 NRF24L01_Write_Reg(u8 reg,u8 value){u8 status;Clr_NRF24L01_CSN; //使能SPI传输status =SPIx_ReadWriteByte(reg);//发送寄存器号SPIx_ReadWriteByte(value); //写入寄存器的值Set_NRF24L01_CSN; //禁止SPI传输return(status); //返回状态值}//读取SPI寄存器值//reg:要读的寄存器u8 NRF24L01_Read_Reg(u8 reg){u8 reg_val;Clr_NRF24L01_CSN; //使能SPI传输SPIx_ReadWriteByte(reg); //发送寄存器号reg_val=SPIx_ReadWriteByte(0XFF);//读取寄存器内容Set_NRF24L01_CSN; //禁止SPI传输return(reg_val); //返回状态值}//在指定位置读出指定长度的数据//reg:寄存器(位置)//*pBuf:数据指针//len:数据长度//返回值,此次读到的状态寄存器值u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len){u8 status,u8_ctr;Clr_NRF24L01_CSN; //使能SPI传输status=SPIx_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值for(u8_ctr=0;u8_ctr<len;u8_ctr++)pBuf[u8_ctr]=SPIx_ReadWriteByte(0XFF);//读出数据Set_NRF24L01_CSN; //关闭SPI传输return status; //返回读到的状态值}//在指定位置写指定长度的数据//reg:寄存器(位置)//*pBuf:数据指针//len:数据长度//返回值,此次读到的状态寄存器值u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len){u8 status,u8_ctr;Clr_NRF24L01_CSN; //使能SPI传输status = SPIx_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值for(u8_ctr=0; u8_ctr<len; u8_ctr++)SPIx_ReadWriteByte(*pBuf++); //写入数据Set_NRF24L01_CSN; //关闭SPI传输return status; //返回读到的状态值}//启动NRF24L01发送一次数据//txbuf:待发送数据首地址//返回值:发送完成状况u8 NRF24L01_TxPacket(u8 *txbuf){u8 sta;//SPIx_SetSpeed(SPI_SPEED_8);//spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)Clr_NRF24L01_CE;//tx_addr();NRF24L01_Write_Buf(NRF24L01_WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF 32个字节Set_NRF24L01_CE;//启动发送//while(NRF24L01_IRQ!=0);//等待发送完成sta=NRF24L01_Read_Reg(STA TUS); //读取状态寄存器的值NRF24L01_Write_Reg(NRF24L01_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志if(sta&MAX_TX)//达到最大重发次数{NRF24L01_Write_Reg(NRF24L01_FLUSH_TX,0xff);//清除TX FIFO寄存器return MAX_TX;}if(sta&TX_OK)//发送完成{return TX_OK;}return 0xff;//其他原因发送失败}//启动NRF24L01发送一次数据//txbuf:待发送数据首地址//返回值:0,接收完成;其他,错误代码u8 NRF24L01_RxPacket(u8 *rxbuf){u8 sta;//SPIx_SetSpeed(SPI_SPEED_8); //spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)sta=NRF24L01_Read_Reg(STA TUS); //读取状态寄存器的值NRF24L01_Write_Reg(NRF24L01_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志if(sta&RX_OK)//接收到数据{NRF24L01_Read_Buf(NRF24L01_RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据NRF24L01_Write_Reg(NRF24L01_FLUSH_RX,0xff);//清除RX FIFO寄存器return 0;}return 1;//没收到任何数据}//该函数初始化NRF24L01到RX模式//设置RX地址,写RX数据宽度,选择RF频道,波特率和LNA HCURR//当CE变高后,即进入RX模式,并可以接收数据了void RX_Mode(void){Clr_NRF24L01_CE;NRF24L01_Write_Buf(NRF24L01_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址NRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_AA,0x01); //使能通道0的自动应答NRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_CH,40); //设置RF通信频率NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启NRF24L01_Write_Reg(NRF24L01_WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式Set_NRF24L01_CE; //CE为高,进入接收模式}//该函数初始化NRF24L01到TX模式//设置TX地址,写TX数据宽度,设置RX自动应答的地址,填充TX发送数据,选择RF频道,波特率和LNA HCURR//PWR_UP,CRC使能//当CE变高后,即进入RX模式,并可以接收数据了//CE为高大于10us,则启动发送.void TX_Mode(void){Clr_NRF24L01_CE;//NRF24L01_Write_Buf(NRF24L01_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址//NRF24L01_Write_Buf(NRF24L01_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK/*NRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_AA,0x01); //使能通道0的自动应答NRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址NRF24L01_Write_Reg(NRF24L01_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_CH,40); //设置RF通道为40NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_SETUP,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启NRF24L01_Write_Reg(NRF24L01_WRITE_REG+CONFIG,0x0e); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断 */NRF24L01_Write_Reg(NRF24L01_WRITE_REG+CONFIG,0x7c); //20,Power offNRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_AA,0x00); //21,NO AUTO-ACKNRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_RXADDR,0x01); //22,enable rx PIPEO channel 0 NRF24L01_Write_Reg(NRF24L01_WRITE_REG+SETUP_AW,0x03); //23, set 5 bytes addressNRF24L01_Write_Reg(NRF24L01_WRITE_REG+SETUP_RETR,0x00); //24,disable retrNRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_CH,0x50); //25,channel 0x50NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_SETUP,0x06); //26,1Mbps 0dBmNRF24L01_Write_Reg(NRF24L01_WRITE_REG+STA TUS,0x70); //27,channel 0,disable all interrupt NRF24L01_Write_Reg(NRF24L01_WRITE_REG+CONFIG,0x7e); //20,Power onNRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_CH,0x50); //25,channel 0x50//NRF24L01_Write_Buf(NRF24L01_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址//NRF24L01_Write_Buf(NRF24L01_WRITE_REG+TX_ADDR,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACKSet_NRF24L01_CE;//CE为高,10us后启动发送}void tx_addr(void){NRF24L01_Write_Buf(NRF24L01_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址NRF24L01_Write_Buf(NRF24L01_WR_TX_PLOAD,packet,10);//写数据到TX BUF 32个字节}//以上是24L01的底层代码,下面是发送数据,一下程序只完成了对码。
NRF2401的工作原理
![NRF2401的工作原理](https://img.taocdn.com/s3/m/ba220d15a6c30c2259019e51.png)
NRF2401的工作原理1. 引言nRF2401是单片射频收发芯片,工作于2.4~2.5GHz ISM频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。
芯片能耗非常低,以-5dBm的功率发射时,工作电流只有10.5mA,接收时工作电流只有18mA,多种低功率工作模式,节能设计更方便。
其DuoCeiverTM技术使nRF2401可以使用同一天线,同时接收两个不同频道的数据。
nRF2401适用于多种无线通信的场合,如无线数据传输系统、无线鼠标、遥控开锁、遥控玩具等。
2. 芯片结构、引脚说明2.1 芯片结构nRF2401内置地址解码器、先入先出堆栈区、解调处理器、时钟处理器、GFSK滤波器、低噪声放大器、频率合成器,功率放大器等功能模块,需要很少的外围元件,因此使用起来非常方便。
QFN24引脚封装,外形尺寸只有5×5mm。
nRF2401的功能模块如图1所示。
2.2 引脚说明表1:nRF2401引脚]3. 工作模式nRF2401有工作模式有四种:收发模式、配置模式、空闲模式和关机模式。
nRF2401的工作模式由PWR_UP 、CE、TX_EN和CS三个引脚决定,详见表2。
表2:nRF2401工作模式3.1 收发模式nRF2401的收发模式有ShockBurstTM收发模式和直接收发模式两种,收发模式由器件配置字决定,具体配置将在器件配置部分详细介绍。
3.1.1 ShockBurstTM收发模式ShockBurstTM收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这样可以尽量节能,因此,使用低速的微控制器也能得到很高的射频数据发射速率。
与射频协议相关的所有高速信号处理都在片内进行,这种做法有三大好处:尽量节能;低的系统费用(低速微处理器也能进行高速射频发射);数据在空中停留时间短,抗干扰性高。
nRF2401的ShockBurstTM技术同时也减小了整个系统的平均工作电流。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<stdio.h> //标准输入输出#include<intrins.h>#include<api.h>sbit RS = P2^4; //Pin4sbit RW = P2^5; //Pin5sbit E = P2^6; //Pin6#define Data P0//数据端口//===================================================================== ========================#define MODE 0//MODE=1时为发送代码为0则是接受代码#define uchar unsigned char#define RX_ADR_WIDTH 5#define TX_ADR_WIDTH 5 // 5 bytes TX(RX) address width#define TX_PLOAD_WIDTH 1 // 20 bytes TX payload#define RX_PLOAD_WIDTH 1uchar const TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // Define a static TX addressuchar const RX_ADDRESS[RX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // Define a static RX addressuchar ch,Num,read_flag;uchar Tx_Buf[TX_PLOAD_WIDTH],Rx_Buf[RX_PLOAD_WIDTH];/**************************************************/sbit CE = P1^6;sbit CSN= P1^0;sbit SCK= P1^1;sbit MOSI= P1^2;sbit MISO= P1^3;sbit IRQ = P3^2;/**************************************************/uchar bdata sta;sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;/**************************************************//*1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK*//*-----------------------------------------------名称:LCD1602公司:上海浩豚电子科技有限公司网站:编写:师访日期:2009.5修改:无内容:通过标准程序静态显示2行字符------------------------------------------------*/char data TimeNum[]=" ";/******************************************************************/ /* 函数声明*/ /******************************************************************/ /******************************************************************/ /* 微秒延时函数*/ /******************************************************************/ void DelayUs(unsigned char us)//delay us{unsigned char uscnt;uscnt=us>>1; /*12MHz频率*/while(--uscnt);}/******************************************************************/ /* 毫秒函数声明*/ /******************************************************************/ void DelayMs(unsigned char ms){while(--ms){DelayUs(250);DelayUs(250);DelayUs(250);DelayUs(250);}}/******************************************************************/ /* 写入命令函数*/ /******************************************************************/ void WriteCommand(unsigned char c){DelayMs(5);//操作前短暂延时,保证信号稳定E=0;RS=0;RW=0;_nop_();E=1;Data=c;E=0;}/******************************************************************/ /* 写入数据函数*/ /******************************************************************/ void WriteData(unsigned char c){DelayMs(5); //操作前短暂延时,保证信号稳定E=0;RS=1;RW=0;_nop_();E=1;Data=c;E=0;RS=0;}/******************************************************************/ /* 写入字节函数*/ /******************************************************************/ void ShowChar(unsigned char pos,unsigned char c){unsigned char p;if (pos>=0x10)p=pos+0xb0; //是第1行则命令代码高4位为0xcelsep=pos+0x80; //是第2行则命令代码高4位为0x8WriteCommand (p);//写命令WriteData (c); //写数据}/******************************************************************/ /* 写入字符串函数*/ /******************************************************************/ void ShowString (unsigned char line,char *ptr){unsigned char l,i;l=line<<4;for (i=0;i<16;i++)ShowChar (l++,*(ptr+i));//循环显示16个字符}void ShowNum(uchar num){uchar o,p,q;o=num/100;p=num/10%10;q=num%10;ShowChar(1,o);ShowChar(1,p);ShowChar(1,q);}/******************************************************************//* 初始化函数*//******************************************************************/void InitLcd(){DelayMs(15);WriteCommand(0x38); //display modeWriteCommand(0x38); //display modeWriteCommand(0x38); //display modeWriteCommand(0x06); //显示光标移动位置WriteCommand(0x0c); //显示开及光标设置WriteCommand(0x01); //显示清屏}//================================以上为LCD显示程序============================================void Inituart(void){TMOD = 0x20; //timer1 working mode 2TH1 = 0xfd;TL1 = 0xfd; //...fd=9600 for 11.0592mhz FoscSCON = 0x50; //uart mode 1,ren==1PCON = 0x00; //smod=0TR1 = 1;IE=0x90;TI=1;//start timer1}/******************************************************************//* 微秒延时函数*//******************************************************************/void delay_us(unsigned char us)//delay us{unsigned char uscnt;uscnt=us>>1; /*12MHz频率*/while(--uscnt);}/******************************************************************//**************************************************/uchar SPI_RW(uchar byte){uchar bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit{MOSI = (byte & 0x80); // output 'byte', MSB to MOSIbyte = (byte << 1); // shift next bit into MSB..SCK = 1; // Set SCK high..byte |= MISO; // capture current MISO bitSCK = 0; // ..then set SCK low again }return(byte); // return read byte}/**************************************************/BYTE SPI_Read(BYTE reg){BYTE reg_val;CSN = 0; // CSN low, initialize SPI communication...SPI_RW(reg); // Select register to read from..reg_val = SPI_RW(0); // ..then read register valueCSN = 1; // CSN high, terminate SPI communicationreturn(reg_val); // return register value}/**************************/uchar SPI_RW_Reg(BYTE reg,BYTE value){uchar status;CSN = 0; // CSN low, init SPI transactionstatus = SPI_RW(reg); // select registerSPI_RW(value); // ..and write value to it..CSN = 1; // CSN high againreturn(status); // return nRF24L01 status byte}/**************************************************/uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes){uchar status,byte_ctr;CSN = 0; // Set CSN low, init SPI tranactionstatus = SPI_RW(reg); // Select register to write to and read status bytefor(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // then write all byte in buffer(*pBuf) SPI_RW(*pBuf++);CSN = 1; // Set CSN high againreturn(status); // return nRF24L01 status byte}/**************************************************//**************************************************/uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes){uchar status,byte_ctr;CSN = 0; // Set CSN low, init SPI tranactionstatus = SPI_RW(reg); // Select register to write to and read status bytefor(byte_ctr=0;byte_ctr<bytes;byte_ctr++)pBuf[byte_ctr] = SPI_RW(0); // Perform SPI_RW to read byte from nRF24L01 CSN = 1; // Set CSN high againreturn(status); // return nRF24L01 status byte}/**************************************************/void nRF24L01_TxPacket(uchar *tx_buf){CE=0;SPI_RW_Reg(FLUSH_TX,0x00);SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);CE=1;DelayUs(15);CE=0;}/***********************RX_MODE接收函数***************************/ uchar nRF24L01_RxPacket(uchar *rx_buf){uchar revale=0;CE=1;DelayUs(130);sta=SPI_Read(STA TUS);if(RX_DR){CE=0;SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);revale=1;}SPI_RW_Reg(WRITE_REG+STA TUS,sta);return revale;}/*******************************************/void nRF24L01_TX_Config(void){DelayUs(100);CE=0;CSN=1;SCK=0;SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);SPI_RW_Reg(WRITE_REG+RF_CH,40);SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH); CE=1;}/********************RX_MODE配置函数***********************/void nRF24L01_RX_Config(void){CE=0;CSN=1;SCK=0;SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);SPI_RW_Reg(WRITE_REG+EN_AA,0x01);SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);SPI_RW_Reg(WRITE_REG+RF_CH,40);SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH); }/*********************向串口发送一个字符*************/void send_char_com( unsigned char ch){SBUF=ch;while (TI== 0);TI = 0 ;}/***********串口接收中断函数***************************/void serial () interrupt 4{if (RI){RI = 0 ;ch=SBUF;read_flag= 1 ; //就置位取数标志P1=ch;}}/******************************************/void main(void){InitLcd();nRF24L01_TX_Config();Inituart();while(1){if(read_flag==1){read_flag=0;Tx_Buf[0]=ch;DelayUs(10);//接收到COM的数据后启动nRF模块nRF24L01_TxPacket(Tx_Buf);DelayMs(10);send_char_com(ch);sta=SPI_Read(STA TUS);SPI_RW_Reg(WRITE_REG+STA TUS,sta);/*if(ch==0x01||ch==0x02||ch==0x03||ch==0x04){nRF24L01_RX_Config();while(1){if(nRF24L01_RxPacket(Rx_Buf)){ch=Rx_Buf[0];send_char_com(ch);ShowNum(ch);}}}*/}}// end of while}。