- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: Interrupt Routine

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Es muß RETI sein. Sonst wird das Global Interrupt Enable Bit in SREG nicht mehr gesetzt, daß ja zur Ausführung der ISR vom µC gelöscht wurde. Effekt: Interrupt tritt nur einmal auf und dann nicht mehr.

    Zitat Zitat von Saturas077 Beitrag anzeigen
    Trotz deiner Anmerkungen keine Funktion. :/
    Keine Funktion (Invertieren der Bits im PORTB?) im Simulator? Woran erkennst Du das? Keine Funktion im Atmega (LEDs, Oszilloskop). Liegts am Simulator (kann ich selbst nicht testen)?

    Mit welchem Takt läuft der Atmega? Bei Vorteiler 1 würde eine LED schon irre schnell blinken, so daß man das nicht sehen kann.

    Diese Zeile hier "ldi r16, 0x01 ; setze Pin 1 als High." ist irreführend kommentiert. Damit wird Bit 0 in r16 gesetzt. Später in der ISR wird damit PB0 getoggelt (mal abgesehen davon, daß auch alle anderen PBs in der ISR getoggelt werden.)

    Beschreib genau was Du wie erwartest und wo (Simulator, in der Schaltung, ...) und was da nicht geht.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    Ich habe gehofft, dass wenn der Interrupt auslöst die Pins an Port B alle einen High-Pegel bekommen bis auf der Pin0. Sobald dann die Hauptschleife anläuft soll wieder nur Pin 0 leuchten.

    Das Bild zeigt wie es im Simulator aussieht:
    Klicke auf die Grafik für eine größere Ansicht

Name:	Simulator.jpg
Hits:	5
Größe:	23,9 KB
ID:	28050
    Auf dem Bild siehst du auch die Taktrate von 8Mhz, statt 1 Mhz

    Es wird durch das Programm alles gesetzt wie im Zitat am Anfang des Threades beschrieben.
    Er springt aber einfach nicht in die Interrupt Routine, deshalb wird auch der Code nicht ausgelöst

    E: Was mir noch auffällt, das der Programm Counter bei der Adresse 13 bei main ankommt.
    Im Speicher steht : 0x0000 dann kommt direkt 0x0013.

    Kurz Offtopic, wieso stehen die Zahlen in 0x0013? Wäre das nicht 0x0D?
    Geändert von Saturas077 (23.04.2014 um 09:50 Uhr)

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Zitat Zitat von Saturas077 Beitrag anzeigen
    Ich habe gehofft, dass wenn der Interrupt auslöst die Pins an Port B alle einen High-Pegel bekommen bis auf der Pin0. Sobald dann die Hauptschleife anläuft soll wieder nur Pin 0 leuchten.
    Ich denke, daß das Programm zuerst die Hauptschleife erreicht, bevor der erste Interrupt auftritt - der Timer0 muß ja erstmal bis 255 hochlaufen nachdem er mit dem CS00 Bit gestartet wurde. (Könnte in einer Simulation schon einiges dauern)

    Tritt dann der erste Interrupt auf, wird PB0 auf high (1) gelegt und r16 invertiert. Beim zweiten Interrupt wird dann PB0 auf low (0) gesetzt. usw.

    Im Programmablauf sehe ich keinen Grund, warum der PB0 nicht toggeln sollte (wenn RETI am Ende der ISR steht) und das rjmp Interrupt auch auf dem OVF0 Interruptvektor steht - also die syntax auch vom übrigen Code paßt.

    E: Was mir noch auffällt, das der Programm Counter bei der Adresse 13 bei main ankommt.
    Im Speicher steht : 0x0000 dann kommt direkt 0x0013.

    Kurz Offtopic, wieso stehen die Zahlen in 0x0013? Wäre das nicht 0x0D?
    Der Programmcounter umfasst 2 Byte! - Könnte es das sein? Wie gesagt kann ich das leider nicht nachtesten.

    Ich vermute eventuell einen Simulator Bug oder Einstellung wie zB:
    http://www.mikrocontroller.net/topic/292982

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    Danke für deine Bestätigung, das der Code eigentlich funktionieren sollte.
    Genau das beschriebene Phänomen aus deinem Link habe ich "manchmal" auch.
    Ich habe mein MK II geschrottet, kann mir als Student diesen Monat keinen neuen Leisten, werde es also erst im Mai an einem AVR ausprobieren können.
    Danke für deine Hilfe.

Ähnliche Themen

  1. Tastaturabfrage innerhalb der Interrupt Service Routine
    Von Sven2013 im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 16.03.2013, 19:51
  2. Programm verlässt Interrupt-Routine nicht
    Von Björn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 15.11.2008, 11:06
  3. Interrupt Routine
    Von luvat im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 4
    Letzter Beitrag: 16.03.2008, 20:54
  4. Interrupt in ISR-Routine freigeben
    Von dj5am im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 10.08.2007, 08:44
  5. uart interrupt routine
    Von Computerkora im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 25.11.2006, 13:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress