Hallo, Ich versuche mithilfe von UART mit meinem Mikrocontroller (ATmega32) einen vom PC aus gesendeten String zu empfangen. Das Problem ist, dass ich mit folgendem Code char line[20]; UART_gets( line, sizeof( line )); lcd_string(line); den ich hierher (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART) habe, nach dem Senden des LF nur max. 2 Zeichen empfange / ausgegeben werden. Woran könnte das liegen? Wie bekomme ich es hin, dass ich ganze Zeichenketten empfangen kann? Danke Jonas E.
Prüfe, ob der Empfang nicht richtig funktioniert, oder ob die LCD Ausgabe nicht richtig funktioniert. Gibt erstmal einen hardcodierten String aus. Ansonsten prüfe die Einstellung der Bitrate, Stop Bits und Fuse für die Takt-Teiler. Kannst Du denn erfolgreich vom Mikrocontroller an den PC senden?
Meiner Meinung nach funktioniert der Empfang nicht richtig. Das Senden vom Mikrocontroller aus und das Anzeigen auf dem LCD funktionieren ansonsten (hardcoded) einwandfrei, auch mit Strings mit Längen > 2. Das lässt darauf schließen, dass die Daten nicht richtig empfangen werden. Die Bitrate etc. sind nach Angaben im Tutorial von mir gewählt und eingestellt worden. Findest du einen Fehler in dem Code, den ich von der Seite benutze?
Gast
#3119719
Versuchs doch mal direkt mit:
uint8_t uart_getc(void);
In Form von:
>>>
uint8_t Aussi [2];
Aussi [ 1 ] = 0; // String zu ende
for (uint8_t i=0; i<50;i++) // 50 Etwasse dann Schluss von mir
// aus auch nur 49 oder eine LCD-Zeile
{
Aussi [ 0 ] = uart_getc (); // Zeichen holen
lcd_string(Aussi); // Echo
}
<<<
Während des Versuchs: Fingen weg von den Sonderzeichen incl. line feed
Hallo Amateur, dein Code hat einwandfrei funktioniert! Danke für deine Hilfe :D
Du kannst also alle Zeichen korrekt einlesen und ausgeben. Aber wenn Du Zeichen zu einem String sammelst, funktioniert es nicht mehr. Die Routine für den String sieht aber sauber aus. Nun rate ich mal: Das RAM ist überfüllt, so dass der Stack dein char-array überschreibt.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.