Forum: Mikrocontroller und Digitale Elektronik Atmega "kackt ab" wenn UART gesteckt/ entfernt wird


von Stephan R. (Gast)


Lesenswert?

Moin!

Ich habe an der UART meines Atmega8 eine GPS- Maus angeschlossen, dessen 
Informationen fleissig gelesen und angezeigt werden.

Mein Problem: wenn -warumauchimmer- kurz die Verbindung getrennt wird, 
so bleibt der Atmega stehen.

Warum?

Vermutung: durch das Abstecken entsteht ein Zeichenwirrwarr, in dem sich 
eine Folge befindet, die als Was-auch-immer-Befehl interpretiert wird.

Gibts da Abhilfe?

von Peter (Gast)


Lesenswert?

ja, das programm auf dem atmel muss fehlerfrei sein.

von Daniel G. (daniel83)


Lesenswert?

So Programmieren, das du auf Befehle von der Art "Was auch immer" so 
reagierst, dass sich ein sicherer Betriebszustand einstellt?

von Stephan R. (Gast)


Lesenswert?

Gibt es denn nicht auch einen "Achtung, Chip, hier kommt ein neues 
Programm für Dich!"- Befehl?

von Lord Z. (lordziu)


Lesenswert?

Nicht per UART...

von dr.Schmock (Gast)


Lesenswert?

Was meinst du überhaupt mit "bleibt stehen"? Wird ein Reset 
durchgeführt? Friert er komplett ein (reagiert auf garnix mehr)?

von Markus J. (markusj)


Lesenswert?

Ja - Programmieren lernen.
Scheinbar verwendest du Code ohne über dessen Funktion zu kennen, sonst 
hättest du die Frage nicht, oder zumindest nicht so gestellt.
Hättest du Ahnung von dem was du tust, wüsstest du erstens welcher Teil 
des Programms dafür verantwortlich ist und zweitens wie du 
Fehlinterpretationen abfangen kannst (Stichwort: Timeout).

Der AVR interpretiert nämlich ein bisschen gar nichts, höchstens dein 
Programm. Wenn der AVR selbst abschmiert, hast du Probleme mit der 
Stromversorgung.

mfG
Markus

von Daniel G. (daniel83)


Lesenswert?

UART dient nur zum Datenaustausch. Diesen Austausch machst du selbst in 
deinem Programm auf dem Mega. Du kannst also sehr wohl mechanismen 
einbauen, dass ausgewertet wird, ob die Daten richtig/sinnvoll sind oder 
nicht.

>Gibt es denn nicht auch einen "Achtung, Chip, hier kommt ein neues
>Programm für Dich!"- Befehl?

Dein Mega bekommt über UART ein neues Programm von der GPS Maus?

von Stephan R. (Gast)


Lesenswert?

Er "kackt so richtig ab". Danach hilft -vergessen zu erwähnen, sorry- 
nur erneutes Flashen.

von Karl H. (kbuchegg)


Lesenswert?

Stephan R. schrieb:

> Vermutung: durch das Abstecken entsteht ein Zeichenwirrwarr, in dem sich
> eine Folge befindet, die als Was-auch-immer-Befehl interpretiert wird.

> Gibt es denn nicht auch einen "Achtung, Chip, hier kommt ein neues
> Programm für Dich!"- Befehl?

Nö.

Das was über die UART kommt wird ja nicht als Programmcode 
interpretiert.
Das sind einfach nur Daten, die von deinem Programm weiter verarbeitet 
werden. Wenn dein Programm aber nicht damit klarkommt, dass über die 
Schnittstelle etwas anderes hereinkommt als es erwartet, dann kann es 
schon sein, dass dein Programm sich andere wichtige Daten überschreibt 
und als Folge davon dann unvorhergesehene Dinge passieren.

> Gibts da Abhilfe?

Programm fehlerfrei schreiben.
Beim Programmieren auch immer ein Auge darauf haben: Was kann an dieser 
Stelle alles passieren.

von Peter D. (peda)


Lesenswert?

Stephan R. schrieb:
> Gibt es denn nicht auch einen "Achtung, Chip, hier kommt ein neues
> Programm für Dich!"- Befehl?

Du solltest doch am besten wissen, was Du in den ATmega8 einprogrammiert 
hast.

Oder ist das Programm garnicht von Dir?


Peter

von Karl H. (kbuchegg)


Lesenswert?

Stephan R. schrieb:
> Er "kackt so richtig ab". Danach hilft -vergessen zu erwähnen, sorry-
> nur erneutes Flashen.

Das ist ziemlich unwahrscheinlich.

Wenn ein Druck auf den Reset Knopf nicht hilft, musst du schon sehr 
unglücklich in deinem Programm zugeschlagen haben.
Aber spätestens nach einem Strom Aus / Strom ein, muss wieder alles 
normal sein.

Sofern du die GPS Maus erst nach dem µC startest, natürlich :-)

Denn ansonsten steigt der µC schon wieder schräg in eine Übertragung ein 
und das nächste Abkacken gleich nach dem Hochfahren ist nur eine Frage 
von Millisekunden.

von Stephan R. (Gast)


Lesenswert?

Dochdoch. Aber mit meinem geschulten Ohr höre ich ganz leise heraus, 
dass es an meim Programm liegen KÖNNTE.

Werd wohl nochmal drüberfliegen.

Thx!

von Peter (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Aber spätestens nach einem Strom Aus / Strom ein, muss wieder alles
> normal sein.

der µC kann ich auch sein eigenen Flash überschreiben. Sonst würde es ja 
keine bootloader geben.
Ich halte es zwar hier für unwarscheinlich aber möglich ist es.

von Daniel G. (daniel83)


Lesenswert?

>Wenn ein Druck auf den Reset Knopf nicht hilft, musst du schon sehr
>unglücklich in deinem Programm zugeschlagen haben.

Oder es fehlt der Rest Knopf

von Michael H. (michael_h45)


Lesenswert?

Stephan R. schrieb:
> Dochdoch. Aber mit meinem geschulten Ohr höre ich ganz leise heraus,
> dass es an meim Programm liegen KÖNNTE.
Da musste ich wirklich lachen =)

von Karl H. (kbuchegg)


Lesenswert?

Peter schrieb:

> Ich halte es zwar hier für unwarscheinlich aber möglich ist es.

So war das auch auf den Fragesteller gemünzt.
Ich erinnere mich ja noch, dass er GPS auswerten will und wie üblich 
keine Ahnung von Stringverarbeitung hat :-)
D.h. er hat mit 99% Sicherheit das SRAM niedergebügelt. Höchst 
wahrscheinlich in der Empfangsschleife (Abfrage auf Buffer voll 
vergessen). Da müsste er schon sehr viel Pech haben, wenn ein 
misglückter Return dann ausgerechnet so landet, dass das Flash verändert 
wird.

von Stephan R. (Gast)


Lesenswert?

> keine Ahnung von Stringverarbeitung hat

Nanana! Während die Kiste dransteckt läuft alles tadellos!

Aber welche Missetaten könnte meinen Chip dazu veranlassen, seinen Flash 
zu überschreiben?

von Manne (Gast)


Lesenswert?

Stephan R. schrieb:
> Aber mit meinem geschulten Ohr höre ich ganz leise heraus,
> dass es an meim Programm liegen KÖNNTE.

Benutze lieber dein (hoffentlich ebenfalls) geschultes Gehirn...

von Peter (Gast)


Lesenswert?

Stephan R. schrieb:
> Nanana! Während die Kiste dransteckt läuft alles tadellos!

so ist es immer, man testet ja nur den normalfall. Der Fehlerfall ist 
viel spannender.

Also mach es jetzt nicht so spannend und zeig uns doch bitte den 
Quellcode.

von Karl H. (kbuchegg)


Lesenswert?

Stephan R. schrieb:
>> keine Ahnung von Stringverarbeitung hat
>
> Nanana! Während die Kiste dransteckt läuft alles tadellos!

Das ist keine Kunst.
Die Kunst in der Programmierung fängt dann an, wenn es gilt auch in 
Fehlerfällen ein System noch am laufen zu halten. Ein Programm so zu 
schreiben, dass es nicht durch fehlerhafte Daten aus der Bahn geworfen 
wird, sondern die ignoriert/korrigiert/was_auch_immer_damit_macht. Aber 
auf jeden Fall nicht abstürzt.

> Aber welche Missetaten könnte meinen Chip dazu veranlassen, seinen Flash
> zu überschreiben?

Vergiss das fürs erste.
Mit an Sicherheit grenzender Wahrscheinlichkeit überschreibst du den 
Flash nicht. Dazu müsste man noch eine ganze Handvoll Zusatzannahmen 
treffen, was noch gleichzeitig alles schief gelaufen ist.
Occams Messer sagt: Das ist es höchst wahrscheinlich nicht

Nicht wenn ich mich so zurückerinnere, welche Schwierigkeiten du bei 
banalem Stringhandling hattest. Das ist viel wahrscheinlicher die 
Ursache.

von Joerg W. (joergwolfram)


Lesenswert?

lies einfach mal den Flash-Inhalt zurück nachdem nix mehr geht und 
vergleiche das mit dem was drinstehen sollte (Hex-Files). Das könnte 
etwas mehr Aufschluss geben.

Jörg

von Stephan R. (Gast)


Lesenswert?

Wird gemacht! Montag. Jetzt ist Wacken!

Danke erstmal!

von Karl H. (kbuchegg)


Lesenswert?

Joerg Wolfram schrieb:


Ich geh davon aus, dass du das vorschlägst, damit er sich davon 
überzeugt, das es das nicht ist.
Denn ansonsten lockst du ihn auf eine falsche Fährte.
Und gerade Anfänger neigen gerne dazu allem Möglichen die Schuld zu 
geben, nur nicht ihrem Programm. Egal wie unwahrscheinlich die weiteren 
Möglichkeiten tatsächlich sind.

von Dörthe (Gast)


Lesenswert?

Fehlt der Puller am Reset?

von Emil (Gast)


Lesenswert?

Hallo!

Karl heinz Buchegger schrieb:
> Die Kunst in der Programmierung fängt dann an, wenn es gilt auch in
> Fehlerfällen ein System noch am laufen zu halten. Ein Programm so zu
> schreiben, dass es nicht durch fehlerhafte Daten aus der Bahn geworfen
> wird, sondern die ignoriert/korrigiert/was_auch_immer_damit_macht. Aber
> auf jeden Fall nicht abstürzt.

Das stimmt, so sollte es immer sein, aber Microsoft hat das bis heute 
nicht kapiert. Leg mal eine fehlerhafte DVD in dein DVD-Laufwerk ein und 
das System verabschiedet sich oder du musst eine halbe Ewigkeit warten, 
bis das System verstanden hat, dass die DVD nicht zu lesen ist ;-)

Nun aber Scherz beiseite. Ich selbst hatte mal ein ähnliches Problem. 
Ich habe eine Platine mit einem FT232BM und einem ATMEGA-Prozessor 
entworfen.
Mein Programm lief recht gut, aber jedes Mal, wenn ich während des 
Betriebes das USB-Kabel des Computers ansteckte oder absteckte, stürzte 
der Prozessor ab und nichts tat sich mehr. Nach einem Reset oder 
Power-UP war trotzdem alles eingefrohren, der Prozessor tat nichts mehr. 
Nur ein Neuflashen half. Dann ging der Prozessor wieder so lange bis man 
das USB-Kabel wieder ansteckte oder absteckte. Danach wieder Neuflashen.

Es ist schon ein paar Jahre her. Ich arbeitete mit Codevision und 
verwendete zusätzlich einen Watdog-Timer. Diesen hatte ich per Fuse-Bit 
standardmäßig eingeschaltet. Der Watdog wurde jeodch früher in der 
startup.asm standardmäßig abgeschaltet, was mich dazu verleitete eine 
andere startup einzubinden. Es gibt ja diese Option "User External 
Startup Initialization File", welche ich auswählte. Im Startup-File 
schaltete ich die Watdog-Befehle ab und los ging es. Es schien alles zu 
funktionieren, bis auf das oben geschilderte Problem. Die UART Sende- 
und Empfangsroutinen waren schon des Öfteren eingesetzt worden und 
hatten sich bereits fehlerfrei bewährt.

Erst nach langem Suchen kam ich dahinter, dass dieses externe 
Startup-File, welches mit Codevision mitgeliefert wurde, irgendetwas 
"Böses" macht. Keine Ahnung warum sich das System in diesem Fall so 
verhielt, aber ein Abschalten der Option half. Das interne Startup-File 
wurde wieder verwendet und der Fehler trat nie wieder auf. Leider musste 
ich dann den Watchdog-Timer nach dem Start mit eigenen Befehlen wieder 
aktivieren.

Ich hoffe, ich konnte helfen.


Schöne Grüße

Emil

von Peter (Gast)


Lesenswert?

Emil schrieb:
> Erst nach langem Suchen kam ich dahinter, dass dieses externe
> Startup-File, welches mit Codevision mitgeliefert wurde, irgendetwas
> "Böses" macht.

soetwas macht doch neugierig, hast du nicht mal das ASM angeschaut?

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.