Forum: Mikrocontroller und Digitale Elektronik UART-Ausgabe führt bei längerem String zu Resert des µC


von Mark (Gast)


Angehängte Dateien:

Lesenswert?

Vielleicht kann mir jemand mit folgenden Problem mal auf die Sprünge 
helfen, was ich hier falsch mache.

Ich würde gerne Stings per UART vom Atmega168 auf den PC übertragen.

Hierzu nutze ich einen FT232RL.

Ansich funktionier die Übertragung, solane ich nur einen kurzen String 
übertrage. Wird dieser länger, macht der µC scheinbar immmer einen 
Reset, sodass der Sting nur Abgehackt im Terminalprogramm (Putty) 
erscheint.

Momentan verwender ich 19200 als Baudrate. Gehe ich runter auf 9600, 
wird noch weniger Inhalt übertragen.

Mach ich beim Senden etwas falsch?

Ich verwende den Code aus dem GCC-UART-Tutorial und gebe den Text wie 
folgt aus:

uart_puts("\r\nHallo Welt, Hallo Welt, Hallo Welt, Hallo Welt");

Die Ausgabe sieht dann leider wie im Screenshot aus.

von g457 (Gast)


Lesenswert?

> Mach ich beim Senden etwas falsch?

WDP3..0 auf 0000 (16ms) programmiert?

von Stefan F. (Gast)


Lesenswert?

Dann hast du sehr wahrscheinlich einen Speicher-Überlauf.

Benutze an anderen Stellen weniger RAM oder beschränke Dich auf kurze 
Strings.

von Mark (Gast)


Lesenswert?

Wenn ich testweise, statt viermal "Hello World" in einem Rutsch 
auszugeben, 4 einzelne Übertragungen daraus mache, besteht das Problem 
dennoch. Zweimal klappts und dann gibts nen Reset.

von Georg (Gast)


Lesenswert?

Stefan U. schrieb:
> Dann hast du sehr wahrscheinlich einen Speicher-Überlauf.

Mark schrieb:
> Gehe ich runter auf 9600,
> wird noch weniger Inhalt übertragen.

Das spricht gegen diese Prognose.

Georg

von g457 (Gast)


Lesenswert?

> Zweimal klappts und dann gibts nen Reset.

Das klingt immernoch sehr nach WDP - überprüfen! Und wenn Du schon dort 
bist dann schau Dir WDTON auch noch gleich an ob das 0 ist.

von Wolfgang (Gast)


Lesenswert?

Mark schrieb:
> Wenn ich testweise, statt viermal "Hello World" in einem Rutsch
> auszugeben, 4 einzelne Übertragungen daraus mache, besteht das Problem
> dennoch.

Dann gibt dem Wachhund zwischen den Übertragungen doch mal eine 
Streicheleinheit.

von Mark (Gast)


Lesenswert?

Eigentlich ist zu dem Zeitpunkt der Ausgabe noch gar kein Watchdog 
aktiv. Mache die Übertragung momentan direkt nach der uart_init und 
nicht später im Programm, um solche Feher ausschließen zu können.

von Norbert S. (norberts)


Lesenswert?

Moin,

Rechne mal nach. 16ms Watchdog kommt bei 19200 Baud ziemlich gut hin.

Gruß,
Norbert

von g457 (Gast)


Lesenswert?

> Eigentlich ist zu dem Zeitpunkt der Ausgabe noch gar kein Watchdog
> aktiv.

Hast Du das anhand WDP und WDTON überprüft oder vermutest Du das nur?

von hp-freund (Gast)


Lesenswert?

Wie wird die Schaltung versorgt?
Bricht vielleicht die Spannung ein?

von Sascha_ (Gast)


Lesenswert?

Wie groß ist in der UART Lib der Puffer eingestellt?

von Mark (Gast)


Lesenswert?

Danke an alle,
danke an g457. Du hattest recht. Lag am Watchdog!!! Vielen Dank, da wäre 
ich nicht drauf gekommen und hab schon sinnlose Stunden davorgehockt.

von Mark (Gast)


Lesenswert?

Aber noch eine weiter Frage. Momentan ist es ja so, dass die Strings 
ununterbrochen durch Putty jagen.

Wie realisiert man eine einmalige Ausgabe, sodass die Daten nicht 
ständig Flackern? Einfach nur die Daten durch eine Schleife einmal 
übertragen lassen? Oder gibts da nen speziellen Befehl?

von Norbert S. (norberts)


Lesenswert?

Mark schrieb:
> Wie realisiert man eine einmalige Ausgabe, sodass die Daten nicht
> ständig Flackern? Einfach nur die Daten durch eine Schleife einmal
> übertragen lassen? Oder gibts da nen speziellen Befehl?

Hä?
Wenn Du das in einer Schleife sendest kommt es natürlich immer wieder.
Was für eine Schleife?
Übertrage es einmal und es kommt einmal.
Überträgst Du es in der Schleife, kommt es natürlich bei jedem Durchgang 
der Schleife.

Gruß,
Norbert

von Christian M. (Gast)


Lesenswert?

Warscheinlich im Arduino-Loop()

Gruss Chregu

von S. R. (svenska)


Lesenswert?

Du kannst statt "Hallo Welt\n" einfach "Hallo Welt\r" senden, dann 
sollte außer dem Cursor nichts mehr flackern.

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.