Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Atmega 32][C] Problem z odbiorem znaku "$"

20 Wrz 2010 12:44 1251 5
  • Poziom 9  
    Witam, mam problem ze znakiem "$", jest mi on potrzebny do odczytu ramki NMEA. Jak widać poniżej inne znaki działają. Specjalne także, oprócz # i $. Wyskakuje wtedy takie coś: dla $: "<0>13", dla # "#013". Mam przejściówkę USB->RS232 -> ZL3AVR. Przejściówka to model: USB-SERIAL CH340. Nie wiem w czym leży problem. A niestety nie mam kabelka w domu do COM'a ze stacjonarnego kompa, aby sprawdzić czy to wina przejściówki. Dlatego może coś w kodzie jest nie tak..

    [Atmega 32][C] Problem z odbiorem znaku "$"

    Code:


    #define RS_UBRR  F_CPU/baud/16-1 //Baud preskaler
    #include <stdio.h>
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>  // Przerwania

    void USART_Init(unsigned long int baud)
       {
          UBRRH=(unsigned char)(RS_UBRR>>8);       
          UBRRL=(unsigned char) (RS_UBRR);      
          UCSRB = (1 << RXEN) | (1 << TXEN);
          UCSRC=(1 << URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
          UCSRB |= (1 << RXCIE);
               sei();
       }
       

    void USART_Transmit(unsigned char data)
       {
       while (!(UCSRA & (1 << UDRE)));
       UDR = data;
       }
       
    void USART_Transmit_String(const char *s )
    {
       while (*s)
          USART_Transmit(*s++);
    }

    unsigned char USART_Receive(void)
       {
       while (!(UCSRA & (1<<RXC)));
       return UDR;
       }

    SIGNAL(USART_RXC_vect)
    {

       // Code to be executed when the USART receives a byte here
       volatile char znak;
     
       znak=USART_Receive();
       USART_Transmit(znak);
     
    }    

    int main(void)
    {
       uint8_t c;
        USART_Init(4800);
       USART_Transmit_String("ATMega88 UART start!\r\n");
     
       while(1)
       {
       
       }
    }



    Pozdrawiam
  • Poziom 11  
    jak dla mnie to znaczki $ i # mogą być kodami sterującymi dla konwertera. Proponuje zastąpić innymi, wysłać a następnie zdekodować.
  • Poziom 9  
    Hmm, a jak to zastąpić?
    Bo muszę odebrać coś w tym stylu:
    Code:

    $GPRMC,084914,A,5221.153,N,02107.721,E,000.0,360.0,140910,003.8,E*76
    a dostaję:
    <0>RMC,084914,A,5221.153,N,02107.721,E,000.0,360.0,140910,003.8,E*76
  • Poziom 28  
    Skoro masz z nim problem i nie potrafisz go odebrać to go pomiń i odbieraj tylko "GPRMC"
  • Pomocny post
    Poziom 28  
    To echo, które otrzymujesz z procesora jest prawidłowe. Odsyła to co otrzymał. Użyj przycisku 'Help' w BrayTerminal i przejrzyj rozdział 'HOW TO USE MACROS?'
    Wynika z niego, że aby wysłać znak '$' musisz wpisać $24 lub #036, a dla znaku '#' będzie to $23 lub #035.
  • Poziom 9  
    Dziękuję, $24 zwraca mi $ :) Teraz mogę dalej sobie emulować GPS, póki nie mam fizycznego urządzenia w domu.