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.
:
Verschoben durch User
Peter schrieb: > hab das problem das mein Endzeichen nicht erkannt wird. und welchen endzeichen schickt du, \r oder \n?
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; }
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?
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.
Neben dem '\r\n' zwei weitere Problem: 1) Die Logik des if ist verkehrt herum. 2) Null-Terminierung fehlt.
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.
Beispiel Ich schicke 2 mal "test" mit LF ans newline zeichen bekomme zurück e\n st\n t\n
dann zeigt uns doch bitte mal den echten code, also der auch compiliert wird.
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.
Stefan Ernst schrieb: > 2) Null-Terminierung fehlt. Bombe schonmal danke für die Antwort hab jetzt erst verstanden was du gemeint hast. Hab jetzt if (nextChar!='\n') benutzt. aber was meinst du mit Null-Terminierung?
So hat sich alles erledigt. Funktionier jetzt alles bestens. Vielen dank für die Hilfe.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.