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
Vielleicht kann mir ja einer sagen, wie ich mir den aktuellen Zählerstand des Zählers anzeigen lassen kann während der Simulation.
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...
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.