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
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 !
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.
Esempio nel mio caso:
(http://s1.postimage.org/1fds0wbic/P2010032.jpg) (http://postimage.org/image/1fds0wbic/)
ora cerco di fare lo schema...
Ecco fatto, se non si capisce domandate...
(http://s1.postimage.org/1hlpo06ro/tasti.jpg) (http://postimage.org/image/1hlpo06ro/)
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.
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
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:
Tutto chiaro :up: