mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ausfall des Mikrocontrollers


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vllt. hat jemand von euch eine Ahnung?

Mein avr-Mikrocontroller (Atmega32) fällt nach einer unbestimmten Zeit 
aus und startet anschließend wieder am Anfang des Programms? Woran kann 
es liegen?

Gruß
Tom

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ein paar typische Maßnahmen, die sowas beseitigen:

- Resetbeschaltung: externer Pull-up Widerstand ca. 10k und möglichst 
einen Keramikkondensator gegen Masse zur Unterdrückung von Störungen

- Stromversorgung: sollte irgendwie stabilisiert sein, also Elkos + 
Spannungsregler; und (sehr wichtig): möglichst nahe dem Controller ein 
100 nF-Kerko an die Versorgung

- Programmfehler: kann man hier allgemein nicht viel sagen, ohne dass du 
weitere Infos postest. Bei C wird z.B. von nicht verwendeten 
Interruptvektoren standardmäßig an die Adresse 0 gesprungen.

Gruß
David

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ergänzend zu Stromversorgung:
Wenn Motoren oder sonstige größere Lasten geschaltet werden kann das die 
Stromversorgung stark beeinträchtigen.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo David,

bzgl. deines letzten Punktes mit dem Interrupt. Ich habe zwei Timer 
Interrupts und ein ADU Interrupt. Wie kann ich prinzipell das mit dem 
Interrupt an Adresse 0 verhindern?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn mit einem Quarz >10MHz betrieben: CKOPT nicht gesetzt ?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich habe nur den internen Takt von 4 MHz eingestellt

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe euch mal meinen Code mit bei geheftet.

Es muss irgend was mit dem TIMER1 zutun haben. Wenn ich ihn 
auskommentiere, dann bleibt der Controller immer im richtigen Zustand 
und resettet sich nicht!!!

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nicht implementierte Interrupts kann man mit
ISR(__vector_default) {
  //...
}

abfangen. Dann landen eben alle (vom Controller angesprungenen) 
Interrupts, die im Code nicht verwendet werden, in dieser Routine. Ist 
aber eher theoretischer Natur, man sollte natürlich keine Interrupts 
aktivieren die man nicht braucht.

Gruß

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,

was mir so spontan auffällt (sonst recht umfangreicher Code, eventuell 
wäre der Übersichtlichkeit halber das Aufteilen auf mehrere c-Dateien 
angebracht):

- keine eindeutige Schreibweise, z.B. bei den Interruptroutinen 
Deklarationen. Da stehen teilweise Leerzeichen vor der schließenden 
Klammer. Ich weiß nicht, wie aktuell oder ob die Information aktuell 
ist, aber laut Roboternetz macht der avr-gcc hierbei nicht, was er soll:
http://www.roboternetz.de/wissen/index.php/Avr-gcc...
angeblich müsste man dann zB exakt die Schreibweise ISR(SIG_ADC) 
verwenden.

- du rufst loescheFensterBits() in einer Interruptroutine auf. Dabei 
sind global die Interrupts deaktiviert. loescheFensterBits() blockt 
dabei eventuell so lange, wie der Delay VERZUGSZEIT ist. Hierbei kann 
der Controller weder seine Arbeit fortsetzen noch auf andere Interrupts 
reagieren.

- F_CPU sollte idealerweise vor dem Inkludieren der anderen 
Headerdateien definiert werden.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht der µC einen Reset oder springt er nur zur addr0?

Im 1. Fall kannst du das MCUCSR auslesen und den Grund
für den Reset rausbekommen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stacküberlauf?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe leider keine andere Möglichkeit, außer mit dem ISP, auf den µC 
zu zugreifen. Daher kann ich den MCUCSR nicht auslesen. Aber im meinem 
Display kann ich sehen, dass es wieder auf den Anfangszustand zurück 
springt!

Autor: µluxx .. (uluxx) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, du musst natürlich per software beim start des uC das Flag lesen 
und testen was der Grund war und dann entsprechend 
ausgeben/verarbeiten...

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es mal gestestet und herausgefunden, dass alles zurückgesetzt 
wird (alle Variablen die gesetzt waren sind auf ihre standardwerte 
zurückgesetzt wurden)!

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe leider keine andere Möglichkeit, außer mit dem ISP, auf den µC
>zu zugreifen. Daher kann ich den MCUCSR nicht auslesen.

Wieso denn das nicht? Natürlich kannst Du das MCUSCR auslesen, auswerten 
(auf das Display schreiben) und danach alle Flags im MCUSCR wieder auf 
"0" schreiben, damit Du den nächsten RESET-Grund herausfinden kannst.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe es mal gestestet und herausgefunden, dass alles zurückgesetzt
>wird (alle Variablen die gesetzt waren sind auf ihre standardwerte
>zurückgesetzt wurden)!

Das passiert unter "C" sowohl bei einem echten RESET, als auch bei einem 
"Durchlauf" durch den Flash, welcher von einem Stackoverflow oder einer 
unsauber beendeten Routine ausgelöst werden kann.

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.