PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : debounce und interrupt kolision



magic33
06.04.2007, 13:05
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

Ratber
06.04.2007, 21:03
Nein Getkbd läst sich nicht auf weniger konfigurieren ,nur auf 6 oder 7 Reihen.

Ignorier in Getkbd einfach die Tasten dieser Reihe.

magic33
07.04.2007, 11:05
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

Ratber
07.04.2007, 11:51
......da das debounce dsignal mir den interrupt auslöst .......

Verstehe ich jetzt nicht.

Gib mal info wie du das Verschaltet hast.

Vitis
08.04.2007, 10:43
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.

magic33
09.04.2007, 12:16
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

albundy
09.04.2007, 14:03
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.