Forum: Mikrocontroller und Digitale Elektronik externen interrupt simulieren


von Achim P. (arrgee)


Lesenswert?

Hallo,
ich möchte gerne einen externen Interrupt simulieren. Besser gesagt in 
der Simulation eine Interrupt-Routine ausführen. Habe schon einiges 
gelesen hier und dachte eigentlich es sollte gehen. Es passiert aber 
nichts.

Folgende Problemstellung:
Habe ein STK500 mit einem ATmega16. AVRStudio 4.14.
Bei einer steigenden Flanke an INT0 soll die Routine SIG_INTERRUPT0 
ausgeführt werden.
Das Kontrollregister MCUCR habe ich richtig eingestellt und auch den 
Interrupt freigegeben.
Wenn ich jetzt die Simulation laufen lasse läuft das Programm durch, 
ohne in die Routine zu springen.
Weis nicht ob ich es richtig verstanden habe, aber es müsste doch 
reichen, wenn ich einfach den PD2 (was hier INT0 ist) setze, oder??
Dann müsste das Programm in die Interrupt-Routine springen.

Oder geht das so mit einem STK500 nicht?

Danke für die Antworten!

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Simulierst Du nun oder läßt Du das Programm im Controller auf dem STK500 
laufen? Wenn es im Controller läuft, reicht es in der Tat, bei gesetztem 
DDRx Register den betreffenden Portpin zu setzen oder zu löschen, wenn 
ein Interrupt ausgelöst werden soll. Dies passiert natürlich nur, wenn 
der Interrupt auch freigegeben ist.

von Johannes M. (johnny-m)


Lesenswert?

Was hat das STK500 mit der Simulation zu tun?

Außerdem muss im Simulator afaik PINDx gesetzt/gelöscht werden.

Ist der Interrupt auch auf steigende Flanke konfiguriert? Abgesehen 
davon sind die Vektornamen mit SIG_XXXX veraltet (genau wie SIGNAL für 
den Interrupt Handler).

von Achim P. (arrgee)


Lesenswert?

Simulation hätte ich vielleicht nicht schreiben sollen. Ich gehe es halt 
im Debugging Schritt für Schritt durch.
Geht es da mit dem externen Interrupt?
Habe PIND2 gesetzt und für die Steigende Flanke habe ich wie im 
Datenblatt beschrieben ISC01 und ISC00 gesetzt. INT0 habe ich ebenfalls 
freigegeben.
Denke schon das es so richtig ist mit den Einstellungen.
Mir ist nur nicht klar ob es geht das zu debuggen.
Das mit den veralteten Namen ist doch noch egal, solange der Compiler 
die Befehle noch kennt, oder?

von Johannes M. (johnny-m)


Lesenswert?

Nur mit einem STK500 kann man nicht debuggen (bzw. eben nur in Software, 
und das nennt man Simulation...)! Simulation geht mit dem Simulator vom 
AVRStudio, der aber nichts mit dem STK500 zu tun hat, sondern eine reine 
Software-Simulation macht. In-System-Debugging geht nur mit einem 
JTAG-Adapter (Dragon, JTAGICE). Also, was genau hast Du und was machst 
Du?

von AVRFan (Gast)


Lesenswert?

>Mir ist nur nicht klar ob es geht das zu debuggen.

Ja, das geht. Der Simulator unterstützt eine ganze Menge, darunter auch 
externe Interrupts. Wäre ja auch doof, wenn nicht.

von AVRFan (Gast)


Lesenswert?

>Ich gehe es halt im Debugging Schritt für Schritt durch.

Genau.  Und wenn Du den Zustand von PD2 im PIND-I/O-Register per 
Mausklick von einem Schritt zum nächsten änderst, dann springt der 
Simulator nach dem Abarbeiten der nachfolgenden Instruktion (so ist es 
auch in echt) in den zugehörigen Handler des externen Interrupts.  Das 
i-Bit muss dazu natürlich gesetzt sein, sonst sind ja komplett alle 
Interrupts gesperrt.

von Achim P. (arrgee)


Lesenswert?

Ok, also ich simuliere!!
Komme immer noch nicht in die Interrupt-Routine.
Habe jetzt auch auf den neunen Vectornamen umgestellt.
Ist das so richtig?
ISR(INT0_vect)
Muss mir die Doku dazu nochmal genau durchlesen um die Syntax zu kennen.
Habe bis jetzt nur mit SIGNAL gearbeitet.
Dann wird mein Fehler wo anders liegen. Ich suche mal!
Danke aber für die Infos!

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.