Controllo tastiera 16 tasti

Aperto da Santo iw9hlk, 25 Luglio 2011, 23:55:07

Discussione precedente - Discussione successiva

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

Santo iw9hlk

Ciao a tutti, vi scrivo sotto una routine per il controllo di una tastiera a 16 tasti.

   #define b0 PORTB,0   ;prima definisco gli 8 bit della tastiera
   #define b1 PORTB,1   ;
   #define b2 PORTB,2   ;
   #define b3 PORTB,3   ;
   #define b4 PORTB,4   ;
   #define b5 PORTB,5   ;
   #define b6 PORTB,6
   #define b7 PORTB,7





                bcf      b0           ;azzera i primi 4 bit della porta B
      bcf      b1
      bcf      b2
      bcf      b3   
   
      bsf    b0         ; mette a 1 (positivo) il primo bit della porta B
      
      btfsc   b4                     ; inizia il controllo dei 4 bit finali della porta B
      goto    b4a         ;
      btfsc   b5
      goto   b5a         ;
      btfsc   b6
      goto   b6a
      btfsc   b7
      goto   b7a
      bcf    b0              ;azzera la porta B
      
      
      bsf   b1           ;mette a 1 (positivo) il secondo bit della porta B
      btfsc   b4
      goto   b4b         
      btfsc   b5
      goto   b5b         
      btfsc   b6
      goto   b6b
      btfsc   b7
      goto   b7b
      bcf    b1
      
      
      bsf   b2
      btfsc   b4
      goto   b4c         
      btfsc   b5
      goto   b5c         
      btfsc   b6
      goto   b6c
      btfsc   b7
      goto   b7c
      bcf    b2
      
      
      bsf   b3
      btfsc   b4
      goto   b4d         
      btfsc   b5
      goto   b5d         
      btfsc   b6
      goto   b6d
      btfsc   b7
      goto   b7d
      bcf    b3
      
Mi sono scordato di fare lo schema elettrico della tastiera e del collegamento
      
Nulla è per caso


scienziato

Citazione di: Santo il 25 Luglio 2011, 23:55:07
Ciao a tutti, vi scrivo sotto una routine per il controllo di una tastiera a 16 tasti.

   #define b0 PORTB,0   ;prima definisco gli 8 bit della tastiera
   #define b1 PORTB,1   ;
   #define b2 PORTB,2   ;
   #define b3 PORTB,3   ;
   #define b4 PORTB,4   ;
   #define b5 PORTB,5   ;
   #define b6 PORTB,6
   #define b7 PORTB,7





                bcf      b0           ;azzera i primi 4 bit della porta B
      bcf      b1
      bcf      b2
      bcf      b3   
   
      bsf    b0         ; mette a 1 (positivo) il primo bit della porta B
      
      btfsc   b4                     ; inizia il controllo dei 4 bit finali della porta B
      goto    b4a         ;
      btfsc   b5
      goto   b5a         ;
      btfsc   b6
      goto   b6a
      btfsc   b7
      goto   b7a
      bcf    b0              ;azzera la porta B
      
      
      bsf   b1           ;mette a 1 (positivo) il secondo bit della porta B
      btfsc   b4
      goto   b4b         
      btfsc   b5
      goto   b5b         
      btfsc   b6
      goto   b6b
      btfsc   b7
      goto   b7b
      bcf    b1
      
      
      bsf   b2
      btfsc   b4
      goto   b4c         
      btfsc   b5
      goto   b5c         
      btfsc   b6
      goto   b6c
      btfsc   b7
      goto   b7c
      bcf    b2
      
      
      bsf   b3
      btfsc   b4
      goto   b4d         
      btfsc   b5
      goto   b5d         
      btfsc   b6
      goto   b6d
      btfsc   b7
      goto   b7d
      bcf    b3
      
Mi sono scordato di fare lo schema elettrico della tastiera e del collegamento
      
ciao santo ottimo ma funziona anche con la tastiera con numeri da 1 a 9 e asterisco e cancelletto ?? io ho questa ma senza le lettere !
Yaesu ft 1000MP YAGI 7 ELEMENTI 10-15-10 FULL SIZE , 3 el 50 mhz home made, yaesu ft817, yaesu ft100d Kenwood ts140
dipoli 40-80 full size amplificatore fl2100b
YAGI 9 +9  ELEMENTI VHF- 9+19 V-UHF PER SAT

Lino

Citazione di: scienziato il 26 Luglio 2011, 02:04:58
Citazione di: Santo il 25 Luglio 2011, 23:55:07
Ciao a tutti, vi scrivo sotto una routine per il controllo di una tastiera a 16 tasti.

   #define b0 PORTB,0   ;prima definisco gli 8 bit della tastiera
   #define b1 PORTB,1   ;
   #define b2 PORTB,2   ;
   #define b3 PORTB,3   ;
   #define b4 PORTB,4   ;
   #define b5 PORTB,5   ;
   #define b6 PORTB,6
   #define b7 PORTB,7





                bcf      b0           ;azzera i primi 4 bit della porta B
      bcf      b1
      bcf      b2
      bcf      b3   
   
      bsf    b0         ; mette a 1 (positivo) il primo bit della porta B
      
      btfsc   b4                     ; inizia il controllo dei 4 bit finali della porta B
      goto    b4a         ;
      btfsc   b5
      goto   b5a         ;
      btfsc   b6
      goto   b6a
      btfsc   b7
      goto   b7a
      bcf    b0              ;azzera la porta B
      
      
      bsf   b1           ;mette a 1 (positivo) il secondo bit della porta B
      btfsc   b4
      goto   b4b         
      btfsc   b5
      goto   b5b         
      btfsc   b6
      goto   b6b
      btfsc   b7
      goto   b7b
      bcf    b1
      
      
      bsf   b2
      btfsc   b4
      goto   b4c         
      btfsc   b5
      goto   b5c         
      btfsc   b6
      goto   b6c
      btfsc   b7
      goto   b7c
      bcf    b2
      
      
      bsf   b3
      btfsc   b4
      goto   b4d         
      btfsc   b5
      goto   b5d         
      btfsc   b6
      goto   b6d
      btfsc   b7
      goto   b7d
      bcf    b3
      
Mi sono scordato di fare lo schema elettrico della tastiera e del collegamento
      
ciao santo ottimo ma funziona anche con la tastiera con numeri da 1 a 9 e asterisco e cancelletto ?? io ho questa ma senza le lettere !


Funziona ugualmente anche con la tastiera 4x3; volendo puoi eliminare le righe di controllo del PORTB,7.

Santo iw9hlk

Esempio nel mio caso:

ora cerco di fare lo schema...
Nulla è per caso


Santo iw9hlk

Ecco fatto, se non si capisce domandate...

Nulla è per caso

Santo iw9hlk

Ciao a tutti, in questo sistema di tastiera ho riscontrato che a 4Mhz funziona bene ma a 20Mhz non riesce a leggere il segnale della porta che va in positivo, cioè la porta che commuta il positivo è così veloce che quella che dovrebbe leggere il cambiamento di stato da 0 a 1 (5volt) non percepisce i 5volt. Infatti se prendo un ponticello e metto a positivo la porta del controllo funziona ma se viene gestita da un'altra porta del pic no, anche se ho controllato che con il tester c'è una variazione di volt nella porta ma vuol dire che non basta.
Nulla è per caso


Lino

Citazione di: Santo il 24 Dicembre 2011, 18:47:28
Ciao a tutti, in questo sistema di tastiera ho riscontrato che a 4Mhz funziona bene ma a 20Mhz non riesce a leggere il segnale della porta che va in positivo, cioè la porta che commuta il positivo è così veloce che quella che dovrebbe leggere il cambiamento di stato da 0 a 1 (5volt) non percepisce i 5volt. Infatti se prendo un ponticello e metto a positivo la porta del controllo funziona ma se viene gestita da un'altra porta del pic no, anche se ho controllato che con il tester c'è una variazione di volt nella porta ma vuol dire che non basta.


Ciao Santo e Buon Natale.

Potrebbe essere un problema di tempistica, cerco di spiegarmi.

Considerato che la porta viene "alimentata" tramite un resistore serie, comunque ci vorrà, anche se minimo, un certo tempo t per raggiungere il livello "alto" che dovresti poi leggere.
Ti suggerisco di inserire un ritardo di alcuni cicli tra l'istruzione per settare la riga e la routine di lettura delle colonne; non mi sembra che ci debbano essere altre cause che ti creano il problema.

Ciao, Lino


Santo iw9hlk

Buon Natale a Te e a Tutti gli Utenti, si ho provato a ritardare ma non va, ho messo così tanto ritardi che non mi funzionava più il display, poi mi è venuta una idea, cioè che se invertivo la polarità essendo che non doveva aspettare il fronte di salita ma bensi azzerarlo poteva funzionare... fortunatamente la mia teoria ha funzionato, ho messo le porte a positivo (stato logico 1) poi ne mettevo uno a negativo e qulle del controllo messe con una resistenza da 10k a positivo, così quando promo il pulsante della tastiera diventa negativo. Non so se sono stato chiaro, ma funziona  :birra:
Nulla è per caso

Lino