




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(以下只是我的一些个人看法,大家谨慎参考,可能会有错误,欢迎大家指出。)nRF905无法实现通讯的原因:1、nRF905承受电压为3.6v,不慎接错电源会导致其烧坏。2、nRF905的发送效果与电源供电能力有关,输出功率为+10dbm时,且通过笔记本电脑的USB接口供电给nrf905,有时会导致信号无法发出。若更换稳定且供电能力强的电源后,还无信号发出,请重新开机上电。3、为保证信号发出,可将nrf905模式转变时的延时程序与开启发送模式时的延时程序加长,以确保信号发出。4、发送数据时,DR可能在数据全部发送完成前被置高。可采用以下程序列子。ce=1;txen=1;/ce ,txen 置高后进
2、入发送模式delay(20);/延时约20ms,发送为+10dbm模式,需要很高电流,/增长延时以确保信号发出while(!dr);/可能数据在开始发送的瞬间dr就被置高了,去掉前一句/延时程序会导致发送失败5、 接收端CD信号在接收模式时:在未检测到同频率信号时,会有短时的高电平脉冲(通过示波器观察,电平会瞬间跳高,短时间后跳低);检测到同频率载波后会一直为高。6、 CD、AM、DR这几个端口得初始化为1;7、csn置低后,得先输入一种操作命令,然后再输入该种数据;输入下一种操作命令,得先把csn置高,再次置低后,即可输入第二中操作命令。(以上几点是我在使用nrf905过程中遇到的问题,如果
3、这些原因不能解决你的疑问,我冒昧的估计,可能是spi时序的问题了。)nRF905发送程序:/*nRF905的发送效果与电源供电能力有关,在输出功率在+10dbm时,通过usb供电给nrf905,有时导致信号无法发出。更换稳定且供电能力强的电源后,无信号发出,请从新开机上电*/*为保证信号发出,可将nrf905模式转换后的延时与开启发送模式后的延时加长,以确保信号发出*/#include #include#define uchar unsigned char#define uint unsigned int/*nRF905的操作命令*/#define WC 0x00 / 从0字节开始,写配置寄存
4、器 #define RC 0x10 / 从0字节开始,读配置寄存器 #define WTP 0x20 / 向TX-Payload寄存器写入发送有效数据 #define RTP 0x21 / 从TX-Payload寄存器读取发送有效数据 #define WTA 0x22 / 向TX-Address寄存器写入发送地址 #define RTA 0x23 / 从TX-Address寄存器读取发送地址 #define RRP 0x24 / 从RX-Payload寄存器读取接收到的有效数据sbit led=P10; /定义一个io口,外接灯泡以观察发送情况/*定义spi接口*/sbit sck=P00;/
5、spi时钟信号sbit csn=P01;/置低一次,先输入一种操作命令,然后再输入该种数据sbit miso=P02;/spi数据从nRF905中输出口sbit mosi=P03;/spi数据输入到nRF905口sbit am=P04;/nRF905地址匹配信号口sbit dr=P05;/nRF905数据准备完毕信号口sbit cd=P06;/nRF905载波检测信号口sbit ce=P07;sbit pwr=P21;sbit en=P20;/TX_EN口/*nrf905寄存器配置数据*/uchar code config10= 0x4c, /设置频段430mhz0x0c, /输出功率10db
6、,不重复发送,节电为正常模式0x44, /地址宽度设置为4字节0x01, 0x01,/接收发送有效数据长度为1字节0xe7, 0xe7, 0xe7,0xe7,/接收地址0x58 /无外部时钟,16m晶振,crc允许,8位crc校验; void delay(uint xms)/延时xms毫秒uint x,y;for(x=xms;x0;x-)for(y=110;y0;y-);/*spi数据写入函数*/void spiwrite(uchar byte)uchar a,i;a=byte;for(i=0;i8;i+)sck=0;_nop_();_nop_();a=a1;_nop_();_nop_();m
7、osi=CY;_nop_();_nop_();sck=1; /上升沿使数据写入_nop_();_nop_();sck=0;/*nrf905初始化函数*/void init()uchar i;csn=1;/ Spi disablesck=0;/ Spi clock line init lowdr=1;/ Init DR for inputam=1;/ Init AM for inputcd=1;/ Init CD for inputpwr=1;/ nRF905 power once=0;/ Set nRF905 in standby modeen=0;/ set radio in Rx mode
8、delay(5); /nRF905模式转变时,延时稍微长点,以防止数据丢失csn=0;_nop_();_nop_();spiwrite(WC); /写入寄存器配置命令,后跟寄存器配置数据for (i=0;i10;i+)spiwrite(configi);csn=1;_nop_();_nop_();/*数据发送函数*/void send(uchar address,uchar byte)ce=0;en=0;/进入spi编程模式delay(5);csn=0;_nop_();_nop_();spiwrite(WTA); /写入发送地址命令,后跟4字节地址spiwrite(address);spiwr
9、ite(address);spiwrite(address);spiwrite(address);_nop_();_nop_();csn=1;_nop_();_nop_();csn=0;_nop_();_nop_();spiwrite(WTP);/写发送数据命令,后跟一字节数据spiwrite(byte);_nop_();_nop_();csn=1;_nop_();_nop_();ce=1;en=1;/ce ,en 置高后进入发送模式/从spi编程模式转变到发送模式需要时间delay(20);/发送为+10dbm模式,需要很高电流,增大延时以确保信号发出while(!dr);/估计数据在开始发
10、送的瞬间dr就被置高了 ,不可去掉前一句延时程序led=0;/数据发送完成后灯泡被点亮en=0;ce=0;/en被置低 ,dr置低_nop_();_nop_(); if(dr=0)/使灯泡熄灭,等待下次数据发送后被点亮 delay(400);led=1;delay(400);void main() init(); /nrf905初始化函数while(1)send(0xe7,0x66);delay(500); /减缓发送程序,以便用led观察送与接收情况 nRF905接收程序:/*nRF905的发送效果与电源供电能力有关,在输出功率在+10dbm时,通过usb供电给nrf905,有时导致信号无法
11、发出。更换稳定且供电能力强的电源后,无信号发出,请从新开机上电*/*为保证信号发出,可将nrf905模式转换后的延时与开启发送模式后的延时加长,以确保信号发出*/*通过串口将读出的数据传给电脑*/#include #include#define uchar unsigned char#define uint unsigned intuchar pp;/*操作命令*/#define WC 0x00 / 从0字节开始,写配置寄存器 #define RC 0x10 / 从0字节开始,读配置寄存器 #define WTP 0x20 / 向TX-Payload寄存器写入发送有效数据 #define RT
12、P 0x21 / 从TX-Payload寄存器读取发送有效数据 #define WTA 0x22 / 向TX-Address寄存器写入发送地址 #define RTA 0x23 / 从TX-Address寄存器读取发送地址 #define RRP 0x24 / 从RX-Payload寄存器读取接收到的有效数据/*csn置低一次,先输入一种操作命令,输入该种数据*/sbit led=P10;/定义一个io口,外接灯泡以观察数据接收情况/定义spi接口sbit sck=P00;sbit csn=P01;sbit miso=P02;sbit mosi=P03;sbit am=P04;sbit dr=
13、P05;sbit cd=P06;sbit ce=P07;sbit pwr=P21;sbit en=P20;/*寄存器配置数据*/uchar code config10= 0x4c, /设置频段430mhz0x0c, /输出功率10db,不重复发送,节电为正常模式0x44, /地址宽度设置为4字节0x01, 0x01,/接收发送有效数据长度为1字节0xe7, 0xe7, 0xe7,0xe7,/接收地址0x58 /无外部时钟,16m晶振,crc允许,8位crc校验; void delay(uint xms)uint x,y;for(x=xms;x0;x-)for(y=110;y0;y-);/*数据
14、写入函数*/void spiwrite(uchar byte)uchar a,i;a=byte;for(i=0;i8;i+)sck=0;_nop_();_nop_();a=a1;_nop_();_nop_();mosi=CY;delay(10);sck=1; /上升沿使数据写入_nop_();_nop_();sck=0;/*数据读出函数*/uchar spiread()uchar a=0,i;sck=0;_nop_();_nop_();for(i=0;i8;i+)sck=1;_nop_();_nop_();a=(a1)|miso;_nop_();_nop_();sck=0;/下降沿数据读出_n
15、op_();_nop_();return a;/*nRF905初始化函数*/void init()uchar i;csn=1;/ Spi disablesck=0;/ Spi clock line init lowdr=1;/ Init DR for inputam=1;/ Init AM for inputcd=1;/ Init CD for inputpwr=1;/ nRF905 power once=0;/ Set nRF905 in standby modeen=0;/ set radio in Rx modedelay(5);/nRF905模式转变时,延时稍微长点,以防止数据丢失cs
16、n=0;_nop_();_nop_();spiwrite(WC); /写入寄存器配置命令,后跟寄存器配置数据for (i=0;i10;i+)spiwrite(configi);_nop_();_nop_();csn=1;_nop_();_nop_();/*初始化定时器1,用于产生串口通讯的采样脉冲 使用11.0592的晶振效果最好*/void sp_init() TMOD=0x20;TH1=0xfd; TL1=0xfd; SM0=1; SM1=1; TR1=1; EA=1; ES=1; /*将数据从nRF905的寄存器中读出来,以检查数据是否出错*/void config_read() ce=0;en=0;delay(5);/nRF905模式转变时,延时稍微长点,以防止数据丢失csn=0;_nop_();_nop_();spiwrite(RRP);/从TX-Payload寄存器读取发送有效数据_nop_();_nop_();pp=spiread();_nop_();_nop_();csn=1;_nop_();_nop_();/*开启接收状态函数*/void receive()ce=1;en=0;delay(10);/nRF905模式转变时,延时稍微长点,以防止数据丢失led=0;/为接收状态时,灯泡亮void m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 道路下沉式绿地施工方案
- 泡沫混凝土屋面施工方案
- 施工方案项目部人员配置
- ERP系统在智能制造中的应用-洞察及研究
- 信号转导网络在细胞命运决定中的作用-洞察及研究
- 中医护理第六章题库及答案解析
- 证券从业资格考试之后及答案解析
- 摄影在新闻报道中的重要性-洞察及研究
- 浙江安全a证考试题库及答案解析
- 智慧城市安全性能测试题及答案解析
- 河北省承德市隆化县第二中学2023-2024学年九年级上学期期中考试物理试题(无答案)
- 2024年新人教版八年级上册物理全册教案
- 伤口造口专科护士进修汇报
- MOOC 实验室安全学-武汉理工大学 中国大学慕课答案
- 彩钢房建造合同
- 2型糖尿病低血糖护理查房课件
- 医院物业服务投标方案
- 高压燃气管道施工方案
- 国家免疫规划疫苗儿童免疫程序说明-培训课件
- GB/T 13298-1991金属显微组织检验方法
- 劳动人事争议仲裁案例分析与问题探讨课件
评论
0/150
提交评论