Guida alla Programmazione in C del PIC, 12° Parte

Guida alla Programmazione in C del PICNella 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!!!



 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *