logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[hc908qb8] [C] problem z RF12b

jimi_slonecznik 26 Kwi 2009 19:45 1629 0
REKLAMA
  • #1 6459653
    jimi_slonecznik
    Poziom 2  
    witam,
    mam problem z komunikacją na mikrokontrolerach motoroli (hc908qb8). Stosuję układy RF12b na częstotliwości 868MHz. Siedzę już nad tym kolejny dzień i zupełnie nie mam pomysłu co może być źle. Przeczytałem wszystko na temat tych modułów tu a forum oraz to co znalazłem na sieci. Moduły nadal nie chcą się komunikować. Zasilane są z 5V, na oscyloskopie wygląda że nadajnik wszystkie sygnały otrzymuje i wystawia prawidłowo, na analizatorze widma również wygląda jakby nadawał (poza prążkiem nośnej skaczą sobie inne prążki po bokach). Odbiornik nie odbiera nic - na oscyloskopie sygnały wyglądają ok, ale wygląda na to że bufor jest cały czas pusty. Może macie jakiś pomysł co z tym zrobić? Poniżej kod programów.

    Cytat:

    ////////////////////////////////////////////////
    // wspólne
    ///////////////////////////////////////////////


    #define SCK 0
    #define SDO 2
    #define SDI 1
    #define CS 0
    #define NIRQ 2

    #define HIB(x) PTB |= (1<<(x))
    #define LOB(x) PTB &= ~(1<<(x))

    #define HIA(x) PTA |= (1<<(x))
    #define LOA(x) PTA &= ~(1<<(x))

    #define WAIT_NIRQ_LOW() while(PTA&(1<<NIRQ))

    /***************************************************/

    unsigned int writeCmd(unsigned int cmd)
    {
    unsigned char i;
    unsigned int recv;
    recv = 0;

    LOB(SCK);
    LOA(CS);

    for(i=0; i<16; i++)
    {
    if(cmd&0x8000) HIB(SDI);
    else LOB(SDI);

    HIB(SCK);
    recv<<=1;
    if( PTB&(1<<SDO) )
    {
    recv|=0x0001;
    }
    LOB(SCK);
    cmd<<=1;
    }
    HIA(CS);
    return recv;
    }

    /***************************************************/

    void QB8Init(void){
    /* general config */
    CONFIG2 = 0x01; /*IRQ pull-up, IRQ dis, reset on pin en, osc dis in stop*/
    CONFIG1 = 0x39; /*cop dis, lvi dis, long stop rcv, stop as illegal */
    OSCSC = 0x42; /*external clock, enabling pin OSC1 as oscilator input*/

    /* pins used in communication with rfm12b */
    PTB_PTB1 = 1;
    PTB_PTB0 = 0;
    DDRB_DDRB1 = 1; /* sdi so it's output */
    DDRB_DDRB0 = 1; /* sck so it's output */
    DDRB_DDRB2 = 0; /* sdo so it's input */
    DDRA_DDRA0 = 1; /*PTA0 as output - nSEL*/
    PTA_PTA0 = 1;

    DDRA_DDRA1 = 0; /*PTA1 as input*/
    PTAPUE_PTAPUE1 = 1; //
    TSC = 0x30; /*stop and reset counter*/
    TSC0 = 0x48; /*channel 0 in IC mode, prescaler :1*/
    TSC_TSTOP = 0; /*counter started*/

    /* other pins */
    PTAPUE_PTAPUE3 = 1; /*pull-up resistor on reset pin*/

    /*****************************************************/


    ////////////////////////////////////////////////
    // nadajnik
    ///////////////////////////////////////////////


    /***************************************************/

    void rfInit(void)
    {

    writeCmd(0x80E7); //EL,EF,868band,12.0pF
    writeCmd(0x8239); //!er,!ebb,ET,ES,EX,!eb,!ew,DC
    writeCmd(0xA640); //frequency select
    writeCmd(0xC647); //4.8kbps
    writeCmd(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
    writeCmd(0xC2AC); //AL,!ml,DIG,DQD4
    writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR
    writeCmd(0xCED4); //SYNC=2DD4
    writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
    writeCmd(0x9850); //!mp,90kHz,MAX OUT
    writeCmd(0xCC17); //OB1, COB0, LPX, Iddy, CDDIT?CBW0
    writeCmd(0xE000); //NOT USED
    writeCmd(0xC800); //NOT USED
    writeCmd(0xC040); //1.66MHz,2.2V
    }

    /***************************************************/

    void rfSend(unsigned char data)
    {
    WAIT_NIRQ_LOW();
    writeCmd(0xB800 + data);
    }

    /***************************************************/

    void main(void) {

    volatile unsigned int i=0;
    volatile unsigned int j = 0;

    unsigned char ucTablicaHelp[16] = {
    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,

    0x4D, 0x4E, 0x4F
    };

    QB8Init();
    rfInit();

    for(i=0;i<1000;i++)for(j=0;j<123;j++);

    for(;;){
    writeCmd(0x0000);

    rfSend(0xAA);
    rfSend(0xAA);
    rfSend(0xAA);

    rfSend(0x2D);
    rfSend(0xD4);

    for (i = 0; i < 16; i++){
    rfSend(ucTablicaHelp[i]);
    }

    rfSend(0xAA);
    rfSend(0xAA);
    rfSend(0xAA);

    for(i=0;i<1000;i++)for(j=0;j<123;j++);
    }
    }

    ////////////////////////////////////////////////
    // odbiornik
    ///////////////////////////////////////////////

    void FifoReset(void){
    uiWriteCommand(0xCA81);
    uiWriteCommand(0xCA83);
    }

    /***************************************************/

    void RFInit(void){
    uiWriteCommand(0x80E7); //EL,EF,868band,12.0pF
    uiWriteCommand(0x8299); //er,!ebb,ET,ES,EX,!eb,!ew,DC
    uiWriteCommand(0xA640); //freq select
    uiWriteCommand(0xC647); //4.8kbps
    uiWriteCommand(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
    uiWriteCommand(0xC2AC); //AL,!ml,DIG,DQD4
    uiWriteCommand(0xCA81); //FIFO8,SYNC,!ff,DR
    uiWriteCommand(0xCED4); //SYNC=2DD4;
    uiWriteCommand(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
    uiWriteCommand(0x9850); //!mp,90kHz,MAX OUT
    uiWriteCommand(0xCC17); //!OB1,!OB0, LPX,!ddy,DDIT,BW0 between 5 and 10MHZ
    uiWriteCommand(0xE000); //NOT USE
    uiWriteCommand(0xC800); //NOT USE
    uiWriteCommand(0xC040); //1.66MHz,2.2V
    }

    /***************************************************/

    unsigned char ucRFRecv(void){
    unsigned int uiRecvData;
    for(;;){
    uiRecvData = uiWriteCommand(0x0000);
    if((uiRecvData & 0x8000)){
    uiRecvData = uiWriteCommand(0xB000);
    return(uiRecvData & 0x00FF);
    }
    }
    }

    /***************************************************/

    void main(void) {

    unsigned char ucDataCounter;
    unsigned char ucData[16];

    QB8Init();
    RFInit();
    FifoReset();

    for(;;){
    for(ucDataCounter = 0;ucDataCounter < 16; ucDataCounter++){
    ucData[ucDataCounter] = ucRFRecv();
    }
    FifoReset();
    }
    }



    z góry dziękuję za każdą pomoc :)
  • REKLAMA
REKLAMA