Archiv verlassen und diese Seite im Standarddesign anzeigen : debounce und interrupt kolision
servus leute
ich hab da ein problem mit dem 90S8515
auf dem portD ist die tastenmatrix mit KBD
es sind nur 7 ports belegt
den D.3 alias int1 würde ich gerne zum detecten eines externen interupts nutzen
problem getkbd debouncet ja alle 20ms den port
kann ich irgendwie den debounce auf dem nicht für kbd genutzten pin abschalten
mit ddrd=&B11111011 gehts nicht schon versucht
mit
disable int1
taste=getkbd()
enable int1
gehts auch nicht
der interrupt komt trotzdem
danke
irgendjemand ne idee
Nein Getkbd läst sich nicht auf weniger konfigurieren ,nur auf 6 oder 7 Reihen.
Ignorier in Getkbd einfach die Tasten dieser Reihe.
das hilft nicht weiter da das debounce dsignal mir den interrupt auslöst
werde wohl den port tauschen müssen
tasten an A und LCD an D dann sollte das problem gelöst sein
......da das debounce dsignal mir den interrupt auslöst .......
Verstehe ich jetzt nicht.
Gib mal info wie du das Verschaltet hast.
ich vermute er meint, das er per Debounce n Unterprogramm
anspringt. Der Unterschied zwischen Int und Sub ist nicht
jedem geläufig ;)
was er aber mit debounced mir alle x ms den Port meint erschließt
sich mir auch nicht.
und wie er den debounce abschalten will hängt mir auch zu hoch.
@magic33:
Empfehlung: Poste mal den Code, dann kann man Dir am effektivsten helfen.
code ist unwichtig
ich hab meinen portd mit einer 4x3 tasten matrix belegt
die über getkbd() abgefragt wird
diese interne bascom routine debounct den ganzen portd ist ja auch richtig
nun ist der d.3 der externe interrupt int1 am port noch frei NICHT mit TASTEN belegt
den würde ich gerne nutzen
Jedoch funzt das mit disable interupt
vor getKBD() und enable interrupt nach getKBD nicht
ich hab nun den externen int auf ein freien port an A gelegt und frag den
halt via timer interrupt ISR ab somit bin ich auch da wo ich hinwollte ohne internen Interrupt INT1
wollte nur wissen ob das möglich wäre die pins für interupt an portd zu nutzen wärend da die getkbd() subroutine läuft die alle 20ms den port debounced sind die interupts dann nutzlos da sich ja der portzustand ändert
vieleicht hatte ja das problem schon wer und konnte dafür eine lösung finden
MARK von Bascom hat die anregung aufgenommen und wird in einer zukünftigen version
wie bei LCD die benutzten pins bei getkbd als seperate config dem compiler übergeben
Danke
VORTEIL man kann eine 3x3 Tastatur nutzen ubnd hat die rest2Pins zur freien verfügung
bei 3x4 immerhin noch 1nen pin der kann entscheident sein
wollte nur wissen ob das möglich wäre die pins für interupt an portd zu nutzen wärend da die getkbd() subroutine läuft die alle 20ms den port debounced sind die interupts dann nutzlos da sich ja der portzustand ändert
ich verstehe zwar nicht, was debounce mit Getkbd() zu tun hat, aber warum benutzt du nicht eine eigene Function, um die Tasten abzufragen ?
Getkbd macht nichts anderes als diese Function ...
$regfile = "8515def.dat"
'dimension a variable that receives the value of the pressed key
Dim B As Byte
Declare Function Keyboard()as Byte
'loop for ever
Do
B = Keyboard()
'die Werte von B entsprechen denen von "Getkbd()"
Loop
Function Keyboard
Local K As Byte
K = 16 'keine Taste gedrückt
Portd = &B11110111 'außer Portd.3 alles auf High
Ddrd = &B00000111 'Portb.0,1,2 = Ausgang, der Rest Eingang
Portd = &B11110000 'Pullup aktivieren
Waitus 5 '5µs warten
If Pind.4 = 0 Then K = 0
If Pind.5 = 0 Then K = 4
If Pind.6 = 0 Then K = 8
If Pind.7 = 0 Then K = 12
Ddrd = &B11110000 'Portb.4,5,6,7 = Ausgang, der Rest Eingang
Portd = &B00000111 'Pullup aktivieren
Waitus 5 '5µs warten
If Pind.0 = 0 Then K = K + 0
If Pind.1 = 0 Then K = K + 1
If Pind.2 = 0 Then K = K + 2
Keyboard = K
End Function
Damit kann man dann jede Tastaturkombination benutzen.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.