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

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

stevie11 20 Wrz 2010 12:44 1437 5
REKLAMA
  • #1 8530642
    stevie11
    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 "$"

    
    
    #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
  • REKLAMA
  • #2 8530656
    dar1231
    Poziom 12  
    jak dla mnie to znaczki $ i # mogą być kodami sterującymi dla konwertera. Proponuje zastąpić innymi, wysłać a następnie zdekodować.
  • REKLAMA
  • #3 8530671
    stevie11
    Poziom 9  
    Hmm, a jak to zastąpić?
    Bo muszę odebrać coś w tym stylu:
    
    $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
    
  • REKLAMA
  • #4 8530690
    medicb
    Poziom 28  
    Skoro masz z nim problem i nie potrafisz go odebrać to go pomiń i odbieraj tylko "GPRMC"
  • REKLAMA
  • Pomocny post
    #5 8530704
    Andrzej__S
    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.
  • #6 8530895
    stevie11
    Poziom 9  
    Dziękuję, $24 zwraca mi $ :) Teraz mogę dalej sobie emulować GPS, póki nie mam fizycznego urządzenia w domu.
REKLAMA