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

BTM 222 + AVR problem z odczytem po Uart

w.adamczak 04 Mar 2009 16:19 1013 0
  • #1 6235348
    w.adamczak
    Poziom 10  
    Witam
    Właśnie zacząłem uruchamiać modułu btm 222.
    Uklady znajdują się nawzajem, łączą się. Chciałbym jednak jakoś móc wpływać na parametry tranmisji szeregowej.
    Chcę aby moduły po załączeniu zasilania same się znajdowały i łączyły się (tak też mam to zrobione). Później chciałbym np zmienić parametry transmisji dlatego przechodze do trybu komend AT i wysylam poszczegolne komendy AT do modulu. Jednak nie udaje mi sie odczytac danych jakie wysyla modul w odpowiedzi do procka i nie wiem dlaczego.
    Modul jednak wysyla odpowiedz na poszczegolne komendy bo podgladam to na terminalu na kompie.

    pozniej wklejam kod, moze ktos z Was zobaczy jaki bla robie:


    #define F_CPU 7372800// Clock Speed
    #define BAUD 19200
    #define MYUBRR ((F_CPU/(16*BAUD))-1)

    //-------------------------------------------------------
    void USART_Init( unsigned int baud )
    {
    /* Set baud rate */
    UBRRH = (F_CPU/(BAUD*16L)-1) >> 8; //(unsigned char)(baud>>Cool;
    UBRRL = (unsigned char)(F_CPU/(BAUD*16L)-1); //(unsigned char)baud;

    /* Enable receiver and transmitter */
    UCSRB = (1<<RXCIE)|(1<<TXEN)|(1<<RXEN)|(1<<TXCIE);

    /* Set frame format: 8data, 1stop bit */
    UCSRC = (1<<URSEL)|(3<<UCSZ0);
    }

    //------------------------------------------------------
    SIGNAL(SIG_UART_RECV)
    {

    znak[ii]=UDR; zapis do bufora
    ii++;
    if(ii>20) ii=0;
    }

    //------------------------------------------------------
    SIGNAL(SIG_INTERRUPT0) // przerwanie zewnetrzne INT0
    {
    wyslij_text(znak2);
    }

    //------------------------------------------------------

    int main(void)
    {

    //ustawienia UART 19200, 1 bit stopu, brak parzystsci:

    USART_Init(19200);

    //komenda AT ktora wysylam do BTM

    znak2[0]='A';
    znak2[1]='T';
    znak2[2]='P';
    znak2[3]='?';
    znak2[4]=0x0D;


    while(1)
    {
    if(bit_is_clear(PIND, 4)) //nacisniecie przycisku wyswietla mi bufor
    //zeby sprawdzic co dostaje w odpowiedzi

    {
    for(int t=0; t<20; t++)
    {
    pisz_znak(znak[t]);
    }

    }

    }
    }
REKLAMA