基于2.4GHz射頻通信的多功能鼠標(biāo)設(shè)計
2.2 無線發(fā)射部分
nRF24L01的工作原理如下:發(fā)射數(shù)據(jù)時,首先將nRF24L01配置為發(fā)射模式,接著把接收節(jié)點地址TX_ADDR和有效數(shù)據(jù)TX_PLD按照時序由SPI口寫入nRF24L01緩存區(qū)。TX_PLD必須在CSN為低時連續(xù)寫入,而TX_ADDR在發(fā)射時寫入一次即可。然后,CE置為高電平并保持至少10μs,延遲130μs后發(fā)射數(shù)據(jù)。若自動應(yīng)答開啟,那么nRF24L01在發(fā)射數(shù)據(jù)后立即進入接收模式,接收應(yīng)答信號(自動應(yīng)答接收地址應(yīng)該與接收節(jié)點地址TX_ADDR一致)。如果收到應(yīng)答,則認為此次通信成功,TX_DS置高,同時TX_PLD從TX FIFO中清除;若未收到應(yīng)答,則自動重新發(fā)射該數(shù)據(jù)(自動重發(fā)已開啟),若重發(fā)次數(shù)(ARC)達到上限,MAX_RT置高,TXFIFO中數(shù)據(jù)保留以便再次重發(fā)。MAX_RT或TX_DS置高時,使IRQ變低,產(chǎn)生中斷,通知MCU。發(fā)射成功時,若CE為低,則nRF24L01進入待機模式1;若發(fā)送堆棧中有數(shù)據(jù)且CE為高,則進入下一次發(fā)射;若發(fā)送堆棧中無數(shù)據(jù)且CE為高,則進入待機模式2。
接收數(shù)據(jù)時,首先將nRF24L01配置為接收模式,接著延遲130μs進入接收狀態(tài)等待數(shù)據(jù)的到來。當(dāng)接收方檢測到有效的地址和CRC時,就將數(shù)據(jù)包存儲在RXFIFO中,同時中斷標(biāo)志位RX_DR置高,IRQ變低,產(chǎn)生中斷,通知MCU取數(shù)據(jù)。若此時自動應(yīng)答開啟,接收方則同時進入發(fā)射狀態(tài)回傳應(yīng)答信號。接收成功時,若CE變低,則nRF24L01進入待機模式1。
nRF24L01有發(fā)射、接收、待機和掉電4種工作模式,可以通過配置寄存器來設(shè)置其工作狀態(tài),如表1所列。
待機模式1(Standby-I)主要用于降低電流損耗(在該模式下,晶體振蕩器仍然工作)。待機模式2(Standby-II)是當(dāng)FIFO寄存器為空且CE=1時進入此模式。待機模式下,所有配置字仍然保留。在掉電模式(PowerDown)下電流損耗最小,同時nRF24L01也不工作,但其所有配置寄存器的值仍然保留。
無線發(fā)射部分上電初始化時,進行了如下配置:
①CONFIG寄存器的低4位置1,分別為16位CRC校驗,芯片上電和接收模式;
②SETUP_AW(地址寬度)寄存器配置地址寬度為5字節(jié);
③SETUP_RETR(自動重發(fā))寄存器配置為自動重發(fā)延時500μs,重發(fā)5次;
④RF_CH(RF頻道)寄存器配置為工作頻道2 400MHz;
⑤RF_SETUP(RF設(shè)置)寄存器配置為發(fā)射功率0 dBm,Air Data Rate為1 MHz;
⑥將地址寫入地址寄存器。
在配置寄存器時應(yīng)注意一點:在寫nRF24L01的寄存器時,它必須工作在掉電模式或待機模式。而在nRF24L01上電達到1.9 V以后,要經(jīng)過10.3 ms的上電復(fù)位然后再進入掉電模式。這是一個不確定狀態(tài)。在此狀態(tài)下,對寄存器的寫操作是無法完成的,因此必須加上一個合適的延時,使程序?qū)RF24L01的配置操作在掉電模式或待機模式下進行。
當(dāng)光傳感器或按鍵等有操作時,主控制器將讀入的信號寫入nRF24L01的TX_PLD,然后由芯片自動生成報頭和CRC校驗碼,并發(fā)送出去。當(dāng)收到應(yīng)答信號(ACK)后,程序中所設(shè)置的標(biāo)志位success置1,清除TX FIFO隊列中的數(shù)據(jù),可以進行下一次數(shù)據(jù)的寫入了;若未收到應(yīng)答信號(ACK),則標(biāo)志位success置0,繼續(xù)重發(fā),且新的數(shù)據(jù)無法寫入。
2.3 讀光傳感器位移值
讀光傳感器的位移值,其實就是讀它對應(yīng)的寄存器。在ADNS-5030的內(nèi)部寄存器中,地址為0x02的Motion寄存器用于表示是否有位移。其最高位若為0,則無位移;最高位若為1,則有位移。另外,使用到的兩個寄存器的地址是0x03和Ox04的DeltaX和DeltaY。這兩個寄存器的值分別表示X軸和Y軸方向上的位移。最高位表示位移的方向,1為負方向,0為正方向,低7位表示位移量。
評論