Forum: Mikrocontroller und Digitale Elektronik AVR-Studio Simulation/Debugging springt nicht in ISR


von Lars M. (larsmie)


Angehängte Dateien:

Lesenswert?

Hallo leute,

ich habe bei derr Simulation im AVR-Studio bemerkt, dass mein Programm 
nicht in die ISR(TIM0_OVF_vect) springt.

Ich gehe das Programm in der Simulation Schritt für Schritt durch, 
eigentlich sollte nach 854us ein Timer-Overflow stattfinden, welcher 
dann die Routine auslöst.

Globale und Timer-Interrupts sind aktiviert.


Vielleicht habe ich ja beim Counter-Prescaler was falsch gemacht.


Kann sich vielleicht das mal jemand anschauen und mir sagen, was da 
nicht i.o. ist?

Das Programm ist komplett Kommentiert, da es für ein Schulprojekt ist. 
Falls eine unkommentierte (übersichtlichere) Version besser ist, werde 
ich diese nachträglich hochladen.


P.s.: da fehlt noch eine Funktion zum wechseln der Unterprogramme, 
deswegen habe ich die programmvariable fest auf Programm 2 eingestellt. 
Also nicht wundern :)

Danke schonmal!

: Bearbeitet durch User
von Lars M. (larsmie)


Lesenswert?

Vielleicht kann mir ja einer sagen, wie ich mir den aktuellen 
Zählerstand des Zählers anzeigen lassen kann während der Simulation.

von c-hater (Gast)


Lesenswert?

Lars M. schrieb:

> ich habe bei derr Simulation im AVR-Studio bemerkt, dass mein Programm
> nicht in die ISR(TIM0_OVF_vect) springt.

Wahrscheinlich falsch. Du hast wahrscheinlich nur bemerkt, daß du beim 
Debuggen nicht in die ISR gelangst...

Dieses Problem wurde hier schon gefühlte 10.000 Mal erörtert. Das liegt 
einfach daran, dass die Standardeinstellung des Debuggers des 
AVR-Studios den Eintritt in ISRs unterdrückt.

Zum Glück kann man diese Einstellung ändern. Also tue das bitte 
einfach...

von Lars M. (larsmie)


Lesenswert?

Okay, habe aber denke ich mal auch einen Denkfehler in der 
Programmierung vom Timer-Takt!



Der Counter-Prescaler gibt doch den Takt vor, in dem der Zähler um 1 
erhöht wird, sehe ich das richtig?

Was heißen soll, bei prescaler = 8 wird der Zähler alle 8 CPU-Takte um 1 
inkrementiert.

Demnach sollte dann der Overflow erst nach 256*854us auftreten.



Dann habe ich nämlich falsch gedacht (Dachte der overflow tritt dann 
alle 854us auf)

Edit: bei mir ist der prescaler auf 1024 gestellt, aber vom gedanken her 
verhält sich der Zähler ja genauso)


Habe jetzt im AVR-Sturdio "Mask interrupts" auf false gestellt und werde 
jetzt nochmal den zähler umrechnen und testen

: Bearbeitet durch User
von Bastler (Gast)


Lesenswert?

Setz doch einfach einen Break-Point in die ISR und lass das Ding rennen. 
Ob er dann n oder m Takte braucht, was soll's. Es geht ja erstmal drum 
die ISR zu erreichen.

von Lars M. (larsmie)


Lesenswert?

Okay, scheint zu klappen, wenn ich im Disassembly Fenster nen Breakpoint 
innerhalb der ISR setze bleibts da stehen.

Dann sieht man die Stelle auch im Code-Fenster.

Warum kann man die Breakpoints nicht im Code-Fenster setzen?!


Soweit so gut :)



Das mit den Zählern war denk ich mal richtig so wie ich das beschrieben 
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.