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
Sind die Fusebits bei allen AVRs gleich gesetzt (vor allem die CKOPT falls ein externer Quarz dran hängt)?
>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.
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
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.
>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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.