Forum: Mikrocontroller und Digitale Elektronik ATMega 128 bleibt hängen??


von Patrick (Gast)


Lesenswert?

Hallo,

ich habe ein Problem mit einem ATMega128 AVR-Entwicklungsmodul mit dem 
ich mich schon mehrere Wochen rumschlage und keine Lösung finde. Das 
Modul wurde auch schon mal getauscht, was zwar das Problem irgendwie 
verändert hat aber weg ist es nicht.

Das Problem ist dass sich der uC nach einigen Stunden aufhängt. Ich hab 
daraufhin in die TimerISR eine LED Blinksequenz eingebaut um zu sehen ob 
der Timer immer läuft. Normal blinkt die LED im Sekundentakt, im Fehler 
Fall war sie aus oder hat sogar undefiniert geblinkt.

Da ich mit bekommen wollte ob ein Reset vorkommt habe ich beim 
Einschalten einen Zähler im EEProm hochgezählt und zusätzlich den WD 
aktiviert, dieser wird in der Hauptschleife alle 120ms zurückgesetzt. 
Aber trotz dem WD hängt sich das ganze auf??

Das seltsame an der Sache ist dass die Software auf dem STK501 als auch 
auf einem älteren teilweise gefädelten Board läuft?? Ich hab mir die 
Schaltung auf dem AVR Entwicklungsmodul angeschaut und konnte eigentlich 
keinen großen Unterschied zu meinem alten gefädelten Board finden, die 
relevanten Leitungen wie Reset usw. sind alle gleich, zudem ist auf den 
Boards ja auch nicht viel drauf. Auch gibts in der Errate des ATMega128 
keinen Hinweis, meine Vermutung ist noch das die uCs die ich auf dem 
STK501 sowie meinen alten Board betreibe einen älteren Datecode haben 
und sich zwischenzeitlich was verändert hat.

Hat jemand eine Idee wie ich das Sache auf den Grund gehen kann? Ich hab 
keine Ahnung was ich noch tun kann, das es an einem Programmfehler liegt 
kann ich eigentlich nicht mehr glauben das es auf zwei anderen uC läuft.

Gruss Patrick

von Benedikt K. (benedikt)


Lesenswert?

Sind die Fusebits bei allen AVRs gleich gesetzt (vor allem die CKOPT 
falls ein externer Quarz dran hängt)?

von Peter (Gast)


Lesenswert?

>sogar undefiniert geblinkt
wenn sie noch blinkt dann muss der µC ja noch laufen, kannst wirklich 
100% Softwarefehler ausschliessen?

z.b. Alle ISR definiert nicht das ein offener Input Pin ein Interrupt 
auslöst der mitten in den Code springt.

von Patrick (Gast)


Lesenswert?

Die Fuses sind gleich, das hab ich geprüft. Ein ISR Einsprung ohne 
Codedefinition? normal müsste dass dann auf meinem alten Fädelboard noch 
mehr
auffallen, da dort alle Pins in der Luft hängen, aber dort geht es.

Ich hab am PortB ein Display dran und zeige daran auch das Reset 
Register des uc an. Leider ist nie was zu sehen, zumindest das MCUCSR 
Register ist immer gleich, der Zähler erhöht sind, oder die Kiste bleibt 
komplett hängen.

Was mich sehr wundert ist das Verhalten der Timer ISR Routine die das 
LED binken lässt, wie gesagt blinkt die LED im Sekundentakt, nicht immer 
aber einmal konnte ich beobachten wie die LED undef. geblinkt hat. Was 
kann den uC dazu bewegen die Timer ISR Routine nicht mehr richtig 
abzuarbeiten? so müsste ja dadurch der Ladewert des Timer am Ende der 
Routine nicht richtig abgearbeitet werden?

Patrick

von Peter (Gast)


Lesenswert?

mach doch mal ein ganz kleinen Programm was nur die led blinken lässt 
und schau ob es dann auf auftritt.
Ich vermute immer noch Softwarefehler wenn z.b. Der Stack nicht mehr 
stimmt macht der µC ja weiter weil er den fehler nicht erkennen kann und 
dabei kann es natürlich auch passieren das er in dem Codeabschnitt der 
ISR landet ohne das der Interupt ausgelöst wurden ist.

von Auweia (Gast)


Lesenswert?

>normal müsste dass dann auf meinem alten Fädelboard noch
>mehr auffallen, da dort alle Pins in der Luft hängen, aber dort geht es.

Als Vermutung ist das sicherlich sinnvoll, aber eben nicht erschöpfend. 
(So hört sich das nach Chr. Morgenstern an ;-) Die Verhältnise auf dem 
dem Fädelboard können eben doch entscheidend anders sein. Da Du diese 
nicht erschöpfend vergleichen kannst, ist die SW eben doch der bessere 
Ansatzpunkt.

Du kannst doch einfach im Quellcode gucken, ob für die restlichen ISRs 
eine Routine definiert ist, bzw. wohin der Vektor zeigt. Und wenn Du 
schon dabei bist, eben eine kleine Routine schreiben die den ISR-Vektor 
irgendwohin speichert, von wo Du ihn nach dem Neustart ausgibst.

Vielleicht lohnt es sich, im Simulator mal zu gucken wie die andern 
Int-Quellen freigegeben sind. Manchmal verhaut man sich da beim 
Bit-Banging.

von Patrick (Gast)


Lesenswert?

den ISR-Vektor kann ich mal probieren im EEProm zu speichern. Wie kann 
ich rausfinden ob der Stack überläuft? ich hab das JTAG ICE MKII mit AVR 
Studio, gibts da ein Fenster dass den Stack zeigt?

aber wie gesagt es läuft auf dem Fädelboard als auch auf dem STK501 ohne 
Absturz mehrere Tage, auf dem AVR-Entwicklungsmodul nur mehrere Stunden.

Patrick

von Hubert G. (hubertg)


Lesenswert?

Wenn du einen SW-Fehler ausschließen kannst, wie sieht die 
Stromversorgung aus. Ist das Entwicklungsmodul gut genug abgeblockt. Was 
ist das für ein Modul?

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.