Endzeichen wird nicht erkannt

Gast #2413834
Lesenswert?

Hallo

hab das problem das mein Endzeichen nicht erkannt wird.

ISR(USART_RXC_vect)
{
  static uint8_t str_count=0;
  unsigned char nextChar;
  nextChar = UDR;

   if (uart_string[str_count]=='\n')
        {
       uart_string[str_count] = nextChar;
             str_count++;
  }
  else
  {
      uart_string[str_count] =nextChar;
      str_count=0;
  }
}

Jemand ne Idee? Beim Microcontroller handelt es sich um einen Atmega8.
Gast #2413841
Lesenswert?

Wi soll das überhaupt gehen?

Du vergleichst ja immer mit dem zukünfigten wert, dieser ist ja nicht 
mal geschrieben.

 if (nextChar=='\n') {
    uart_string[str_count] = nextChar;
    str_count++;
 }else{
    uart_string[str_count] =nextChar;
    str_count=0;
  }
Gast #2414144
Lesenswert?

Sorry war der falsche Quelltext hab natürlich den nextchar verglichen. 
Habe gerade Probiert über Hterm zu schicken. ISR(USART_RXC_vect)
{
  static uint8_t str_count=0;
  unsigned char nextChar;
  nextChar = UDR;

   if (nextChar=='\r\n')
  {
    uart_string[str_count] = nextChar;
    str_count++;
  }
  else
  {
    uart_string[str_count] = nextChar;
    str_count=0;
    senden=1;
  }
}

Wenn der das Endzeichen Empfängt soll das programm mir den uart_string 
schicken was im Hauptprogramm passiert. Bekomme aber nur Datenmüll 
geschickt egal ob auf 9600 Baud oder 19200.
Wenn ich als String "1234" schicke bekomme ich immer nur Stücke zurück
4\n
2\n
4\n
2\r\n

Jemand ne Erklärung?
Gast #2414146
Lesenswert?

if (nextChar=='\r\n')

glaubst du wirklich das es du schaffst zweich zeichen in ein zeichen zu 
bekommen? Und welcher compiler nimmt solchen code überhaupt an?

Deien Baudrate wird nicht stimmen, warum auch immer.
Gast #2414170
Lesenswert?

Also hab folgendes probiert.

if (nextChar=='\n') ging nicht. hat er mir auch müll gesendet.
wenn ich aber putChar("Test"); sende macht er es ohne probleme. 
scheinbar hat er probleme beim empfangen. Hab ein 3686400 Quarz und 
UBRRL  = 23; bei 9600 Baud eingestellt. Das muss auch alles passen.
Gast #2414305
Lesenswert?

ISR(USART_RXC_vect)
{
  static uint8_t str_count=0;
  unsigned char nextChar;
  nextChar = UDR;

   if (nextChar=='\n')
  {
    uart_string[str_count] = nextChar;
    str_count++;
  }
  else
  {
    uart_string[str_count] = nextChar;
    str_count=0;
    senden=1;
  }
}

und im main

if(senden)
{
  putChar(uart_string);
  senden=0;
}

  UCSRB |= (1<<RXEN)  | (1<<TXEN)  | (1<<RXCIE);
// UART TX und RX Interrupt einschalten
  UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
// Asynchron 8N1 (8Bits, Parity none; 1 Stopbit)
  UBRRL  = 23;
// entspricht 9600 Baud bei 3,686400Mhz

so das dürfte alles sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren