www.mikrocontroller.net

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


Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, das programm auf dem atmel muss fehlerfrei sein.

Autor: Daniel G. (daniel83)
Datum:

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

Autor: Stephan R. (Gast)
Datum:

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

Autor: Lord Ziu (lordziu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht per UART...

Autor: dr.Schmock (Gast)
Datum:

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

Autor: Markus J. (markusj)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel G. (daniel83)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stephan R. (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel G. (daniel83)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht 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 =)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Manne (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird gemacht! Montag. Jetzt ist Wacken!

Danke erstmal!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dörthe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlt der Puller am Reset?

Autor: Emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.