找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6616|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

NRF401單片機(jī)無線遙控設(shè)計(jì)資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:291292 發(fā)表于 2018-3-13 15:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
無線遙控設(shè)計(jì)
  • 總體概述
本系統(tǒng)有六大部分組成分PS/2電腦鍵盤控制部分、雙單片機(jī)控制部分、無線數(shù)字收發(fā)部分、攝相頭采集部分、高頻放大發(fā)射部分、電視觀察接收信號(hào)圖像部分。
  • 題目分析及方案論證:
本題中要求發(fā)射大于10米,且多通道。所以可采用高頻無線數(shù)字收發(fā)模塊。如NRF 系列數(shù)字收發(fā)模塊。可選用單片機(jī)給數(shù)字模塊進(jìn)行控制和配置寄存器,及用SPI給數(shù)字模塊發(fā)送數(shù)據(jù)。
1 NRF系列數(shù)字收發(fā)模塊選擇方案論證


    • NRF401可以達(dá)到題目要求
           所設(shè)計(jì)的無線數(shù)傳模塊由單片射頻收發(fā)芯片nRF401、AT89C52微控制器和MAX3316接口芯片構(gòu)成,工作在433.92/434.33MHz頻段;
   nRF401是北歐集成電路公司(NORDIC)的產(chǎn)品,是一個(gè)為433MHz ISM頻段設(shè)計(jì)的真正單片UHF無線收發(fā)芯片,滿足歐洲電信工業(yè)標(biāo)準(zhǔn)(ETSI)EN300 200-1 V1.2.1。它采用FSK調(diào)制解調(diào)技術(shù),最高工作速率可以達(dá)到20K,發(fā)射功率可以調(diào)整,最大發(fā)射功率是+10dBm。nRF401的天線接口設(shè)計(jì)為差分天線,以便于使用低成本的PCB天線。它要求非常少的外圍元件(約10個(gè)),無需聲表濾波器、變?nèi)莨艿劝嘿F的元件,只需要便宜且易于獲得的4MHz晶體,收發(fā)天線合一。無需進(jìn)行初始化和配置,不需要對(duì)數(shù)據(jù)進(jìn)行曼徹斯特編碼,有兩個(gè)工作頻寬(433.92/434.33MHz),工作電壓范圍可以從2.7-5V,還具有待機(jī)模式,可以更省電和高效。
   
   nRF401無線收發(fā)芯片的結(jié)構(gòu)框圖如圖1所示:內(nèi)部結(jié)構(gòu)可分為發(fā)射電路、接收電路、模式和低功耗控制邏輯電路及串行接口幾部分。發(fā)射電路包含有:射頻功率放大器、鎖相環(huán)(PLL),壓控振蕩器(VCO),頻率合成器等電路;鶞(zhǔn)振蕩器采用外接晶體振蕩器,產(chǎn)生電路所需的基準(zhǔn)頻率。
   
   其主要特性如下:
   ●工作頻率為國際通用的數(shù)傳頻段
   ●FSK調(diào)制,抗干擾能力強(qiáng),特別適合工業(yè)控制場合;
   ●采用PLL頻率合成技術(shù),頻率穩(wěn)定性極好;
   ●靈敏度高,達(dá)到-105dBm(nRF401);
   ●功耗小,接收狀態(tài)250 A,待機(jī)狀態(tài)僅為8 A(nRF401);
   ●最大發(fā)射功率達(dá) +10dBm ;
   ●低工作電壓(2.7V),可滿足低功耗設(shè)備的要求;
   ●具有多個(gè)頻道,可方便地切換工作頻率 ;
   ●工作速率最高可達(dá)20Kbit/s(RF401);
   ●僅外接一個(gè)晶體和幾個(gè)阻容、電感元件,基本無需調(diào)試;
   ●因采用了低發(fā)射功率、高接收靈敏度的設(shè)計(jì),使用無需申請?jiān)S可證,開闊地的使用距離最遠(yuǎn)可達(dá)1000米 (與具體使用環(huán)境及元件參數(shù)有關(guān))。
TX與RX之間的切換
   
   當(dāng)從RX切換到TX模式時(shí),數(shù)據(jù)輸入腳(DIN)必須保持為高至少1ms才能收發(fā)數(shù)據(jù)。當(dāng)從TX切換到RX時(shí),數(shù)據(jù)輸出腳(DOUT)要至少3ms以后有數(shù)據(jù)輸出。
   
   Standby與RX之間的切換
   
   從待機(jī)模式到接收模式,當(dāng)PWR_UP輸入設(shè)成1時(shí),經(jīng)過tSR時(shí)間后,DOUT腳輸出數(shù)據(jù)才有效。對(duì) nRF401來說,tST最長的時(shí)間是3ms。
   從待機(jī)模式到發(fā)射模式,所需穩(wěn)定的最大時(shí)間是tST。
   
   Power Up與TX間的切換
   
   從加電到發(fā)射模式過程中,為了避免開機(jī)時(shí)產(chǎn)生干擾和輻射,在上電過程中TXEN的輸入腳必須保持為低,以便于頻率合成器進(jìn)入穩(wěn)定工作狀態(tài)。當(dāng)由上電進(jìn)入發(fā)射模式時(shí),TXEN必須保持1ms以后才可以往DIN發(fā)送數(shù)據(jù)。
   
   從上電到接收模式過程中,芯片將不會(huì)接收數(shù)據(jù),DOUT也不會(huì)有數(shù)據(jù)輸出,直到電壓穩(wěn)定達(dá)到2.7V以上,并且至少保持5ms。如果采用外部振蕩器,這個(gè)時(shí)間可以縮短到3ms。
   
  在實(shí)際應(yīng)用中,微控制器采用Atmel公司的AT89C52,分別用單片機(jī)的P1口各管腳控制nRF401的DIN、DOUT、TXEN、PWRUP、CS這五個(gè)腳即可。
      接口芯片采用美信公司的RS232轉(zhuǎn)換芯片MAX3316,完成單片機(jī)和計(jì)算機(jī)RS232接口的電平轉(zhuǎn)換及數(shù)據(jù)發(fā)送、接收、請求、清除功能。在nRF401芯片使用時(shí),設(shè)定好工作頻率,進(jìn)入正常工作狀態(tài)后,通過單片機(jī)根據(jù)需要進(jìn)行收發(fā)轉(zhuǎn)換控制,發(fā)送/接收數(shù)據(jù)或進(jìn)行狀態(tài)轉(zhuǎn)換。在設(shè)計(jì)程序時(shí),要注意各狀態(tài)轉(zhuǎn)換的時(shí)延。nRF401的通訊速率最高為20kbit/s,發(fā)送數(shù)據(jù)之前需將電路置于發(fā)射模式;接收模式轉(zhuǎn)換為發(fā)射模式的轉(zhuǎn)換時(shí)間至少為1ms;可以發(fā)送任意長度的數(shù)據(jù);發(fā)射模式轉(zhuǎn)換為接收模式的轉(zhuǎn)換時(shí)間至少為3ms。在待機(jī)模式時(shí),電路進(jìn)入待機(jī)狀態(tài),電路不接收和發(fā)射數(shù)據(jù)。待機(jī)模式轉(zhuǎn)換為發(fā)射模式的轉(zhuǎn)換時(shí)間至少為4ms;待機(jī)模式轉(zhuǎn)換為接收模式的轉(zhuǎn)換時(shí)間至少為5.0ms。這里給出系統(tǒng)和程序的工作流程圖
1.2 單片射頻收發(fā)器nRF905也可達(dá)到要求
nRF905是挪威Nordic VLSI公司推出的單片射頻收發(fā)器,工作電壓為1.9~3.6V,32引腳QFN封裝(5由頻率合成器、接收解調(diào)器、功率放大器、晶體振蕩器和調(diào)制器組成,不需外加聲表濾波器, ShockBurstTM工作模式,自動(dòng)處理字頭和CRC(循環(huán)冗余碼校驗(yàn)),使用SPI接口與微控制器通信,配置非常方便。此外,其功耗非常低,以-10dBm的輸出功率發(fā)射時(shí)電流只有11mA,工作于接收模式時(shí)的電流為12.5mA,內(nèi)建空閑模式與關(guān)機(jī)模式,易于實(shí)現(xiàn)節(jié)能。nRF905適用于無線數(shù)據(jù)通信、無線報(bào)警及安全系統(tǒng)、無線開鎖、無線監(jiān)測、家庭自動(dòng)化和玩具等諸多領(lǐng)域。NRF905比NRF401先進(jìn)多了。能充分滿足題目要求。
2. 芯片結(jié)構(gòu)、引腳介紹及工作模式
   nRF905片內(nèi)集成了電源管理、晶體振蕩器、低噪聲放大器、頻率合成器功率放大器等模塊,曼徹斯特編碼/解碼由片內(nèi)硬件完成,無需用戶對(duì)數(shù)據(jù)進(jìn)行曼徹斯特編碼,因此使用非常方便。nRF905的詳細(xì)結(jié)構(gòu)如圖1所示。
2.2引腳介紹     表1:nRF905引腳
     nRF905有兩種工作模式和兩種節(jié)能模式。兩種工作模式分別是ShockBurstTM接收模式和ShockBurstTM發(fā)送模式,兩種節(jié)能模式分別是關(guān)機(jī)模式和空閑模式。nRF905的工作模式由TRX_CE、TX_EN和PWR_UP三個(gè)引腳決定,詳見表2。
2.1ShockBurstTM模式
與射頻數(shù)據(jù)包有關(guān)的高速信號(hào)處理都在nRF905片內(nèi)進(jìn)行,數(shù)據(jù)速率由微控制器配置的SPI接口決定,數(shù)據(jù)在微控制器中低速處理,但在nRF905中高速發(fā)送,因此中間有很長時(shí)間的空閑,這很有利于節(jié)能。由于nRF905工作于ShockBurstTM模式,因此使用低速的微控制器也能得到很高的射頻數(shù)據(jù)發(fā)射速率。在ShockBurstTM接收模式下,當(dāng)一個(gè)包含正確地址和數(shù)據(jù)的數(shù)據(jù)包被接收到后,地址匹配(AM)和數(shù)據(jù)準(zhǔn)備好(DR)兩引腳通知微控制器。在ShockBurstTM發(fā)送模式,nRF905自動(dòng)產(chǎn)生字頭和CRC校驗(yàn)碼,當(dāng)發(fā)送過程完成后,數(shù)據(jù)準(zhǔn)備好引腳通知微處理器數(shù)據(jù)發(fā)射完畢。由以上分析可知,nRF905的ShockBurstTM收發(fā)模式有利于節(jié)約存儲(chǔ)器和微控制器資源,同時(shí)也減小了編寫程序的時(shí)間。下面具體詳細(xì)分析nRF905的發(fā)送流程和接收流程。
2.2發(fā)送流程
典型的nRF905發(fā)送流程分以下幾步:
接口的速率在通信協(xié)議和器件配置時(shí)確定;
B. 微控制器置高TRX_CE和TX_EN,激發(fā)nRF905的ShockBurstTM發(fā)送模式;
C. nRF905的ShockBurstTM發(fā)送:
l 數(shù)據(jù)打包(加字頭和CRC校驗(yàn)碼);
2 發(fā)送數(shù)據(jù)包;
3 當(dāng)數(shù)據(jù)發(fā)送完成,數(shù)據(jù)準(zhǔn)備好引腳被置高;
D. AUTO_RETRAN被置高,nRF905不斷重發(fā),直到TRX_CE被置低;
E. 當(dāng)TRX_CE被置低,nRF905發(fā)送過程完成,自動(dòng)進(jìn)入空閑模式。
ShockBurstTM工作模式保證,一旦發(fā)送數(shù)據(jù)的過程開始,無論TRX_EN和TX_EN引腳是高或低,發(fā)送過程都會(huì)被處理完。只有在前一個(gè)數(shù)據(jù)包被發(fā)送完畢,nRF905才能接受下一個(gè)發(fā)送數(shù)據(jù)包。
2.3接收流程
A. 當(dāng)TRX_CE為高、TX_EN為低時(shí),nRF905進(jìn)入ShockBurstTM接收模式;
B. 650us后,nRF905不斷監(jiān)測,等待接收數(shù)據(jù);
C. 當(dāng)nRF905檢測到同一頻段的載波時(shí),載波檢測引腳被置高;
D. 當(dāng)接收到一個(gè)相匹配的地址,地址匹配引腳被置高;
E. 當(dāng)一個(gè)正確的數(shù)據(jù)包接收完畢,nRF905自動(dòng)移去字頭、地址和CRC校驗(yàn)位,然后把數(shù)據(jù)準(zhǔn)備好引腳置高
F. 微控制器把TRX_CE置低,nRF905進(jìn)入空閑模式;
G. 微控制器通過SPI口,以一定的速率把數(shù)據(jù)移到微控制器內(nèi);
H. 當(dāng)所有的數(shù)據(jù)接收完畢,nRF905把數(shù)據(jù)準(zhǔn)備好引腳和地址匹配引腳置低;
I. nRF905此時(shí)可以進(jìn)入ShockBurstTM接收模式、ShockBurstTM發(fā)送模式或關(guān)機(jī)模式。
當(dāng)正在接收一個(gè)數(shù)據(jù)包時(shí),TRX_CE或TX_EN引腳的狀態(tài)發(fā)生改變,nRF905立即把其工作模式改變,數(shù)據(jù)包則丟失。當(dāng)微處理器接到地址匹配引腳的信號(hào)之后,其就知道nRF905正在接收數(shù)據(jù)包,其可以決定是讓nRF905繼續(xù)接收該數(shù)據(jù)包還是進(jìn)入另一個(gè)工作模式。
2.4節(jié)能模式
nRF905的節(jié)能模式包括關(guān)機(jī)模式和節(jié)能模式。
在關(guān)機(jī)模式,nRF905的工作電流最小,一般為2.5uA。進(jìn)入關(guān)機(jī)模式后,nRF905保持配置字中的內(nèi)容,但不會(huì)接收或發(fā)送任何數(shù)據(jù)。
空閑模式有利于減小工作電流,其從空閑模式到發(fā)送模式或接收模式的啟動(dòng)時(shí)間也比較短。在空閑模式下,nRF905內(nèi)部的部分晶體振蕩器處于工作狀態(tài)。nRF905在空閑模式下的工作電流跟外部晶體振蕩器的頻率有關(guān)。
2.5 器件配置
所有配置字都是通過SPI接口送給nRF905。SIP接口的工作方式可通過SPI指令進(jìn)行設(shè)置。當(dāng)nRF905處于空閑模式或關(guān)機(jī)模式時(shí),SPI接口可以保持在工作狀態(tài)。
2.6SPI接口配置
SPI接口由狀態(tài)寄存器、射頻配置寄存器、發(fā)送地址寄存器、發(fā)送數(shù)據(jù)寄存器和接收數(shù)據(jù)寄存器5個(gè)寄存器組成。狀態(tài)寄存器包含數(shù)據(jù)準(zhǔn)備好引腳狀態(tài)信息和地址匹配引腳狀態(tài)信息;射頻配置寄存器包含收發(fā)器配置信息,如頻率和輸出功能等;發(fā)送地址寄存器包含接收機(jī)的地址和數(shù)據(jù)的字節(jié)數(shù);發(fā)送數(shù)據(jù)寄存器包含待發(fā)送的數(shù)據(jù)包的信息,如字節(jié)數(shù)等;接收數(shù)據(jù)寄存器包含要接收的數(shù)據(jù)的字節(jié)數(shù)等信息。
2.7射頻配置
  射頻配置寄存器和內(nèi)容如表3所示:
  表3:射頻配置寄存器
射頻寄存器的各位的長度是固定的。然而,在ShockBurstTM收發(fā)過程中,TX_PAYLOAD、RX_PAYLOAD、TX_ADDRESS和RX_ADDRESS 4個(gè)寄存器使用字節(jié)數(shù)由配置字決定。nRF905進(jìn)入關(guān)機(jī)模式或空閑模式時(shí),寄存器中的內(nèi)容保持不變。
2.8 應(yīng)用電路
nRF905在使用中,根據(jù)不同需要,其電路圖不盡相同,圖2所示為典型的應(yīng)用原理圖,該電路天線部分使用的是50Ω單端天線。在nRF905的電路板設(shè)計(jì)中,也可以使用環(huán)形天線,把天線布在PCB板上,這可減小系體積。
  

3.  NRF2401芯片是2.4G高頻無線數(shù)字收發(fā)模塊
nRF2401是單片射頻收發(fā)芯片,工作于2.4~2.5GHz ISM頻段,芯片內(nèi)置頻率合成器、功率放大器、晶體振蕩器和調(diào)制器等功能模塊,輸出功率和通信頻道可通過程序進(jìn)行配置。芯片能耗非常低,以-5dBm的功率發(fā)射時(shí),工作電流只有10.5mA,接收時(shí)工作電流只有18mA,多種低功率工作模式,節(jié)能設(shè)計(jì)更方便。其DuoCeiverTM技術(shù)使nRF2401可以使用同一天線,同時(shí)接收兩個(gè)不同頻道的數(shù)據(jù)。nRF2401適用于多種無線通信的場合,如無線數(shù)據(jù)傳輸系統(tǒng)、無線鼠標(biāo)、遙控開鎖、遙控玩具等。nRF2401無線收發(fā)一體芯片和藍(lán)牙一樣,都工作在2.4GHz自由頻段,能夠在全球無線市場暢通無阻。nRF2401支持多點(diǎn)間通信,最高傳輸速率超過1MBit/S,而且比藍(lán)牙具有更高的傳輸速度。它采用SoC方法設(shè)計(jì),只需少量外圍元件便可組成射頻收發(fā)電路。與藍(lán)牙不同的是,nRF 2401沒有復(fù)雜的通信協(xié)議,它完全對(duì)用戶透明,同種產(chǎn)品之間可以自由通信。更重要的是,nRF 2401比藍(lán)牙產(chǎn)品更便宜。所以nRnRF 2401是業(yè)界體積最小、功耗最少、外圍元件最少的低成本射頻系統(tǒng)級(jí)芯片。
3.1.芯片結(jié)構(gòu)、引腳說明
nRF2401內(nèi)置地址解碼器、先入先出堆棧區(qū)、解調(diào)處理器、時(shí)鐘處理器、GFSK濾波器、低噪聲放大器、頻率合成器,功率放大器等功能模塊,需要很少的外圍元件,因此使用起來非常方便。QFN24引腳封裝,外形尺寸只有5×5mm。nRF2401的功能模塊如圖1所示。

3.2芯片結(jié)構(gòu)
作模式工
nRF2401有工作模式有四種:收發(fā)模式、配置模式、空閑模式和關(guān)機(jī)模式。nRF2401的工作模式由PWR_UP 、CE、TX_EN和CS三個(gè)引腳決定,詳見表2。
表2:nRF2401工作模式
3.3 收發(fā)模式
nRF2401的收發(fā)模式有ShockBurstTM收發(fā)模式和直接收發(fā)模式兩種,收發(fā)模式由器件配置字決定,具體配置將在器件配置部分詳細(xì)介紹。
3.4.ShockBurstTM收發(fā)模式
ShockBurstTM收發(fā)模式下,使用片內(nèi)的先入先出堆棧區(qū),數(shù)據(jù)低速從微控制器送入,但高速(1Mbps)發(fā)射,這樣可以盡量節(jié)能,因此,使用低速的微控制器也能得到很高的射頻數(shù)據(jù)發(fā)射速率。與射頻協(xié)議相關(guān)的所有高速信號(hào)處理都在片內(nèi)進(jìn)行,這種做法有三大好處:盡量節(jié)能;低的系統(tǒng)費(fèi)用(低速微處理器也能進(jìn)行高速射頻發(fā)射);數(shù)據(jù)在空中停留時(shí)間短,抗干擾性高。nRF2401的ShockBurstTM技術(shù)同時(shí)也減小了整個(gè)系統(tǒng)的平均工作電流。
在ShockBurstTM收發(fā)模式下,nRF2401自動(dòng)處理字頭和CRC校驗(yàn)碼。在接收數(shù)據(jù)時(shí),自動(dòng)把字頭和CRC校驗(yàn)碼移去。在發(fā)送數(shù)據(jù)時(shí),自動(dòng)加上字頭和CRC校驗(yàn)碼,當(dāng)發(fā)送過程完成后,數(shù)據(jù)準(zhǔn)備好引腳通知微處理器數(shù)據(jù)發(fā)射完畢。
3.4.1 ShockBurstTM發(fā)射流程
接口引腳為CE,CLK1,DATA
A. 當(dāng)微控制器有數(shù)據(jù)要發(fā)送時(shí),其把CE置高,使nRF2401工作;
B. 把接收機(jī)的地址和要發(fā)送的數(shù)據(jù)按時(shí)序送入nRF2401;
C. 微控制器把CE置低,激發(fā)nRF2401進(jìn)行ShockBurstTM發(fā)射;
D. nRF2401的ShockBurstTM發(fā)射
² 給射頻前端供電;
² 射頻數(shù)據(jù)打包(加字頭、CRC校驗(yàn)碼);
² 高速發(fā)射數(shù)據(jù)包;
² 發(fā)射完成,nRF2401進(jìn)入空閑狀態(tài)。
3.4.2 ShockBurstTM接收流程
接口引腳CE、DR1、CLK1和DATA(接收通道1)
A. 配置本機(jī)地址和要接收的數(shù)據(jù)包大小;
B. 進(jìn)入接收狀態(tài),把CE置高;
C. 200us后,nRF2401進(jìn)入監(jiān)視狀態(tài),等待數(shù)據(jù)包的到來;
D. 當(dāng)接收到正確的數(shù)據(jù)包(正確的地址和CRC校驗(yàn)碼),nRF2401自動(dòng)把字頭、地址和CRC校驗(yàn)位移去;
E. nRF2401通過把DR1(這個(gè)引腳一般引起微控制器中斷)置高通知微控制器;
F. 微控制器把數(shù)據(jù)從nRF2401移出;
G. 所有數(shù)據(jù)移完,nRF2401把DR1置低,此時(shí),如果CE為高,則等待下一個(gè)數(shù)據(jù)包,如果CE為低,開始其它工作流程。
3.5.1直接收發(fā)模式
在直接收發(fā)模式下,nRF2401如傳統(tǒng)的射頻收發(fā)器一樣工作。
3.5.2直接發(fā)送模式
接口引腳為CE、DATA
A. 當(dāng)微控制器有數(shù)據(jù)要發(fā)送時(shí),把CE置高;
B. nRF2401射頻前端被激活;
C. 所有的射頻協(xié)議必須在微控制器程序中進(jìn)行處理(包括字頭、地址和CRC校驗(yàn)碼)。
3.5.3直接接收模式
接口引腳為CE、CLK1和DATA
A. 一旦nRF2401被配置為直接接收模式,DATA引腳將根據(jù)天線接收到的信號(hào)開始高低變化(由于噪聲的存在);
B. CLK1引腳也開始工作;
C. 一旦接收到有效的字頭,CLK1引腳和DATA引腳將協(xié)調(diào)工作,把射頻數(shù)據(jù)包以其被發(fā)射時(shí)的數(shù)據(jù)從DATA引腳送給微控制器;
D. 這頭必須是8位;
E. DR引腳沒用上,所有的地址和CRC校驗(yàn)必須在微控制器內(nèi)部進(jìn)行。
3.5.4配置模式
在配置模式,15字節(jié)的配置字被送到nRF2401,這通過CS、CLK1和DATA三個(gè)引腳完成,具體的配置方法請參考本文的器件配置部分。
3.5.5空閑模式
nRF2401的空閑模式是為了減小平均工作電流而設(shè)計(jì),其最大的優(yōu)點(diǎn)是,實(shí)現(xiàn)節(jié)能的同時(shí),縮短芯片的起動(dòng)時(shí)間。在空閑模式下,部分片內(nèi)晶振仍在工作,此時(shí)的工作電流跟外部晶振的頻率有關(guān),如外部晶振為4MHz時(shí)工作電流為12uA,外部晶振為16MHz時(shí)工作電流為32uA。在空閑模式下,配置字的內(nèi)容保持在nRF2401片內(nèi)。
3.5.6關(guān)機(jī)模式
在關(guān)機(jī)模式下,為了得到最小的工作電流,一般此時(shí)的工作電流小于1uA。關(guān)機(jī)模式下,配置字的內(nèi)容也會(huì)被保持在nRF2401片內(nèi),這是該模式與斷電狀態(tài)最大的區(qū)別。
3.6. 器件配置
nRF2401的所有配置工作都是通過CS、CLK1和DATA三個(gè)引腳完成,把其配置為ShockBurstTM收發(fā)模式需要15字節(jié)的配置字,而如把其配置為直接收發(fā)模式只需要2字節(jié)的配置字。由上文對(duì)nRF2401工作模式的介紹,我們可以知道,nRF2401一般工作于ShockBurstTM收發(fā)模式,這樣,系統(tǒng)的程序編制會(huì)更加簡單,并且穩(wěn)定性也會(huì)更高,因此,下文著重介紹把nRF2401配置為ShockBurstTM收發(fā)模式的器件配置方法。
ShockBurstTM的配置字使nRF2401能夠處理射頻協(xié)議,在配置完成后,在nRF2401工作的過程中,只需改變其最低一個(gè)字節(jié)中的內(nèi)容,以實(shí)現(xiàn)接收模式和發(fā)送模式之間切換。ShockBurstTM的配置字可以分為以下四個(gè)部分:
數(shù)據(jù)寬度:聲明射頻數(shù)據(jù)包中數(shù)據(jù)占用的位數(shù)。這使得nRF2401能夠區(qū)分接收數(shù)據(jù)包中的數(shù)據(jù)和CRC校驗(yàn)碼;
地址寬度:聲明射頻數(shù)據(jù)包中地址占用的位數(shù)。這使得nRF2401能夠區(qū)分地址和數(shù)據(jù);
地址:接收數(shù)據(jù)的地址,有通道1的地址和通道2的地址;
CRC:使nRF2401能夠生成CRC校驗(yàn)碼和解碼。
當(dāng)使用nRF2401片內(nèi)的CRC技術(shù)時(shí),要確保在配置字中CRC校驗(yàn)被使能,并且發(fā)送和接收使用相同的協(xié)議。nRF2401配置字的各個(gè)位的描述如表3所示。
在配置模式下,注意保證PWR_UP引腳為高電平,CE引腳為低電平。配置字從最高位開始,依次送入nRF2401。在CS引腳的下降沿,新送入的配置字開始工作。
3.7. 應(yīng)用電路
圖2為nRF2401的應(yīng)用電路,由圖可知,其只需要14個(gè)外圍元件。nRF2401應(yīng)用電路一般工作于3V,它可用多種低功耗微控制器進(jìn)行控制。在設(shè)計(jì)過程中,設(shè)計(jì)者可使用單鞭天線或環(huán)形天線,上圖為50歐姆單鞭天線的應(yīng)用電路。在使用不同的天線時(shí),為了得到盡可能大的收發(fā)距離,電感電容的參數(shù)應(yīng)適當(dāng)調(diào)整。
3.6. PCB設(shè)計(jì)
PCB設(shè)計(jì)對(duì)nRF2401的整體性能影響很大,所以PCB設(shè)計(jì)在nRF2401收發(fā)系統(tǒng)的開發(fā)過程中主要的工作之一,在PCB設(shè)計(jì)時(shí),必須考慮到各種電磁干擾,注意調(diào)整電阻、電容和電感的位置,特別要注意電容的位置。
nRF2401的PCB一般都是雙層板,底層一般不放置元件,為地層,頂層的空余地方一般都敷上銅,這些敷銅通過過孔與底層的地相連。直流電源及電源濾波電容盡量靠近VDD引腳。nRF2401的供電電源應(yīng)通過電容隔開,這樣有利于給nRF2401提供穩(wěn)定的電源。在PCB中,盡量多打一些通孔,使頂層和底層的地能夠充分接觸。
4.三種方案比較論證
nRF401工作速率最高達(dá)20Kbit/s應(yīng)用時(shí)偏低。 接口芯片采用美信公司的RS232轉(zhuǎn)換芯片MAX3316,完成單片機(jī)和計(jì)算機(jī)RS232接口的電平轉(zhuǎn)換及數(shù)據(jù)發(fā)送、接收、請求、清除功能。在nRF401芯片使用時(shí),設(shè)定好工作頻率,進(jìn)入正常工作狀態(tài)后,通過單片機(jī)根據(jù)需要進(jìn)行收發(fā)轉(zhuǎn)換控制,發(fā)送/接收數(shù)據(jù)或進(jìn)行狀態(tài)轉(zhuǎn)換。在設(shè)計(jì)程序時(shí),要注意各狀態(tài)轉(zhuǎn)換的時(shí)延。通信協(xié)議的設(shè)計(jì)nRF401是程序繁雜難以在短時(shí)間內(nèi)調(diào)試好。平時(shí)大多數(shù)情況下應(yīng)處于關(guān)閉狀態(tài),由于無線部分硬件上是不具備自動(dòng)喚醒功能的,為了達(dá)到節(jié)能的目的,必須通過軟件方式采用合理的通信協(xié)議以保證節(jié)能同時(shí)不丟失數(shù)據(jù)。接收模式轉(zhuǎn)換為發(fā)射模式的轉(zhuǎn)換時(shí)間至少為1ms;可以發(fā)送任意長度的數(shù)據(jù);發(fā)射模式轉(zhuǎn)換為接收模式的轉(zhuǎn)換時(shí)間至少為3ms。在待機(jī)模式時(shí),電路進(jìn)入待機(jī)狀態(tài),電路不接收和發(fā)射數(shù)據(jù)。待機(jī)模式轉(zhuǎn)換為發(fā)射模式的轉(zhuǎn)換時(shí)間至少為4ms;待機(jī)模式轉(zhuǎn)換為接收模式的轉(zhuǎn)換時(shí)間至少為5.0ms。延時(shí)問題也需要程序彌補(bǔ)不好調(diào)試。
nRF905工作速率最高達(dá)100Kbit/s,頻道之間的轉(zhuǎn)換時(shí)間小于650us。與射頻數(shù)據(jù)包有關(guān)的高速信號(hào)處理都在nRF905片內(nèi)進(jìn)行,數(shù)據(jù)速率由微控制器配置的SPI接口決定,數(shù)據(jù)在微控制器中低速處理,但在nRF905中高速發(fā)送,因此中間有很長時(shí)間的空閑,這很有利于節(jié)能。與nRF401相比與相當(dāng)大的改進(jìn)。當(dāng)微控制器有數(shù)據(jù)要發(fā)送時(shí),通過SPI接口,按時(shí)序把接收機(jī)的地址和要發(fā)送的數(shù)據(jù)送傳給nRF905,SPI接口的速率在通信協(xié)議和器件配置時(shí)確定;微控制器置高TRX_CE和TX_EN,激發(fā)nRF905的ShockBurstTM發(fā)送模式;射頻寄存器自動(dòng)開啟;數(shù)據(jù)打包(加字頭和CRC校驗(yàn)碼);發(fā)送數(shù)據(jù)包;當(dāng)數(shù)據(jù)發(fā)送完成,數(shù)據(jù)準(zhǔn)備好引腳被置高;當(dāng)數(shù)據(jù)發(fā)送完成,數(shù)據(jù)準(zhǔn)備好引腳被置高當(dāng)TRX_CE被置低,nRF905發(fā)送過程完成,自動(dòng)進(jìn)入空閑模式。ShockBurstTM工作模式保證,一旦發(fā)送數(shù)據(jù)的過程開始,無論TRX_EN和TX_EN引腳是高或低,發(fā)送過程都會(huì)被處理完。只有在前一個(gè)數(shù)據(jù)包被發(fā)送完畢,nRF905才能接受下一個(gè)發(fā)送數(shù)據(jù)包。
nRF2401芯片內(nèi)置頻率合成器、功率放大器、晶體振蕩器和調(diào)制器等功能模塊,輸出功率和通信頻道可通過程序進(jìn)行配置。芯片能耗非常低,以-5dBm的功率發(fā)射時(shí),工作電流只有10.5mA,接收時(shí)工作電流只有18mA,多種低功率工作模式,節(jié)能設(shè)計(jì)更方便。其DuoCeiverTM技術(shù)使nRF2401可以使用同一天線,同時(shí)接收兩個(gè)不同頻道的數(shù)據(jù)。nRF2401內(nèi)置地址解碼器、先入先出堆棧區(qū)、解調(diào)處理器、時(shí)鐘處理器、GFSK濾波器、低噪聲放大器、頻率合成器,功率放大器等功能模塊,需要很少的外圍元件,因此使用起來非常方便。該器件有125個(gè)頻點(diǎn),能夠?qū)崿F(xiàn)點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多點(diǎn)的無線通信,同時(shí)可采用改頻和跳頻來避免干擾。nRF2401最大傳輸速率可達(dá)1Mbit/s,其最大發(fā)射功率為-5dBm,在比較理想環(huán)境中,其室內(nèi)傳輸距離可達(dá)50~90米,室外傳輸距離可達(dá)100-200米。nRF2401的靈敏度為-90dBm,工作電壓為1.9V~3.3,工作溫度范圍為-40~+80℃。在ShockBurstTM收發(fā)模式下,nRF2401自動(dòng)處理字頭和CRC校驗(yàn)碼。在接收數(shù)據(jù)時(shí),自動(dòng)把字頭和CRC校驗(yàn)碼移去。在發(fā)送數(shù)據(jù)時(shí),自動(dòng)加上字頭和CRC校驗(yàn)碼,當(dāng)發(fā)送過程完成后,數(shù)據(jù)準(zhǔn)備好引腳通知微處理器數(shù)據(jù)發(fā)射完畢。
1 ShockBurstTM發(fā)射流程
接口引腳為CE,CLK1,DATA
A. 當(dāng)微控制器有數(shù)據(jù)要發(fā)送時(shí),其把CE置高,使nRF2401工作;
B. 把接收機(jī)的地址和要發(fā)送的數(shù)據(jù)按時(shí)序送入nRF2401;
C. 微控制器把CE置低,激發(fā)nRF2401進(jìn)行ShockBurstTM發(fā)射;
D. nRF2401的ShockBurstTM發(fā)射
1 給射頻前端供電;
2 射頻數(shù)據(jù)打包(加字頭、CRC校驗(yàn)碼);
3 高速發(fā)射數(shù)據(jù)包;
4 發(fā)射完成,nRF2401進(jìn)入空閑狀態(tài)。
2 ShockBurstTM接收流程
接口引腳CE、DR1、CLK1和DATA(接收通道1)
A. 配置本機(jī)地址和要接收的數(shù)據(jù)包大;
B. 進(jìn)入接收狀態(tài),把CE置高;
C. 200us后,nRF2401進(jìn)入監(jiān)視狀態(tài),等待數(shù)據(jù)包的到來;
D. 當(dāng)接收到正確的數(shù)據(jù)包(正確的地址和CRC校驗(yàn)碼),nRF2401自動(dòng)把字頭、地址和CRC校驗(yàn)位移去;
E. nRF2401通過把DR1(這個(gè)引腳一般引起微控制器中斷)置高通知微控制器;
F. 微控制器把數(shù)據(jù)從nRF2401移出;有空閑模式降低功耗,發(fā)送數(shù)據(jù)打包,
G. 所有數(shù)據(jù)移完,nRF2401把DR1置低,此時(shí),如果CE為高,則等待下一個(gè)數(shù)據(jù)包,如果CE為低,開始其它工作流程。
3.直接發(fā)送模式
接口引腳為CE、DATA
A. 當(dāng)微控制器有數(shù)據(jù)要發(fā)送時(shí),把CE置高;
B. nRF2401射頻前端被激活;
C. 所有的射頻協(xié)議必須在微控制器程序中進(jìn)行處理(包括字頭、地址和CRC校驗(yàn)碼)。
4.直接接收模式
接口引腳為CE、CLK1和DATA
A. 一旦nRF2401被配置為直接接收模式,DATA引腳將根據(jù)天線接收到的信號(hào)開始高低變化(由于噪聲的存在);
B. CLK1引腳也開始工作;
C. 一旦接收到有效的字頭,CLK1引腳和DATA引腳將協(xié)調(diào)工作,把射頻數(shù)據(jù)包以其被發(fā)射時(shí)的數(shù)據(jù)從DATA引腳送給微控制器;
D. 這頭必須是8位;
E. DR引腳沒用上,所有的地址和CRC校驗(yàn)必須在微控制器內(nèi)部進(jìn)行。
nRF2401通過ShockBurstTM收發(fā)模式進(jìn)行無線數(shù)據(jù)發(fā)送,收發(fā)可靠度高。
總結(jié):nRF401電路焊接多、程序繁雜,調(diào)試不好實(shí)現(xiàn),發(fā)送頻率低,頻道轉(zhuǎn)換時(shí)間長,容易丟數(shù)據(jù)包,出錯(cuò)率高。所以不選用nRF401nRF905 發(fā)送頻率可以,由微控制口SPI寫發(fā)送數(shù)據(jù),ShockBurstTM發(fā)送模式;射頻寄存器自動(dòng)開啟;數(shù)據(jù)打包(加字頭和CRC校驗(yàn)碼);發(fā)送數(shù)據(jù)包;當(dāng)數(shù)據(jù)發(fā)送完成,數(shù)據(jù)準(zhǔn)備好引腳被置高;當(dāng)數(shù)據(jù)發(fā)送完成,數(shù)據(jù)準(zhǔn)備好引腳被置高當(dāng)TRX_CE被置低,nRF905發(fā)送過程完成,自動(dòng)進(jìn)入空閑模式。可是nRF905的微控制器配置的SPI及寄存器配置繁雜給系統(tǒng)調(diào)試帶來麻煩。射頻寄存器的各位的長度是固定所有信息都有SPI來實(shí)現(xiàn)。所以不選用nRF905。nRF2401發(fā)射功率大,本身功耗低,靈敏度高,并且有nRF905的所有優(yōu)越性的無線數(shù)字收發(fā)性能,且使我們的系統(tǒng)調(diào)試更加快速。也是與整個(gè)系統(tǒng)匹配的最佳選擇。它的直接發(fā)送模式和直接接收模式是優(yōu)于其它模塊的特色。所以最終選擇nRF2401。
結(jié)果也證明了nRF2401確實(shí)是實(shí)現(xiàn)無線數(shù)字收發(fā)的可靠選擇。
四、硬件系統(tǒng)設(shè)計(jì):
1、硬件控制系統(tǒng)PS/2電腦鍵盤
因?yàn)檎麄(gè)系統(tǒng)需要控制的鍵許多。十六個(gè)通道,兩個(gè)電機(jī)控制,發(fā)送數(shù)據(jù)等控制鍵很多,所以不用單鍵及小鍵盤,通過鍵盤編碼傳給89S52單片機(jī),然后89S52與89C2051經(jīng)過Max232實(shí)現(xiàn)單片機(jī)與單片機(jī)串行通信。如圖示:
這樣設(shè)計(jì)增加控制鍵又省去了不必要的設(shè)計(jì)麻煩。      
2、微控制系統(tǒng)單片機(jī)之間實(shí)現(xiàn)串行通信
  
  選擇89S52是因?yàn)樗赏ㄟ^Max232與電腦通信可觀測單片機(jī)發(fā)送的數(shù)據(jù),可以對(duì)設(shè)計(jì)串行通信發(fā)送的數(shù)據(jù)分析和改進(jìn)程序。就是因?yàn)?9S52這些功能才使整個(gè)系統(tǒng)可以應(yīng)用PS/2電腦鍵盤。
  利用兩個(gè)單片機(jī)是因?yàn)閮蓚(gè)CPU可以提高工作效率。另外NRF2401的工作電壓小于單片機(jī)的工作電壓而89C2051可低電壓工作。所以用89C2051實(shí)現(xiàn)微控制對(duì)NRF2401控制及傳送數(shù)據(jù)。同時(shí)也降低了功耗,串行通信的程序中有校驗(yàn)程序,從而避免了錯(cuò)碼,使NRF2401發(fā)送的數(shù)據(jù)完全正確。只有無錯(cuò)碼才能達(dá)到無線遙控的操作正確,這樣才能提高整個(gè)系統(tǒng)的性能。
3、無線數(shù)字發(fā)射系統(tǒng)
利用89C2051對(duì)NRF2401傳送數(shù)據(jù)和對(duì)NRF2401寄存器配置,以及對(duì)NRF2401的控制。從而實(shí)現(xiàn)無線數(shù)字發(fā)射
4、無線數(shù)字接受系統(tǒng)
   與無線數(shù)字發(fā)射系統(tǒng)相似用NRF2401接受數(shù)據(jù)包傳給89C2051,再由89C2051與89S52 串行通信傳遞數(shù)據(jù),經(jīng)89S52解碼后選擇相應(yīng)通道。
如圖所示:
5通道顯示系統(tǒng)
顯示用大型號(hào)發(fā)光二極管顯示。
6攝相頭采集系統(tǒng)
電機(jī)驅(qū)動(dòng)芯片
此功能是無線遙控拓展,是實(shí)現(xiàn)更好的無線遙控必然趨勢。由此項(xiàng)高級(jí)功能才能完備整個(gè)系統(tǒng)的安全、無誤的進(jìn)行工作。
7監(jiān)控系統(tǒng)設(shè)計(jì)
  利用小電視機(jī)對(duì)攝相頭采集、發(fā)射的圖象進(jìn)行接受。如圖示:
   
   8時(shí)鐘顯示系統(tǒng)
  無論工作在什么地方都需要有時(shí)間顯示,在本系統(tǒng)中電子鐘是本系統(tǒng)的輔助單元。可以使整個(gè)大的系統(tǒng)更有合理的應(yīng)用價(jià)值。為操作者提供舒適環(huán)境。本系統(tǒng)用單片機(jī)控制,七位共陽極數(shù)碼管顯示有74LS04,74LS07進(jìn)行驅(qū)動(dòng),且可調(diào)時(shí)等功能。
9
總結(jié);整個(gè)的系統(tǒng)可用下列圖示說明:

發(fā)射部分:(見附件)
接受部分

五、軟件系統(tǒng)設(shè)計(jì):
本系統(tǒng)主要是三大部分:單片機(jī)與單片機(jī)串行通信程序,對(duì)PS/2鍵盤編碼及譯碼程序,單片機(jī)對(duì)nRF2401的控制及傳遞數(shù)據(jù)程序。
1單片機(jī)與單片機(jī)串行通信程序
2對(duì)PS/2鍵盤編碼及譯碼程序
3單片機(jī)對(duì)nRF2401的控制及傳遞數(shù)據(jù)程序。
六、功能測試及結(jié)果分析:
七、參考書目:
黃智偉 編著 《無線數(shù)字收發(fā)電路設(shè)計(jì)》——電路原理與應(yīng)用實(shí)例
周立功 等編著速成與實(shí)踐——增強(qiáng)型80C51單片機(jī)
黃智偉 等編著 訓(xùn)練教程》——全國大學(xué)生電子設(shè)計(jì)競賽
附錄:部分程序
  • 1單片機(jī)對(duì)nRF2401的控制及傳遞數(shù)據(jù)程序
<發(fā)射程序>
  1. #include <At89x051.h>

  2. //腳的定義
  3. #define RxD         P3_0
  4. #define TxD         P3_1
  5. #define TxLED       P3_4
  6. #define RxLED       P3_5
  7. #define PWR_UP      P1_7
  8. #define CE          P1_6
  9. #define  CS         P1_2
  10. #define CLK1        P3_2
  11. #define  DR1        P1_1
  12. #define DATA        P1_0

  13. //測試用nRF2401寄存器數(shù)據(jù)
  14. const unsigned test_config[18]={
  15.         0x8e,0x08,0x1e,   
  16.         0x08,0x08,
  17.         0xaa,0xbb,0xcc,0xdd,0xee,
  18.         0xaa,0xbb,0xcc,0xdd,0xee,
  19.         0xa3,0x2f,        
  20.         0x64              
  21.     };
  22. //RF2401寄存器數(shù)據(jù)
  23. const unsigned configbyte[18]={
  24.                 0x8e,0x08,0x1c,        
  25.                 0x08,0x08,
  26.                 0xaa,0xbb,0xcc,0xdd,0xee,
  27.                 0xaa,0xbb,0xcc,0xdd,0xee,
  28.                 0xa3,0x6f,            
  29.                 0x64         
  30.         };

  31. unsigned char rx_data_buf[1];  
  32. unsigned char increase_data;
  33. unsigned char task_switch;
  34. unsigned char get_tx_data_for_pc();
  35. void system_init(void);
  36. void write_spi_one_byte(unsigned char data_buf);
  37. void config_2401(void);
  38. void config_test(void);
  39. void delay_ms(unsigned int delay_counter);
  40. void send_data(unsigned input_data);
  41. void send_data_rf(void);
  42. void transmit_mode(void);
  43. void main(void);

  44. //系統(tǒng)初始化
  45. void system_init(void)
  46. {
  47.     unsigned char i;

  48.     PWR_UP=0;
  49.     CE=0;
  50.     CS=0;
  51.     CLK1=0;
  52.     DATA=0;         
  53.     for(i=0;i<8;i++)           
  54.         rx_data_buf[i]=0;
  55.     config_2401();
  56.     delay_ms(2);

  57.     TxLED=0;      
  58.     RxLED=1;

  59.     TMOD=0x20;                 
  60.     SCON=0x50;               
  61.     TH1=0xfd;
  62.     TL1=0xfd;
  63.     TR1=1;
  64.     EA=0;
  65. }




  66. //對(duì)RF2401寫數(shù)據(jù)函數(shù)

  67. void write_spi_one_byte(unsigned char data_buf)
  68. {
  69.     unsigned char i;
  70.     unsigned char j;

  71.     j=0x80;//0b10000000
  72.     while(j>0)
  73.     {
  74.         i=data_buf&j;
  75.         if(i==0)
  76.             DATA=0;
  77.         else
  78.             DATA=1;
  79.         CLK1=1;
  80.         j>>=1;
  81.         CLK1=0;
  82.     }
  83. }
  84. //對(duì)RF2401寄存器寫數(shù)據(jù)
  85. void config_2401(void)
  86. {
  87.     unsigned char i;
  88.     PWR_UP=1;                     
  89.     delay_ms(5);                 
  90.     CE=0;                        
  91.     CS=1;                        

  92.     i=1;                        
  93.     while(i--);

  94.     for(i=0;i<18;i++)
  95.         write_spi_one_byte(configbyte[i]);

  96.     CS=0;
  97.     DATA=0;
  98.     CE=1;
  99. }
  100. //系統(tǒng)測試
  101. void config_test(void)
  102. {
  103.     unsigned char i;

  104.     PWR_UP=1;                     
  105.     delay_ms(5);                  
  106.     CE=0;                          
  107.     CS=1;                        

  108.     i=1;                        
  109.     while(i--);

  110.     for(i=0;i<18;i++)
  111.         write_spi_one_byte(test_config[i]);

  112.     CS=0;
  113.     DATA=0;
  114.     CE=1;                        
  115. }
  116. //延時(shí)函數(shù)
  117. void delay_ms(unsigned int delay_counter)
  118. {
  119.     unsigned int i;

  120.     while(delay_counter--)
  121.     {
  122.         i=81;
  123.         while(i--);
  124.     }
  125. }
  126. //發(fā)射數(shù)據(jù)函數(shù)
  127. void send_data(unsigned input_data)
  128. {
  129.     unsigned char i;

  130.     PWR_UP=1;            
  131.     delay_ms(5);         

  132.     CE=1;                 

  133.     i=1;                  
  134.     while(i--);

  135.     write_spi_one_byte(0xaa);        
  136.     write_spi_one_byte(0xbb);         
  137.     write_spi_one_byte(0xcc);         
  138.     write_spi_one_byte(0xdd);         
  139.     write_spi_one_byte(0xee);         

  140.     for(i=0;i<1;i++)
  141.         write_spi_one_byte(input_data);


  142.     CE=0;                 

  143.     i=50;                                    
  144.         while(i--);

  145.         PWR_UP=0;            
  146. }
  147. //從串行獲的數(shù)據(jù)
  148. unsigned char  get_tx_data_for_pc()
  149. {  unsigned char  chuanh=0x00;
  150.     while(RI==0);
  151.     chuanh=SBUF ;
  152.     RI=0;
  153.     return(chuanh);

  154. }


  155. //從RF2401發(fā)射數(shù)據(jù)
  156. void send_data_rf(void)
  157. {       increase_data=get_tx_data_for_pc();
  158.         TxLED=0;              
  159.         send_data(increase_data);
  160.         delay_ms(1);
  161.         TxLED=1;            
  162.         delay_ms(1);

  163. }
  164. //主函數(shù)
  165. void main(void)
  166. {
  167.     system_init();

  168.     while (1)
  169.     {

  170.           send_data_rf();        

  171.         }
  172.     }

  173. 2單片機(jī)對(duì)nRF2401的控制及傳遞數(shù)據(jù)程序
  174. <接收程序>
  175. #include <At89x051.h>

  176. //腳的定義
  177. #define RxD         P3_0
  178. #define TxD         P3_1
  179. #define TxLED       P3_4
  180. #define RxLED       P3_5
  181. #define PWR_UP      P1_7
  182. #define CE          P1_6
  183. #define  CS         P1_2
  184. #define CLK1        P3_2
  185. #define  DR1        P1_1
  186. #define DATA        P1_0

  187. //測試
  188. const unsigned test_config[18]={
  189.         0x8e,0x08,0x1e,   
  190.         0x08,0x08,
  191.         0xaa,0xbb,0xcc,0xdd,0xee,
  192.         0xaa,0xbb,0xcc,0xdd,0xee,
  193.         0xa3,0x2f,        
  194.         0x64            
  195.     };
  196. //2401寄存器數(shù)據(jù)
  197. const unsigned configbyte[18]={
  198.                 0x8e,0x08,0x1c,        
  199.                 0x08,0x08,
  200.                 0xaa,0xbb,0xcc,0xdd,0xee,
  201.                 0xaa,0xbb,0xcc,0xdd,0xee,
  202.                 0xa3,0x6f,            
  203.                 0x65         

  204.         };

  205. unsigned char rx_data_buf[1];     
  206. unsigned char increase_data;
  207. void system_init(void);
  208. void write_spi_one_byte(unsigned char data_buf);
  209. void config_2401(void);
  210. void config_test(void);
  211. void receive_data(unsigned payload_length);
  212. unsigned char read_spi_one_byte(void);
  213. void delay_ms(unsigned int delay_counter);
  214. void receive_mode(void);
  215. void main(void);

  216. //系統(tǒng)初始化
  217. void system_init(void)
  218. {
  219.     unsigned char i;

  220.     PWR_UP=0;
  221.     CE=0;
  222.     CS=0;
  223.     CLK1=0;
  224.     DATA=0;


  225.     for(i=0;i<8;i++)         
  226.         rx_data_buf[i]=0;  

  227.     config_2401();
  228.     delay_ms(2);

  229.     TxLED=0;      
  230.     RxLED=1;

  231.     TMOD=0x20;               
  232.     SCON=0x50;              
  233.     TH1=0xfd;
  234.     TL1=0xfd;
  235.     TR1=1;
  236.     EA=0;
  237. }
  238. //從串行傳數(shù)據(jù)

  239. void send_rx_data_to_pc(unsigned char payload_length)
  240. {

  241.         TI=0;
  242.         SBUF=rx_data_buf[0];
  243.         while(TI==0);

  244. }
  245. //對(duì)寄存器寫數(shù)據(jù)

  246. void write_spi_one_byte(unsigned char data_buf)
  247. {
  248.     unsigned char i;
  249.     unsigned char j;

  250.     j=0x80;//0b10000000
  251.     while(j>0)
  252.     {
  253.         i=data_buf&j;
  254.         if(i==0)
  255.             DATA=0;
  256.         else
  257.             DATA=1;
  258.         CLK1=1;
  259.         j>>=1;
  260.         CLK1=0;
  261.     }
  262. }
  263. //對(duì)RF2401寫寄存器數(shù)據(jù)
  264. void config_2401(void)
  265. {
  266.     unsigned char i;
  267.     PWR_UP=1;                     
  268.     delay_ms(5);                  
  269.     CE=0;                        
  270.     CS=1;                          

  271.     i=1;                          
  272.     while(i--);

  273.     for(i=0;i<18;i++)
  274.         write_spi_one_byte(configbyte[i]);

  275.     CS=0;
  276.     DATA=0;
  277.     CE=1;
  278. }
  279. //測試
  280. void config_test(void)
  281. {
  282.     unsigned char i;

  283.     PWR_UP=1;                     
  284.     delay_ms(5);                  
  285.     CE=0;                          
  286.     CS=1;                          

  287.     i=1;                           
  288.     while(i--);

  289.     for(i=0;i<18;i++)
  290.         write_spi_one_byte(test_config[i]);

  291.     CS=0;
  292.     DATA=0;
  293.     CE=1;                          
  294. }
  295. //接收數(shù)據(jù)
  296. void receive_data(unsigned payload_length)
  297. {
  298.     unsigned char i;

  299.     for(i=0;i<payload_length;i++)
  300.         rx_data_buf[i]=read_spi_one_byte();
  301. }
  302. //對(duì)RF2401寫數(shù)據(jù)

  303. unsigned char read_spi_one_byte(void)
  304. {
  305.     unsigned char j;
  306.     unsigned char data_buf;

  307.     j=0x80;
  308.     while(j>0)
  309.     {
  310.                   DATA=1;
  311.         data_buf<<=1;
  312.         if(DATA==1)
  313.             data_buf|=0x01;
  314.         CLK1=1;
  315.         j>>=1;
  316.         CLK1=0;
  317.     }
  318.     return data_buf;
  319. }
  320. //延時(shí)
  321. void delay_ms(unsigned int delay_counter)
  322. {
  323.     unsigned int i;

  324.     while(delay_counter--)
  325.     {
  326.         i=81;
  327.         while(i--);
  328.     }
  329. }


  330. //接收數(shù)據(jù)
  331. void receive_mode(void)
  332. {
  333.     //change_rf_txrx_mode(1);        //Change the RF to the receive mode
  334.     while(START_SW!=0)
  335.     {
  336.         if(DR1==1)
  337.         {
  338.             RxLED=0;
  339.             receive_data(8);
  340.                       delay_ms(50);
  341.             RxLED=1;
  342.             send_rx_data_to_pc(8);
  343.         }
  344.     }

  345. }
  346. //主函數(shù)
  347. void main(void)
  348. {
  349.     system_init();

  350.     while (1)
  351.     {

  352.                 receive_mode();        

  353.         }
  354.     }
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
無線遙控設(shè)計(jì)資料.rar (646.15 KB, 下載次數(shù): 27)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:295477 發(fā)表于 2018-3-22 14:44 | 只看該作者
不錯(cuò) 好好收藏一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:335709 發(fā)表于 2018-7-4 11:52 | 只看該作者
謝謝!先收藏了,待研究。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表