mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik externen interrupt simulieren


Autor: Achim Pross (arrgee)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Achim Pross (arrgee)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Pross (arrgee)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.