-         

Ergebnis 1 bis 5 von 5

Thema: Int0 & Int1 machen gleichzeitig probleme

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318

    Int0 & Int1 machen gleichzeitig probleme

    Anzeige

    Hallo,

    ich benutze einen Sync-Stripper um aus einem Videosignal den Horizontal- und Vertikalsynchronimpuls zu generieren. Als Controller habe ich den mega168 mit 20 Mhz Quarzoszillator. Den Horizontalimpuls habe ich an Int0 und den Vertikalimpuls an Int1 angeschlossen. Die Interrupts sind auf Falling eingestellt. Ich möchte erreichen, das 2 led´s getoggelt werden. Folgendes Programm funktioniert zwar, aber nur, wenn ich einen von beiden Interrupts Disable. Dann geht der jeweilige andere.

    Code:
    '--- Chipdefiniton ---
    $regfile = "m168def.dat"
    $crystal = 20000000
    $hwstack = 64
    $swstack = 32
    $framesize = 24
    
    '--- Portdefinition ---
    Config Portb = Output
    
    '--- Interrupt ---
    Config Int0 = Falling
    Config Int1 = Falling
    Enable Int0
    Enable Int1
    Enable Interrupts
    On Int0 Onhorizontal
    On Int1 Onvertikal
    '--- Alias ---
    Led_hor Alias Portb.0
    Led_ver Alias Portb.1
    '--- Boot ---
    Led_hor = 0
    Led_ver = 0
    
    '--- Hauptprogramm ---
    Main:
    nop
    Goto Main
    
    '--- Horizontal Interrupt ---
    Onhorizontal:
    Toggle Led_hor
    Waitms 300
    Toggle Led_hor
    Waitms 300
    Return
    
    '--- Vertikal Interrupt ---
    Onvertikal:
    Toggle Led_ver
    Waitms 300
    Toggle Led_ver
    Waitms 300
    Return
    Kann ich denn überhaupt beide Interrupts "gleichzeitig" enablen ? Wenn ja, warum funktioniert dann mein Programm nicht ? wäre nett, wenn jemand helfen könnte. Danke

    mfg Kay

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    24.09.2006
    Beiträge
    84
    Die Waitms blockieren quasi deinen Programmablauf. Das heißt, du musst das togglen anders bewerkstelligen, z.B. mittels eines Timer-Interrupts.

    In deinem Int0/Int1-Interrupt setzt du dann also jeweils eine Variable und auf diese Variablenänderung musst du dann im Timerinterrupt reagieren.

    Hoffe, ich habe mich einigermaßen verständlich ausgedrückt, ist schon spät für mich heute ..

    Grüße CsT

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    also, wenn ein Int ausgelöst wird springt der µC in die
    Interruptserviceroutine, die Du angibst.
    So lange diese abgearbeitet wir wird keine neue
    Interruptroutine gestartet. Mit waitms darin hast Du dir
    selbst ne Bremse eingebaut.
    Waits haben in ISRs nix verloren.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    dann werde ich das ganze morgen abend ohne waitms probieren. Ist eigentlich logisch. Vielen Dank für die Hilfe

    mfg Kay

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    hab das jetzt mal ausprobiert. so wie es aussieht scheint es zu klappen.
    danke

    mfg Kay

Berechtigungen

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