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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.