Nella Dodicesima Parte della Guida si Parlerà del Keypad 4×4 e di come Leggere il Tasto Premuto con la Libreria di Mikroc…
INTRO
Il keypad 4×4 o tastierino può essere usato per inviare un numero in un microcontrollore. Esso consiste il sedici pulsanti connessi in forma di matrice, con 4 linee e 4 colonne. Vi sono anche versioni 3×4 in cui vi sono solo i numeri da 0 a 9 e i simboli * e #. Nella versione 4×4 oltre ai pulsanti citati prima vi sono le lettere A, B, C, D che rappresentano 4 cifre esadecimali. Questo tipo di keypad è molto sottile (2mm circa) e inoltre ha il retro adesivo, così da essere facile da montare in molte applicazioni.
Il modulo è così fatto:
CARATTERISTICHE E FUNZIONAMENTO
Esso funziona grazie a 8 pin, 4 per le righe e 4 per le colonne. Per ogni interconnessione tra riga e colonna vi è un pulsante e lo stato del pulsante viene rilevato da un microcontrollore.
La connessione interna è cos’ fatta:
I pin sono raggruppati in gruppi da 4, o su due file oppure prima 4 pin e poi gli altri 4 su un’unica riga e sono in gruppi per distinguere quelli delle righe e quelli delle colonne. Per leggere dal tastierino viene fatta un operazione di divisione temporale dal microcontrollore. Ovvero 4 pin sono le uscite con resistenza di pull down verso massa, mentre gli altri 4 pin, ad esempio i 4 pin delle righe, sono connessi alle uscite del microcontrollore. Il microcontrollore pone a livello logico alto la prima riga, se uno dei 4 pin delle colonne è anch’esso a livello alto vuol dire che è stato premuto un pulsante sulla prima riga e sulla colonna corrispondente al pin a livello alto. Poi viene posta a livello alto la seconda riga, poi la terza e poi la quarta, andando ad individuare i tasti premuti. Questa operazione viene svolta molto velocemente.
Ad esempio si preme il tasto 5. Il microcontrollore pone a livello alto la prima riga, nessun pin delle colonne è a livello alto, quindi nessun tasto della prima riga è premuto. Poi pone a livello alto solo la seconda riga, visto che il tasto 5 è premuto allora il secondo pin delle colonne sarà a livello alto e il microcontrollore capisce che è premuto il 5 visto che vi è un uno logico alla seconda riga seconda colonna. Il controllo delle colonne e righe funziona in continuo se si legge il tastierino.
La connessione quindi è così fatta:
Le connessioni ni delle righe arrivano direttamente dal microcontrollore, mentre le colonne hanno una resistenza di pull down verso massa e vanno anche connessi al microcontrollore.
Il keypad funziona con una tensione massima di 24V continui e non possono fluire correnti maggiori di 30mA, quindi va ben dimensionata la resistenza di pull down. Funziona con una temperatura da 0°C a 50°C. Ha una dimensione di 6.9 x 7.6 cm mentre il cavo ha una lunghezza di 8.8cm.
LIBRERIA MIKROC
Mikroc dispone di una semplice libreria composta dalle seguenti linee di codice:
- char keypadPort at PORTD;
Va inserito al di fuori del programma principale e serve ad inizializzare le connessioni tra keypad e microcontrollore. In particolare PORTD indica che il keypad è connesso alle porte D con i 4 pin da 0 a 3 connessi alle colonne e i pin da 4 a 7 connessi alle righe. Avendo il keypad di fronte il primo pin della linea è la connessione della prima riga mentre l’ultimo pin è la connessione della quarta colonna.
- Keypad_Init();
Serve per inizializzare il tastierino e va inserito nel programma principale.
- tasto = Keypad_Key_Press();
Inserisce nella variabile tasto il codice del tasto che è premuto. Il codice va da 1 a 16 dove 1 è il tasto1 e 16 il tasto D, vanno numerati da sinistra a destra e da sopra a sotto. Se nessun tasto è premuto il codice restituito è il codice 0.
- tasto = Keypad_Key_Click();
Inserisce nella variabile tasto il codice del tasto che è stato premuto. Il codice va da 1 a 16 dove 1 è il tasto1 e 16 il tasto D, vanno numerati da sinistra a destra e da sopra a sotto. Se nessun tasto è premuto il codice restituito è il codice 0. A differenza del caso precedente questa funzione aspetta finché un tasto non viene premuto e poi rilasciato, al rilascio restituisce il codice.
CODICE E SCHEMA DI ESEMPIO
Come esempio scriviamo un semplice codice che mostra in uscita il codice del tasto premuto. Il codice è il seguente:
char keypadPort at PORTB; //Connessione tastierino a PORTB
char tasto; //Variabile
void main() {
Keypad_Init(); //Initializza tastierino
TRISC = 0x00; //PORTC uscite
while(1){ //Ciclo infinito
do //finchè tasto = 0 controlla il valore
tasto = Keypad_Key_Click(); //Cattura il valore del tasto premuto
while (!tasto); //Solo se tasto diverso da non premuto esce
PORTC= tasto; //Visualizza valore tasto
}
}
Prima di tutto si dichiara la connessione del tastierino con il PIC, in particolare si connette alle porte B con prima colonna a PORTB.F0, seconda colonna a PORTB.F1, terza colonna a PORTB.F2 e quarta colonna a PORTB.F3. Le righe sono connesse in ordine dalla prima alla quarta a PORTB.F4, PORTB.F5, PORTB.F6 e PORTB.F7 rispettivamente.
Dopo di che si inizializza una variabile globale e nel ciclo infinito si dichiarano le PORTC tutte come uscite dove visualizzare il codice del tasto, inoltre si inizializza il tastierino.
Nel ciclo infinito vi è un ciclo do-while dalla quale si esce solo se il codice è diverso da 0, ovvero viene premuto e rilasciato un tasto. Il codice del tasto premuto viene infine mostrato in uscita sulle PORTC.
Lo schema corrispondente al codice è il seguente:
L’alimentazione ha una tensione di 5V continui ed è connessa al microcontrollore con il positivo al pin 20 e ground ai pin 19 e 8. La frequenza di clock interna al microcontrollore è generata dal circuito formato dal quarzo da 4MHz e da C1 e C2. Il microcontrollore inoltre viene mantenuto in enable grazie alla resistenza R5.
Il tastierino numerico è connesso come indicato in precedenza e R4, R3, R2 e R1 sono le resistenze di pull down necessarie per le colonne.
Il codice viene visualizzato su 4 LED (anche se ne servirebbero 5 per visualizzare anche il codice della lettera D). Ogni LED ha la sua resistenza di protezione da 470ohm.
DOWNLOAD
Potete scaricare la simulazione del circuito con PROTEUS e il codice scritto con MIKROC al seguente LINK!!!