- Labornetzteil AliExpress         
Ergebnis 1 bis 4 von 4

Thema: Verständnisprobleme über die Funktionsweise eines Interrupts

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.05.2005
    Beiträge
    13

    Verständnisprobleme über die Funktionsweise eines Interrupts

    Anzeige

    Powerstation Test
    Hallo,

    ich programmiere gerade eine Motorsteuerung mit Bascom und der RN-Control at mega32.

    Ich habe dabei u.a. eine Lichtschranke an den INT2 angeschlossen, die eine Rückwährtsfahrt durch Auslösen der entsprechenden Interruptroutine beenden soll.

    Im Laufe des Programms enablen und disablen wir den Interrupt, je nachdem ob eine Rückwärts oder Vorwährtsfahrt ansteht.
    Während der Phase, in der der Int2 disabled ist, arbeitet die Lichtschranke natürlich weiter und gibt Signale an den Port weiter, nur daß diese keine Interruptroutine auslösen (so weit so gut)

    Das Problem, ist nur, daß sobald wir den Int2 wieder enablen (Enable Int2), löst er auch sofort aus, obwohl die Lichtschranke gar nichts von sich gibt (passiert auch im stehenden Zustand).

    Wird eine Interruptauslösung irgendwo zwischengespeichert obwohl der Interrupt diasabled ist ? Ist das normal und ich muß das irgendwie programmiertechnisch umgehen oder versteh ich da irgendetwas komplett falsch und es liegt nur an einer Einstellung?
    Ist das mit dem enablen und disablen des Interrupts überhaupt sinnvoll, oder empfiehlt sich eine solche Vorgehensweise aus irgendwelchen Gründen nicht?
    Stecke jetzt echt fest.

    Grüße
    Markus Fuchs

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    22.05.2005
    Beiträge
    13
    Ich check das einfach nicht. Ich habe das ganze jetzt mal isoliert und ein einfaches Programm geschrieben.

    Also wir haben die Lichtschranke, die bei Auslösung in der lichtschranke_isr einfach nur eine meldung per print plus einen Zaehler ausgibt.

    Das klappt auch ohne Probleme - sprich, wenn die Lichtschranke unterbrochen ist, dann kommt nix und wenn die Lichtschranke ununterbrochen ist, dann kommt die Meldung und ein Zaehler.

    Dann habe ich zwei Taster. Der eine schaltet den Int2 per "enable Int2" an und der andere per "disable Int2" aus.

    Ist der Int2 disabled kommt auch keine Meldung mehr.

    Wenn ich aber hingehe und während der Int2 disabled ist, die Lichschranke einmal auslöse und danach den Int2 irgendwann wieder enable, dann bekomme ich sofort die Meldung (d.h. der Interrupt wird ausgelöst) plus einen um eins erhöhten Zähler.
    Wie kann das sein????

    In dem Moment, wo ich den int2 wieder enable, wird doch an der Lichtschranke nichts ausgelöst. Als hätte er die Auslösung während er disabled war irgendwo gespeichert.

    Kann sich da jemand eine Reim drauf machen.

    Grüße
    Markus

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ja, da ist der AVR wie ein Elephant, merkt sich alles. Du muß VOR dem wieder-enablen das INT-Bit löschen, indem du "1" reinschreibst.
    Das register heißt GIFR ,
    Bit 5 Int2
    Bit 6 Int0
    Bit 7 Int1

    also GIFR.5 = 0 in deinem Fall
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    22.05.2005
    Beiträge
    13
    Aaahh, okay,

    das erklärt einiges. Besten dank. Das werde ich morgen gleich ausprobieren aber das wird bestimmt die Lösung sein.

    Grüße
    Markus Fuchs

Berechtigungen

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

Solar Speicher und Akkus Tests