nRF905無線芯片是由挪威NORDIC公司出品的低�1GHz無線�(shù)傳芯�,主要工作于433MHz�868MHz�915MHz的ISM頻段。芯片內(nèi)�頻率合成�、功率放大器�晶體振蕩���(diào)制器等功能模�,輸出功率和通信頻道可通過程序�(jìn)行配�。非常適合于低功�、低成本的系�(tǒng)�(shè)�(jì)�
�422.4�473.5MHz工作頻段
�512�(gè)通訊頻道,滿足多�(diǎn)通訊、分�、跳頻等�(yīng)用需�,通道切換�(shí)間≤6us
◆發(fā)射功率可�(shè)置為�10dBm�6dBm�-2dBm�-10dBm
◆通過SPI接口與MCU連接
◆支�50kbps傳輸速率
◆ShockBurst傳輸模式,自�(dòng)生成前導(dǎo)碼和CRC校驗(yàn)�
◆工作電壓范圍:1.9V�3.6V,待�(jī)模式下電流僅�12.5μA
◆工作溫度范圍:-40℃~+85�
nRF905采用Nordic公司的VLSI ShockBurst技�(shù)。ShockBurst技�(shù)使nRF905能夠提供高速的�(shù)�(jù)傳輸,而不需要昂貴的高速M(fèi)CU來�(jìn)行數(shù)�(jù)處理/�(shí)鐘覆�。通過將與RF�(xié)議有�(guān)的高速信�(hào)處理放到芯片�(nèi),nRF905提供給應(yīng)用的微控制器一�(gè)SPI接口,速率由微控制器自己設(shè)定的接口速度決定。nRF905通過ShockBurst工作模式在RF以速率�(jìn)行連接�(shí)降低�(shù)字應(yīng)用部分的速度來降低在�(yīng)用中的平均電流消�。在ShockBurst RX模式�,地址匹配AM和數(shù)�(jù)�(zhǔn)備就緒DR信號(hào)通知MCU一�(gè)有效的地址和數(shù)�(jù)包已�(jīng)各自接收完成。在ShockBurst TX模式中,nRF905自動(dòng)�(chǎn)生前�(dǎo)碼和CRC校驗(yàn)�,數(shù)�(jù)�(zhǔn)備就緒DR信號(hào)通知MCU�(shù)�(jù)傳輸已經(jīng)完成??傊?,這意味著降低MCU的存�(chǔ)器需求也就是說降低MCU成本,又同時(shí)縮短軟件開發(fā)�(shí)間�
1)典型ShockBurst TX模式�
?�?、當(dāng)�(yīng)用MCU有遙�?cái)?shù)�(jù)節(jié)�(diǎn)�(shí),接收節(jié)�(diǎn)的地址TX-address和有效數(shù)�(jù)TX-payload通過SPI接口傳送給nRF905�(yīng)用協(xié)議或MCU�(shè)置接口速度�
?、凇CU�(shè)置TRX_CE、TX_EN為高來激活nRF905 ShockBurst傳輸�
�、nRF905 ShockBurst�
l 無線系統(tǒng)自動(dòng)上電
l �(shù)�(jù)包完成(加前�(dǎo)碼和CRC校驗(yàn)碼)
l �(shù)�(jù)包發(fā)送(100kbps,GFSK,曼徹斯特編碼)
�、如果AUTO_RETRAN被設(shè)置為高nRF905將連續(xù)地發(fā)送數(shù)�(jù)包直到TRX_CE被設(shè)置為��
?�?、當(dāng)TRX_CE被設(shè)置為低時(shí),nRF905�(jié)束數(shù)�(jù)傳輸并自�(dòng)�(jìn)入standby模式�
2)典型ShockBurst RX模式
?�?、通過�(shè)置TRX_CE高,TX_EN低來選擇ShockBurst模式�
?、凇?50us以后,nRF905�(jiān)�(cè)空中的信息;
?、邸�?dāng)nRF905�(fā)�(xiàn)和接收頻率相同的載波�(shí),載波檢�(cè)CD被置��
?�?、當(dāng)nRF905接收到有效的地址�(shí),地址匹配AM被置��
?�?、當(dāng)nRF905接收到有效的�(shù)�(jù)包(CRC校驗(yàn)正確)時(shí),nRF905去掉前導(dǎo)�、地址和CRC�,數(shù)�(jù)�(zhǔn)備就緒(DR)被置高�
?�?、MCU�(shè)置TRX_CE�,�(jìn)入standby模式低電流模��
�、MCU可以以合適的速率通過SPI接口讀出有效數(shù)�(jù)�
?、唷�?dāng)所有的有效�(shù)�(jù)被讀出后,nRF905將AM和DR置低�
?�?、nRF905將準(zhǔn)備�(jìn)入ShockBurst RX、ShockBurst TX或Powerdown模式�
3)掉電模�
在掉電模式中,nRF905被禁�,電流消耗最�,典型值低�2.5uA。當(dāng)�(jìn)入這種模式�(shí),nRF905是不活動(dòng)的狀�(tài)。這時(shí)候平均電流消耗最�,電池使用壽命最�(zhǎng)。在掉電模式�,配置字的內(nèi)容保持不��
4)STANDBY模式
Standby模式在保持電流消耗最小的同時(shí)保證最短的ShockBurstRX、ShockBurstTX的啟�(dòng)�(shí)�。當(dāng)�(jìn)入這種模式�(shí),一部分晶體振蕩器是活動(dòng)�。電流消耗取決于晶體振蕩器頻率,如:�(dāng)頻率�4MHZ�(shí),IDD=12uA;當(dāng)頻率�20MHZ �(shí),IDD=46uA。如果uPCLK(Pin3)被使能,電流消耗將增加。并且取決于�(fù)載電容和頻率。在此模式中,配置字的內(nèi)容保持不��
nRF905的所有配置都通過SPI接口�(jìn)�。SPI接口�5�(gè)寄存器組�,一條SPI指令用來決定�(jìn)行什么操�。SPI接口只有在掉電模式和Standby模式是激活的�
1)狀�(tài)寄存器(Status-Register�
寄存器包含數(shù)�(jù)就緒DR和地址匹配AM狀�(tài)�
2)RF配置寄存器(RF-Configuration Register�
寄存器包含收�(fā)器的頻率、輸出功率等配置信息�
3)發(fā)送地址(TX-Address�
寄存器包含目�(biāo)器件地址,字節(jié)�(zhǎng)度由配置寄存器設(shè)��
4)發(fā)送有效數(shù)�(jù)(TX-Payload�
寄存器包含發(fā)送的有效ShockBurst�(shù)�(jù)包數(shù)�(jù),字節(jié)�(zhǎng)度由配置寄存器設(shè)��
5)接收有效數(shù)�(jù)(RX-Payload�
寄存器包含接收到的有效ShockBurst�(shù)�(jù)包數(shù)�(jù),字節(jié)�(zhǎng)度由配置寄存器設(shè)�。在寄存器中的有效數(shù)�(jù)由數(shù)�(jù)�(zhǔn)備就緒DR指示�
超低功耗無線收�(fā)�
無線傳感�(wǎng)�(luò)
家庭和樓宇自�(dòng)�
無線�(bào)警安全系�(tǒng)
無線�(shù)�(jù)傳輸系統(tǒng)
�(bào)警及安全系統(tǒng)
家庭自動(dòng)�
遙感�(jiān)�(cè)
無線門禁系�(tǒng)
無線鼠標(biāo)
遙控開鎖
遙控玩具
�(fā)送部�
/****************************
//寫發(fā)射數(shù)�(jù)命令:20H
//讀�(fā)射數(shù)�(jù)命令:21H
//寫發(fā)射地址命令:22H
//讀�(fā)射地址命令:23H //讀接收�(shù)�(jù)命令: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; //狀�(tài)輸出�4//
sbit led=P1^0;
/************//*RF寄存器配�*//*************
// 0x00, //配置命令//
// 0x6C, //CH_NO,配置頻段�433.2MHZ
// 0x0E, //輸出功率�10db,不重�(fā),節(jié)電為正常模式
// 0x44, //地址寬度�(shè)�,為4字節(jié)
// 0x03,0x03, //接收�(fā)送有效數(shù)�(jù)�(zhǎng)度為3字節(jié)
// 0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校驗(yàn),外部時(shí)鐘信�(hào)使能�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,不重�(fā),節(jié)電為正常模式
0x44, //地址寬度�(shè)置,�4字節(jié)
0x02,0x02, //接收�(fā)送有效數(shù)�(jù)�(zhǎng)度為32字節(jié)
0xCC,0xCC,0xCC,0xCC, //接收地址
0x58, //CRC充許�8位CRC校驗(yàn),外部時(shí)鐘信�(hào)不使能,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口寫�(shù)�(jù)至NRF905�(nèi)//
{
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); //寫發(fā)送地址,后面�4字節(jié)地址//
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
CSN=1;
delay(1);
CSN=0;
SpiWrite(0x20); //寫發(fā)送數(shù)�(jù)命令,后面跟三字節(jié)�(shù)�(jù)//
SpiWrite(0x01);
SpiWrite(0x02);
// SpiWrite(0x04);
CSN=1;
delay(1);
TRX_CE=1;
TXEN=1; //CE,EN同時(shí)�1,為發(fā)送模�
delay(1); //等待�(fā)送完�//
led=~led;
// while(!DR); //在非屏蔽狀�(tài)�,只能發(fā)射一�
TRX_CE=0;
//led=~led; //加上led后,�(duì)接收�(chǎn)生了一定的影響�
//while(!DR); //有時(shí)多接收一次的�(shù)�(jù)
}
void Ini_System(void)
{ //初始化配置寄存器//
uchar i;
// delay(1);
CSN=1;
SCK=0;
DR=0;
PWR=1; //�(jìn)入掉電模�
TRX_CE=0;
TXEN=0;
delay(1);
CSN=0; //�(jìn)入SIP模式
for(i=0;i<11;i++)
{
SpiWrite(RFConf[i]); //�(shè)置配置寄存器
}
CSN=1; //�(guān)閉SPI,�(jìn)入發(fā)射狀�(tài)
// PWR=1;
}
void main(void)
{
led=1;
Ini_System(); //�(shè)置配�,并�(jìn)入發(fā)射模�
// PWR=1; //�(jìn)入掉電模�
while(1)
{
TxPacket(); //�(fā)送數(shù)�(jù)
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; //狀�(tài)輸出�4//
sbit led=P1^0;
/************//*RF寄存器配�*//*************
// 0x00, //配置命令//
// 0x6C, //CH_NO,配置頻段�433.2MHZ
// 0x0E, //輸出功率�10db,不重�(fā),節(jié)電為正常模式
// 0x44, //地址寬度�(shè)置,�4字節(jié)
// 0x03,0x03, //接收�(fā)送有效數(shù)�(jù)�(zhǎng)度為3字節(jié)
// 0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校驗(yàn),外部時(shí)鐘信�(hào)使能�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校驗(yàn),外部時(shí)鐘信�(hào)不使��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口寫�(shù)�(jù)至NRF905�(nèi)//
{
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) //接收�(shù)�(jù)�//
{
uchar i;
//while(DR)
for (i = 0 ;i < 2 ;i++)
{
//led=~led;
TxRxBuffer[i] = SpiRead();
//i++;
}
}
void Wait_Rec_Packet(void) //等待接收�(shù)�(jù)�//
{
// uchar temp;
// PWR=1;
TXEN=0; //接收模式
TRX_CE=1;
delay(2);
while(!DR)
{ delay(10);
// if(DR) //�(shù)�(jù)接收成功
{
led=~led;
TRX_CE=0; //如果�(shù)�(jù)�(zhǔn)備好,則�(jìn)入待�(jī)模式,以便SPI口操�
CSN=0;
delay(1);
SpiWrite(0x24); //讀nRF905所接受到的�(shù)�(jù)
RxPacket(); //保存�(shù)�(jù)
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; //�(jìn)入掉電模�
TRX_CE=0;
TXEN=0;
delay(1);
CSN=0; //�(jìn)入SIP模式
for(i=0;i<11;i++)
{
SpiWrite(RFConf[i]); //�(shè)置配置寄存器
}
CSN=1; //�(guān)閉SPI,�(jìn)入接收狀�(tài)
PWR=1;
//TRX_CE=1;
//TXEN=0;
}
void main(void)
{
P0=0x00;
led=1;
Ini_System(); //�(shè)置配�,并�(jìn)入接收模� (收�
PWR=1; //�(jìn)入掉電模�
while(1)
{
Wait_Rec_Packet(); //等待接收完成,保存完接收數(shù)�(jù)(保存數(shù)�(jù)+地址�
//CSN=0;
P0 = TxRxBuffer[0];
delay(600);
P0 = TxRxBuffer[1];
delay(600);
P0 = TxRxBuffer[2];
delay(600);
//CSN=1;
}
}
程序�(jīng)本人�(cè)試后沒太大問題,如要深入研究,本人附加詳�(xì)資料,希望對(duì)您有所幫助�
1�、模式控制接口:
該接口由 PWR 、TRX_CE、TX_EN組成控制由nRF905組成的高頻頭的四種工作模式:掉電� SPI編程模式;待�(jī)和SPI編程模式 ;發(fā)射模�;接收模��
2�、SPI接口�
SPI 接口� CSN、SCK、MOSI以及MISO組成。在配置模式下單片機(jī)通過SPI接口配置高頻頭的工作參數(shù);在�(fā)�/接收模式下單片機(jī)SPI接口�(fā)送和接收�(shù)�(jù)�
3�、狀�(tài)輸出接口�
提供載波檢測(cè)輸出CD,地址匹配輸出AM,數(shù)�(jù)就緒輸出DR�
1�、晶體規(guī)�
為了�(shí)�(xiàn)晶體振蕩器低功耗和快速啟�(dòng)�(shí)間的解決方案,推薦使用低值晶體負(fù)載電�。指定CL=12pF是可以接受的。但�,也可能增大�16pF。指定一�(gè)晶體并行相等電容,Co=1.5pF也是很好�,但這樣一來會(huì)增加晶體自身成本。典型的�(shè)定晶體電容Co=1.5pF,指定Co_max=7.0pF�
2�、外部參考時(shí)�
一�(gè)外部參考時(shí)鐘如MCU�(shí)�,可以用來代替晶體震蕩器。這�(gè)�(shí)鐘信�(hào)�(yīng)該直接連接到XC1引腳,XC2引腳為高阻態(tài)。當(dāng)使用外部�(shí)鐘代替晶體時(shí)鐘工作時(shí),始終必須工作在Standby模式以降低電流消�。如果器件被�(shè)置成Standby模式而沒有使用外部時(shí)鐘或晶體�(shí)�,則電流消耗可�(dá)1mA�
3�、微處理器輸出時(shí)�
在默�(rèn)情況下,微處理器提供輸出�(shí)�。在Standby模式下提供輸出時(shí)鐘將增加電流消�。在Standby模式電流消耗取決于頻率和外部晶體負(fù)�、輸出時(shí)鐘的頻率和提供輸出時(shí)鐘的電容�(fù)��
4�、天線輸�
ANT1和ANT2輸出腳給天線提供�(wěn)定的RF輸出。這兩�(gè)腳必須有連接到VDD_PA的直流通路,通過RF扼流�,或者通過天線雙極的中心點(diǎn)。在ANT1和ANT2之間的負(fù)載阻抗應(yīng)該在200-700Ω范圍�(nèi),通過�(jiǎn)單的匹配�(wǎng)�(luò)或RF變壓器(不平衡變壓器)可以獲得較低的阻抗(例�50Ω��
基于nRF905 模塊的AT89S 單片�(jī)無線收發(fā)系統(tǒng)�(shè)�(jì)
管腳 名稱 管腳功能 說明
1 VCC 電源 電源+3.3�3.6V DC
2 TX_EN �(shù)字輸� 工作模式選擇
3 TRX_CE �(shù)字輸� 使能芯片�(fā)射或接收
4 PWR_UP �(shù)字輸� 芯片上電
5 uCLK �(shí)鐘輸� (未使�)
6 CD �(shù)字輸� 載波檢測(cè)
7 AM �(shù)字輸� 地址匹配
8 DR �(shù)字輸� 接收或發(fā)射數(shù)�(jù)完成
9 MISO SPI 接口 SPI 輸出
10 MOSI SPI 接口 SPI 輸入
11 SCK SPI �(shí)� SPI �(shí)�
12 CSN SPI 使能 SPI 使能
13�14 GND � 接地
下面為典型的 nRF905 模塊�(shù)�(jù)�(fā)送流程[3]�
�1)當(dāng)微控制器要發(fā)送數(shù)�(jù)�(shí),將接收�(jī)的地址和發(fā)
送數(shù)�(jù)通過SPI 接口傳輸給nRF905 模塊�
?�?)微控制器設(shè)置TRX_CE 和TX_EN 管腳同時(shí)置為
高電平,啟動(dòng)�(fā)送端的nRF905 模塊為發(fā)送模��
?�?)發(fā)送端的nRF905 模塊�(fā)送過程處理:
a)射頻寄存器開啟�
b)數(shù)�(jù)打包(加字頭和CRC 校驗(yàn)碼)�
c)數(shù)�(jù)包發(fā)��
d)當(dāng)�(shù)�(jù)包發(fā)送結(jié)�,將�(shù)�(jù)�(fā)送完成管腳(DR 管腳�
置為高電��
?�?)如果AUTO_RETRAN 被設(shè)置為高,nRF905 模塊
將連續(xù)地發(fā)送數(shù)�(jù)�,直到TRX_CE 被設(shè)置為��
?�?)TRX_CE 被設(shè)置為低時(shí),nRF905 模塊�(shù)�(jù)包發(fā)�
過程�(jié)束并回到待機(jī)模式�
AT89S單片�(jī)控制nRF905 模塊�(shù)�(jù)�(fā)送流程圖如圖3
所示�
下面為典型的 nRF905 模塊�(shù)�(jù)接收流程[4]�
?�?)微控制器控制TRX_CE 為高電平、TX_EN 為低�
�,nRF905 模塊�(jìn)入接收模式;
�2�650us 后,nRF905 模塊�(jiān)�(cè)空中的信息,等待�
收數(shù)�(jù)�
?�?)當(dāng)nRF905 模塊檢測(cè)到與接收頻率相同的載波時(shí)�
�(shè)置載波檢�(cè)管腳(CD 管腳)為高電平;
?�?)當(dāng)nRF905 模塊接收到有效的地址�(shí),設(shè)置地址�
配管腳(AM 管腳)為高電��
?�?)當(dāng)一�(gè)正確的數(shù)�(jù)包接收完畢后,nRF905 模塊�
�(dòng)去掉�(shù)�(jù)包的字頭、地址和CRC 校驗(yàn)�,然后將�(shù)�(jù)�
受完成管腳置為高電平�
�6)微控制器將TRX_CE �(shè)置為低電平;
?�?)微控制器通過SPI 接口以一定的速率提取�(shù)�(jù)�
中的有效接收�(shù)�(jù)�
?�?)當(dāng)所有的有效�(shù)�(jù)接收完畢,微控制器控制nRF905
模塊�(shù)�(jù)接收完成管腳(DR 管腳)和地址匹配管腳(AM
管腳)為低電��
?�?)nRF905 �(jìn)入待�(jī)模式�
說明:(1)VCC電壓范圍為DC 3.3V�3.6V之間,不能超�3.6V否則�(huì)燒壞模塊�
?�?)模�
附加更加詳細(xì)的收�(fā)程序,包括解釋:
////////////////////////////////////////////整體參數(shù)////////////////////////////////////////////////////
//NewMsg-RF905-共有四種工作模式,其中有兩種活動(dòng)RX/TX模式和兩種節(jié)電模��
//活動(dòng)模式
// ShockBurst RX
//ShockBurst TX
//節(jié)電模�
//掉電和SPI編程
//工作模式�
維庫電子�,電子知�(shí),一查百��
已收錄詞�168657�(gè)