Problem med avstudsning

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
gvs
EF Sponsor
Inlägg: 1688
Blev medlem: 18 oktober 2003, 14:20:34
Ort: Göteborg
Kontakt:

Problem med avstudsning

Inlägg av gvs »

Håller på med en tangentbords emulator och ska just scanna ingångarna på picen för att se vilken knapp man trycker ner. då måste det avstudsas...
har tänkt så här:
har en 7x7 matris så de 7 kolumnerna är kopplade till utgångar som bara kan vara låga en i taget, när kolumn 1 är låg så kollar jag alla ingångar så här:
MOVLW H'FD' ; Set column 1 active ie. set it low
MOVF PORTB,F
CALL DELAY_1ms ; wait 1 ms let pins stabilize
BTFSS PORTC,1
RETLW H'01'
BTFSS PORTC,2
RETLW H'02'
BTFSS PORTC,3
RETLW H'10'
BTFSS PORTC,4
RETLW H'1E'
BTFSS PORTC,5
GOTO RETURN_WINKEY
BTFSS PORTC,6
RETLW H'26'
BTFSS PORTC,7
RETLW H'09'

Som ni ser så svarar den med ett hexvärde, som sen skickas till ps/2-porten. problemet är var jag ska avstudsa...
det går nog inte att göra innan jag sätter kolumnen utan jag tror att det måste göras efter den är satt men innan jag kollar ingångarna eller så gör jag så att jag kollar ingången väntar ett tag kollar igen, är den lågdå oxå så kör jag på. (kör med weak pullup)

förslag?

edit: Lite fel på portarna....
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

jag brukar (av)studsa genom att kolla om den aktuella ingången förändrats efter ett visst antal programcykler. Om den förblir nedtryckt under det valda förloppet är knapptryckningen gokänd, om inte så ignorerar den. Likaså gäller för release, men det är nog lätt fixat att den bara kollar på trigger.

(trigger = knapptryck
release = inte längre knapptryck)
gvs
EF Sponsor
Inlägg: 1688
Blev medlem: 18 oktober 2003, 14:20:34
Ort: Göteborg
Kontakt:

Inlägg av gvs »

jo har nog oxå funderat på det, grejen är att det blir så krånglig kod då. eftersom jag bara har en instruktion på mig, det skulle ju bli massa hopp isf typ:

BTFSS PORTB,1
GOTO KNAPP_ETT
BTFSS PORTB,2
..
..
..

KNAPP_ETT
CALL DELAY_1ms
BTFSS PORTB,1
RETLW H'01'
RETURN
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Ett annat alternativ är ju att anropa hela din scanna-tangentbords-rutin två gånger med ett par millisekunders paus emellan och sedan kolla om du fått samma värde returnerat båda gångerna. Är det samma värde så har du en äkta tryckning eller släppning, om olika så är det bara att ignorera.
gvs
EF Sponsor
Inlägg: 1688
Blev medlem: 18 oktober 2003, 14:20:34
Ort: Göteborg
Kontakt:

Inlägg av gvs »

Hade jag inte tänkt på, men det verkar ju riktigt smart! tackar....
Skriv svar