|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
我是新手!請(qǐng)教CC2500跳頻的問(wèn)題? |
| 作者:zhuzi0624 欄目:通信技術(shù) |
各位高手,我現(xiàn)在做CC2500的跳頻設(shè)計(jì),不過(guò)我這個(gè)跳頻不需要在工作時(shí)跳頻,只需要在開(kāi)始的時(shí)候搜索到一個(gè)合適頻段,接下來(lái)都在這個(gè)頻段通信。 我現(xiàn)在面臨的情況是:CC2500的主從端時(shí)間上同步的不是很好,主端發(fā)送的數(shù)據(jù)從端有時(shí)能收到,有時(shí)不能;而且從端在回發(fā)數(shù)據(jù)給主端的時(shí)候,主端根本收不到!我用的MCU是C8051F330!下面是我的收發(fā)主程序: void main()//發(fā)送端程序 { CHAR len; int i=0; int k=20; PCA0MD &= ~0x40; Init_Device(); SPI0CN |= 0x01; //enable SPI System_Delay(5000); SetupCC2500(); System_Delay(512); len=sizeof(txBuffer_CC2500); while(1) { halSpiWriteReg(CC2500_FREQ2, f[i][0]); halSpiWriteReg(CC2500_FREQ1, f[i][1]); halSpiWriteReg(CC2500_FREQ0, f[i][2]); halSpiStrobe(CC2500_SIDLE); txBuffer_CC2500[1]=i; halRfSendPacket(txBuffer_CC2500, sizeof(txBuffer_CC2500));//試發(fā)送消息給接收端 if(halRfReceivePacket(rxBuffer_CC2500,len))break;//等到對(duì)方的回應(yīng),得到回應(yīng)消息跳出 if((k--)==0)//k從20減到0換一個(gè)頻段 { k=20; i++; if(i>8)i=0; } } while(1) { P13=1;P14=0;//LED顯示狀態(tài) } } void main()//接收端主程序 { CHAR len; int i=0,n=0; int k=180; PCA0MD &= ~0x40; Init_Device(); SPI0CN |= 0x01; //enable SPI System_Delay(5000); SetupCC2500(); System_Delay(512); len=sizeof(rxBuffer_CC2500); while(1) { if(halRfReceivePacket(rxBuffer_CC2500,len))//試接收來(lái)自對(duì)方的信號(hào) { halSpiWriteReg(CC2500_FREQ2, f[i][0]); halSpiWriteReg(CC2500_FREQ1, f[i][1]); halSpiWriteReg(CC2500_FREQ0, f[i][2]); halSpiStrobe(CC2500_SIDLE); txBuffer_CC2500[1]=rxBuffer_CC2500[1];//記住頻段號(hào) halRfSendPacket(txBuffer_CC2500, sizeof(txBuffer_CC2500));//發(fā)送回應(yīng)消息,告訴對(duì)方就在該頻段通信 break;//此時(shí)已搜索到頻段,跳出,以后都工作在此頻段 } if((k--)>0)//k從180減到0換一個(gè)頻段搜索 { k=180; i++; if(i>8)i=0; } } for(n=0;n<len;n++) trdata[n]=rxBuffer_CC2500[n]; Send_String(trdata,len); //串口輸出數(shù)據(jù) System_Delay(512); while(1) { P13=1;P14=0;//LED顯示狀態(tài) }//數(shù)據(jù)稍后再做處理 } |
| 2樓: | >>參與討論 |
| 作者: chunyang 于 2007/4/29 17:02:00 發(fā)布:
這里不存在“同步”問(wèn)題,你的這個(gè)系統(tǒng)還稱不上是跳頻系統(tǒng) IC設(shè)置正確的話,能否收到數(shù)據(jù)只與頻點(diǎn)是否相同有關(guān),只是要注意信道穩(wěn)定時(shí)間,芯片建立正常工作態(tài)包括設(shè)定頻點(diǎn)需要一定的時(shí)間,只要保證數(shù)據(jù)發(fā)出之前,接收端已經(jīng)穩(wěn)定即可。反向通訊時(shí)也同樣,主端在發(fā)送完數(shù)據(jù)后立刻切換到接收態(tài),而從端收到數(shù)據(jù)后切換到發(fā)送態(tài)一定要延時(shí)一段時(shí)間才能發(fā)送數(shù)據(jù),以讓主端建立正常工作態(tài)。 |
|
| 3樓: | >>參與討論 |
| 作者: zhuzi0624 于 2007/4/29 17:42:00 發(fā)布:
發(fā)送端不知道怎么判斷可以轉(zhuǎn)為接收狀態(tài)? 接收端可以在看到收到數(shù)據(jù)的時(shí)候用返回值判斷然后跳出,但是發(fā)送端不知道該怎么處理好?不僅要換頻道使勁的發(fā)數(shù)據(jù)而且要接著判斷有沒(méi)有收到回應(yīng)的數(shù)據(jù)? 現(xiàn)在我是接收端收到數(shù)據(jù)串口里面已經(jīng)顯示了,接著循環(huán)的向發(fā)送回發(fā)數(shù)據(jù),但是回發(fā)的數(shù)據(jù)發(fā)送端沒(méi)有收到,不知道在這回發(fā)的時(shí)候收發(fā)端怎么處理一下好? |
|
| 4樓: | >>參與討論 |
| 作者: chunyang 于 2007/4/29 17:46:00 發(fā)布:
發(fā)送完直接轉(zhuǎn)換就是,無(wú)需什么“判斷”。 |
|
| 5樓: | >>參與討論 |
| 作者: zhuzi0624 于 2007/4/29 17:55:00 發(fā)布:
就是不知道什么時(shí)候是發(fā)送成功的,版主你有什么辦法么? 因?yàn)槭穷l段更換不斷的發(fā)送,所以不確定是在什么時(shí)候能發(fā)送成功。能確定頻段退出搜索是要在收到接收端的回應(yīng)信號(hào)后,即所謂的握手?赡芪艺娴奶幚聿缓冒,版主,你有什么好辦法么? |
|
| 6樓: | >>參與討論 |
| 作者: chunyang 于 2007/4/29 18:59:00 發(fā)布:
你還是沒(méi)有理解 數(shù)據(jù)發(fā)完就轉(zhuǎn)接收,不管對(duì)方是否收到,而對(duì)方是否收到及是否正確要靠接收回復(fù)信息來(lái)判斷。 |
|
| 7樓: | >>參與討論 |
| 作者: zhuzi0624 于 2007/4/30 13:10:00 發(fā)布:
版主,我有發(fā)送后就立馬轉(zhuǎn)接收,你看 halSpiWriteReg(CC2500_FREQ2, f[i][0]); halSpiWriteReg(CC2500_FREQ1, f[i][1]); halSpiWriteReg(CC2500_FREQ0, f[i][2]); halSpiStrobe(CC2500_SIDLE); txBuffer_CC2500[1]=i; halRfSendPacket(txBuffer_CC2500, sizeof(txBuffer_CC2500));//試發(fā)送消息給接收端 if(halRfReceivePacket(rxBuffer_CC2500,len))break;//等到對(duì)方的回應(yīng),得到回應(yīng)消息跳出 |
|
| 8樓: | >>參與討論 |
| 作者: chunyang 于 2007/4/30 13:21:00 發(fā)布:
注意接收轉(zhuǎn)發(fā)送一定要等轉(zhuǎn)換完成后再延時(shí)才能發(fā)送數(shù)據(jù) |
|
| 9樓: | >>參與討論 |
| 作者: chunyang 于 2007/4/30 13:29:00 發(fā)布:
給你個(gè)時(shí)序 設(shè)A為主機(jī)、B為從機(jī),初試狀態(tài):A發(fā)B收。 A送數(shù)據(jù),送完后立刻轉(zhuǎn)接收同時(shí)啟動(dòng)一定時(shí)事件,定時(shí)周期稍大于T,B收到數(shù)據(jù)進(jìn)行判斷是否正確及是否該返回?cái)?shù)據(jù),如是,轉(zhuǎn)發(fā)送態(tài),延時(shí)t1,開(kāi)始發(fā)送數(shù)據(jù),數(shù)據(jù)發(fā)送時(shí)間t2,T=t1+t2,數(shù)據(jù)發(fā)送完畢再轉(zhuǎn)成接收態(tài)。A在T內(nèi)如果收到正確回應(yīng)則進(jìn)行下一步處理,如沒(méi)有,重復(fù)剛才的過(guò)程并記錄出錯(cuò)次數(shù),出錯(cuò)次數(shù)超出預(yù)設(shè)值要采取相應(yīng)措施如上報(bào)或刪除B等等。 |
|
| 10樓: | >>參與討論 |
| 作者: zhuzi0624 于 2007/4/30 14:24:00 發(fā)布:
謝謝版主! |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |