Hallo
Ich arbeite zur Zeit an einem Projekt, in dem ich die beiden Interrupts des ATmega32 benutze, um ein Programm durch zu schalten. Ich habe die beiden Taster mit einem Pull-down widerstand An die Pins D2 und D3 angeschlossen und in meinem Bascom Programm beide Interrupts eingeschaltet und Konfiguriert. Jetzt habe ich jedoch das Problem, dass die Interrupt die ganze zeit ausgelößt werden, das heißt er zählt die Programme ständig durch, obwohl an den Pins 0V anliegen. Durch das Betätigen der Taster lässt sich das auch nicht stoppen. An den Pins D4, D6 und D6 habe ich ebenfalls Taster mit einem Pull-Down widerstand angeschlossen, mit denen kann ich aber nur was erreichen, wenn ich den Interrupt ausgeschaltet habe. Und die Funktionieren ganz normal. Mit einem zweiten ATmega32 habe ich das Programm auch schon getestet, mit dem selben Ergebnis.
Hier sind nochmal alle relevanten teile aus meinem Code:
$regfile = "m32DEF.dat" 'es handelt sich um einen ATmega32
$crystal = 16000000 'der eingebauter RC-Oszillator läuft mit 16 Mhz
$hwstack = 32 'im Speicher werden für den Hardware-Stack 32 Byte reserviert
$swstack = 32 'im Speicher werden für den Software-Stack 32 Byte reserviert
$framesize = 40
$baud = 9600
'Interrupt Konfigurieren
Config Int0 = rising
Config Int1 = rising
Enable Interrupts
Enable Int0 'enable interrupt0
Enable Int1 'enable interrupt1
On Int0 Prgup 'Nächstes Programm
On Int1 Prgdwn
Do
'Hauptprogramm
Loop
'Interrupt Routinen
Prgup:
Incr Programm
Cls
Locate 1 , 1
Lcd "Interrupt 1 Taster"
Locate 2 , 1
Lcd "P: " ; Programm
Waitms 500
Return
Prgdwn:
Decr Programm
Cls
Locate 1 , 1
Lcd "Interrupt 2 Taster"
Locate 2 , 1
Lcd "P: " ; Programm
Waitms 500
Return
Alles anzeigen
Edit: habe die Zeilen Config Int0 und Config Int1 hinzugefügt. Jetzt zählt er aber jeden Tasterdruck 2mal.