www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kleine Frage zu Absturz


Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

da mein Projekt (Datalogger mit SD-Karte) so nach ca. 6 Stunden abstürzt 
wollte ich mal fragen, ob es notwendig oder sinnvoll ist, 100 Ohm 
Widerstände in die Signalwege einzubauen.

Kondensatoren habe ich IMHO genug spendiert, es findet auch kein Reset 
statt, sondern der µC bleibt einfach "hängen".

Ich habe die SD-Karte z.B. direkt mit dem SPI verbunden, SD_Karte hat 
100nF bekommen.

Viele Grüße,
Pete

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du denn einen Software-Fehler ausschliessen?
Wird der Watchdog benutzt?
Ist die Versorgungsspannung sauber? (-> Schaltplan)

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spannung ist sauber, Watchdog wird nicht benutzt.

Und Softwarefehler ... ich glaube, die kann man nie ausschließen.

Ist nur komisch, dass das ganze erst nach 6 Stunden (mal mehr, mal 
weniger) ausfällt. D.h. 6 Stunden lang funktioniert die Software 
einwandfrei. Flash vom M32 ist zu 60% gefüllt, Ram zu 80% (sagt 
AVR-Studio).

Aktuellen Schaltplan habe ich nicht, da ich von 5V auf 3,3V umgestiegen 
bin und die SD-Karte per 5cm Litze an den ISP-Stecker angelötet habe.

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, kann schon sein das du unter manchen Betriebsbedingungen mehr Stack 
brauchst als unter anderen und der dann irgendwann zufällig voll ist. 
Bei
80% Ram-Bedarf ist dann nicht mehr viel Platz auf dem Stack für z.B. 
große lokale Variablen oder rekursiv aufgerufene Funktionen.

Gibt es denn einen Prozess, der nach 6h zum ersten mal aufgerufen wird?

Möglichkeiten gibt es da viele....

Achja, wieso verwendest du keinen Watchdog? Dann läuft deine Anwendung 
zwar nicht stabiler, aber sie fängt sich zumindest schnell wieder 
anstatt auf ewig fest zu hängen. ;)

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne mich mit Watchdog nicht aus, bzw. habe so etwas noch nicht 
verwendet.

Es gibt auch keinen Prozeß, der nach 6 Stunden das erste Mal aufgerufen 
wird. Es werden alle 3 Sekunden Meßwerte (40 Bytes) auf die Karte (32MB) 
geschrieben.

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Watchdog ist ein Timer, der den Controller vollständig resetet, wenn 
er Null erreicht. Deshalb muss deine Anwendung ihn regelmässig auf einen 
bestimmten Wert setzen um zu verhindern das er abläuft.

"Frisst" sich deine Anwendung nun irgendwo fest, sorgt der Watchdog für 
einen sauberen Reboot.

siehe auch 
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Was genau wird den gemessen?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Was genau wird den gemessen?

Ist doch eigentlich Wurst ;)
Interessanter wäre welcher uC, und SD Karte
mit FAT oder nicht? Falls FAT wird das Dateisystem
im Kartenleser nach dem Crash noch erkannt?

Fragen über Fragen...

Wenn ein uC mit 1k RAM verwendet wurde könnte
man mal versuchen einen pingleichen mit 2k RAM
einzusetzen (wenns einen gibt).

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gemessen wird die Temperatur mit ein paar DS1820.

Den Watchdog werde ich mal implementieren. Klingt gar nicht so schlecht 
:-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm... wrote:
> Achja, wieso verwendest du keinen Watchdog?

Weil das die völlig falsche Methode wäre, einen Fehler zu finden.

Ein Watchdog behebt den Fehler nicht, sondern kaschiert ihn.
Er wird in jedem Fall eine Fehlfunktion bewirken, wenn er auslöst.
Z.B. der Datenlogger wird Records verlieren oder ungültige Records 
abspeichern oder im Worst-case sogar das Filesystem zerstören.


Solange die Software auf dem Entwicklertisch liegt, gehört ein Watchdog 
immer ausgeschaltet!
Erst nach Abschluß der Entwicklung wird der Watchdog eingebaut und 
getestet.


Den Fehler muß man also mit Überlegung suchen. Z.B. sollte man erstmal 
feststellen wie weit der MC hängen bleibt. Man kann in einem 
Timerinterrupt ein LED blinken lassen. Blinkt diese beim Hängenbleiben, 
dann ist irgendwo in der Mainloop ne falsche Bedingung (z.B. fehlender 
Default-Zweig) drin. Dann kann man in dem Blinkinterrupt einen Taster 
abfragen, um nen RAM-Dump ausgeben zu lassen und den Stackpointer. Damit 
weiß man, wo der MC hängt.

Bei nem Watchdogreset werden dagegen Stack und PC resettet und man weiß 
garnichts.


Peter

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Pete

Nuzt du C? Oder ASM?

Bei ASM: Ich hab mir als ich neu eingestiegen bin die "lustigsten" 
Fehler dadurch eingefangen, das ich das SREG im Interrupt nicht 
gesichert habe.

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.