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

CC1000PP nadawanie odbiór

ZweiNoS 26 Kwi 2009 14:02 894 0
REKLAMA
  • #1 6458465
    ZweiNoS
    Poziom 10  
    Witam.
    Mam zlutowe dwa identyczne układy Atmega32 + CC1000PP. Udało mi się je skalibrować. Potrzebuje przesłać między nimi dane. Zacząłem od tego, że dla ustawień CC1000PP (UART, 1.2kbaud) należy przesyłać preambułę 0x55 ustawiłem 200 bitów, układ skonfigurowany jako RX odbiera mi 0xFF. Funkcje wyglądają następująco:

    Do nadawania:
    void Wysylaj (void)
    {
    char my_byte;
    //preambuła
    for(my_byte=0; my_byte<100; my_byte++) {
    CC1000PP_send(0);
    CC1000PP_send(1);
    }
    }

    void CC1000PP_send(char bit) {
    if(bit) {
    PORTD |= _BV(DIO);
    } else {
    PORTD &= ~_BV(DIO);
    }
    }

    Do odbioru:

    void Odbierz (void)
    {
    char rec_b=0;//, cntr=0, bit_cntr=0;
    if(!close_lock()) return; //try to close the PLL lock
    rec_b = CC1000PP_receive_byte();
    PORTA = rec_b;
    }

    char CC1000PP_receive(void)
    {
    char ret;
    ret = DCLK;
    return ret;
    }

    char CC1000PP_receive_byte(void)
    {
    char my_bit=1, my_byte=0; //my_byte is used for storing result
    while(1) {
    if(CC1000PP_receive()) my_byte|=my_bit;
    if(my_bit==128) break;
    my_bit <<= 1;
    }
    return my_byte;
    }

    Według tego co się doczytałem z noty katalogowej CC1000 dla UART'a w trybie TX używana jest tylko linia DIO. A dla trybu RX tylko DCLK. Gdzie tu szukać błędu? I czy taki kod ma szanse działać, a jeśli nie, prosiłbym chociaż o algorytm jak powinny takie funkcję działać. Z góry dziękuję.
  • REKLAMA
REKLAMA