Come da titolo, ho 4 display 7 segmenti connessi in multiplex, quindi i 4 catodi vengono attivati
ogni 2ms. Visto che sono 4 catodi cioè un nibble per semplificare scrivo cosa accade al nibble di seguito.
0001 durata 2ms
0010 durata 2ms
0100 durata 2ms
1000 durata 2ms
e si riparte daccapo no.
Il nibble viene scritto in uscita su un porta.
Tramite il circuito allegato ho connesso 4 pulsanti al 644A.
Kout va al pin PC2 posto come ingresso.
Mentre PWR, DWN, UP, e SET sono connessi ognuno al pin di comando del transistor npn a cui è connesso un catodo del digit.
Quindi in sostanza PC2 ha la pull-down è diventa HIGH quando un pulsante viene premuto sempre che il catodo sia acceso.
Per decodificare tutti è 4 tasti quindi devo salvare in un byte alla posizione del bit idx del catodo acceso la lettura da PC2.
idx con 4 catodi va da 0 a 3 e riparte da 0.
Ogni volta che idx == 3 metto il dato accumulato in buffer circolare non overwrited.
Questo lo faccio in una ISR che viene eseguita ogni 2ms, pertanto ogni 8ms ho un dato
da inserire nel buffer.
Fuori dalla isr ora mi serve gestire lo stream di tasti contenuto nel buffer.
Precedentemente ho usato un codice che anche se funziona non è mantenibile e ho notato che e anche più
lento del sistema con buffer key circolare e consume key. Tuttavia ancora non ho trovato una buona strategia
per gestire lo stream. I tasti possono essere premuti tutti insieme, possono essere premuti per x tempo o y tempo
e il codice eseguito di conseguenza sarà diverso. Quindi tutti i tasti multifunzione.
Avete qualche idea, strategia, o link per gestire questo stream.
PS: Il buffer è grande solo 5 tasti, potrebbe arrivare anche a 10 o 15, ma oltre finisce per avere effetto
di ritardo nell'uso, cioè se lasci il pulsante ci sono ancora dati nel buffer da processare.
PS2: lo so non è semplice.
Ciao.