音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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ù)
我是新手!請(qǐng)教CC2500跳頻的問(wèn)題?
各位高手,我現(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
這里不存在“同步”問(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
發(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
發(fā)送完直接轉(zhuǎn)換就是,無(wú)需什么“判斷”。
 
5樓: >>參與討論
zhuzi0624
就是不知道什么時(shí)候是發(fā)送成功的,版主你有什么辦法么?
因?yàn)槭穷l段更換不斷的發(fā)送,所以不確定是在什么時(shí)候能發(fā)送成功。能確定頻段退出搜索是要在收到接收端的回應(yīng)信號(hào)后,即所謂的握手?赡芪艺娴奶幚聿缓冒,版主,你有什么好辦法么?

6樓: >>參與討論
chunyang
你還是沒(méi)有理解
數(shù)據(jù)發(fā)完就轉(zhuǎn)接收,不管對(duì)方是否收到,而對(duì)方是否收到及是否正確要靠接收回復(fù)信息來(lái)判斷。

7樓: >>參與討論
zhuzi0624
版主,我有發(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
注意接收轉(zhuǎn)發(fā)送一定要等轉(zhuǎn)換完成后再延時(shí)才能發(fā)送數(shù)據(jù)
 
9樓: >>參與討論
chunyang
給你個(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
謝謝版主!
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
高手幫忙呀
求助:我現(xiàn)在要做一個(gè)車載定位系統(tǒng)
尋TC35I模塊
基于UC Linux的RS-485總線在醫(yī)療監(jiān)護(hù)系統(tǒng)中的應(yīng)用
無(wú)線視頻傳輸
免費(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)