Forum: Mikrocontroller und Digitale Elektronik Uart: String empfangen


von Jonas E. (jonas_e43)


Lesenswert?

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.

von Wusel D. (stefanfrings_de)


Lesenswert?

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?

von Jonas E. (jonas_e43)


Lesenswert?

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?

von amateur (Gast)


Lesenswert?

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

von Jonas E. (jonas_e43)


Lesenswert?

Hallo Amateur,

dein Code hat einwandfrei funktioniert!
Danke für deine Hilfe :D

von Wusel D. (stefanfrings_de)


Lesenswert?

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.

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
Noch kein Account? Hier anmelden.