Forum: Mikrocontroller und Digitale Elektronik Kleine Frage zu Absturz


von Pete K. (pete77)


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

von Hmm... (Gast)


Lesenswert?

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

von Pete K. (pete77)


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.

von Hmm... (Gast)


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. ;)

von Pete K. (pete77)


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.

von Hmm... (Gast)


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-Tutorial#Der_Watchdog

Was genau wird den gemessen?

von holger (Gast)


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).

von Pete K. (pete77)


Lesenswert?

Gemessen wird die Temperatur mit ein paar DS1820.

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

von Peter D. (peda)


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

von Läubi .. (laeubi) Benutzerseite


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.

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.