PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Int0 & Int1 machen gleichzeitig probleme



BlaueLed
26.11.2007, 22:17
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.



'--- 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

CsT
26.11.2007, 22:31
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

Vitis
26.11.2007, 23:04
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.

BlaueLed
26.11.2007, 23:31
dann werde ich das ganze morgen abend ohne waitms probieren. Ist eigentlich logisch. Vielen Dank für die Hilfe

mfg Kay

BlaueLed
27.11.2007, 12:00
hab das jetzt mal ausprobiert. so wie es aussieht scheint es zu klappen.
danke

mfg Kay