Modulo tastierino
[Index][Scheda madre con uP Z80][Programma][Tastierino][Scheda visualizzazione][Scheda alimentazione e clock]
[Lista Argomenti]

Lo scopo di questo modulo è quello di permettere l' immissione dei dati da elaborare dalla scheda a microprocessore. A tale scopo utilizzeremo l' integrato 74C923 della famiglia logica CMOS, compatibile TTL.
Per maggiori informazioni vedi il datasheet.

Il 74C923 è un decodificatore di tastiera a 20 tasti per codice esadecimale; 16 pulsanti vanno da 0 a 9 e da A a F e altri 4 tasti li utilizzeremo come tasti funzione. Per vedere il PinOut del 74C923 clicca qui.
L' integrato presenta delle uscite three-state con un uscita per il dato valido ( DA=PIN13 ) che va a '1' quando avviene la pressione di uno dei tasti. Basa il suo funzionamento sulla costruzione di una griglia formata da 5 righe e 4 colonne, la chiusura di una riga con una colonna darà in uscita il valore del tasto premuto. Ha al suo interno un circuito antirimbalzo (antibounce) che evita  la ripetizione della stessa informazione per due volte.
Questo circuito antirimbalzo va completato con un condensatore da 100nF sul PIN7.
Al suo interno vi è gia un oscillatore che provvede a dare il sincronismo per scandagliare righe e colonne ma va completato con un condensatore da 10nF sul PIN5.
Se OE non è abilitato DA è in alta impedenza; se OE è abilitato DA è a '0' nel caso in cui non si avesse premuto un tasto mentre è a '1' se premuto. E' proprio grazie a DA (PIN13) che si potrà sapere, via software, se è stato premuto un tasto o no.
Vediamo adesso come dovranno essere interpretate le uscite di questo integrato (PIN16-20) analizzando la parte terminale della tabella di verità:

E
D
C
B
A
N10
Nh
Tabella di verità (parziale) dell' integrato 74C923
Dalla tabella di verità si può notare come si sfrutti il livello logico di E, per tanto finchè E='0' il dato presente sul bus dati dovrà essere interpretato come dato vero e proprio, quando E='1' si avranno 4 combinazioni dedicate a funzionalità particolari.
HI e LO servono a far capire che sto immettendo rispettivamente la parte alta e la parte bassa di un indirizzo, mentre DA che sto immettendo un dato.
RUN serve ad eseguire il programma.
0
0
0
0
0
0
0
...
...
...
...
...
...
...
0
1
1
1
1
15
F
1
0
0
0
0
16
HI
1
0
0
0
1
17
LO
1
0
0
1
0
18
DA
1
0
0
1
1
19
RUN

Volendo porre ad esempio il numero 05h nella locazione di memoria e000h dovrò:

  1. digitare prima la  e , poi 0 e in seguito HI
  2. digitare 0, 0 e poi LO
  3. digitare 0, 5 e in fine DA

Per poter immettere un numero questo deve essere mascherato, cioè ripulito dalla parte che non serve. Questo perchè il microprocessore riceve dal modulo tastierino un informazione ad 8 bit e non da 4 ( che è l' informazione utile ), per tanto i 4 bit eccedenti andranno cancellati e per farlo ci serviremo, via software, dell' operatore AND logico, moltiplicando il dato letto sul bus dati per 0Fh. Supponiamo di voler immettere l' istruzione 2E tramite il tastierino.
Questa operazione avverrà tramite le seguenti fasi:

  • si immette tramite il tastierino la parte più significativa di HI, LO o DA; nel nostro caso 2h=0010b.
  • dal uP Z80 viene acquisito il dato presente sui 6 bit che gli arrivano dal modulo tastierino con in più gli ultimi due bit più significativi con valore casuale (in genere sono segnali alti), supponiamo che venga acquisito C2h=11000010b. Si dovrà adesso moltiplicare il valore letto per 0Fh=00001111b di modo tale da lasciare inalterati i 4 bit meno significativi utili e cancellare (azzerare) il valore degli altri 4 bit, a termine di tale operazione otterremo 02h=00000010b.
  • occorre adesso far "slittare" questo dato ottenuto di 4 bit verso la parte più significativa per lasciare il posto alla successiva informazione. L' istruzione che permette la rotazione è RLC A (Rotate on the Left with Carry the register A) e adesso avremo 20h=00100000b. A questo punto si salva il dato in un altro registro.
  • si può immettere adesso la parte meno significativa di HI, LO o DA; nel nostro caso Eh=1110b.
  • anche in questo caso verrà effettuato l' AND logico con 0Fh ma non verrà ruotato, facendo rimanere così il dato nella parte meno significativa degli 8 bit, si avrà 0Eh=00001110b.
  • a questo punto basta sommare il valore appena ottenuto con quello precedente e si ottiene l' informazione a 8 bit completa: 20h+0Eh=2Eh che espresso in forma binaria diventa 00100000b+00001110b=00101110b.
  • adesso si deve premere uno dei tasti funzione HI, LO o DA a seconda che 2Eh sia la parte alta o la parte bassa di un indirizzo o un dato.
  • questa volta entra in giogo il segnale E del '923, quindi ci dovrà essere un controllo che permetta, nel caso in cui E='1', di passare al resto del programma per la memorizzazione del dato e la visualizzazione aggiornata della situazione.

Da quanto ora esposto si può dedurre che per immettere un valore occorre premere due tasti.
Grazie a questo modulo siamo ora in grado di scrivere qualsiasi programma che vogliamo nella nostra RAM ricordando però che al termine della fase di immissione del programma occorre ritornare alla prima locazione di memoria dove è scritta la prima istruzione da eseguire dal programma stesso e poi premere il tasto funzione RUN.
Quando torneremo alla prima locazione di memoria dovremo trovare il codice della prima istruzione del programma che abbiamo inserito.
La tecnica utilizzata per l' interrogazione della tastiera è la tecnica del Polling che consiste nell' interrogazione ciclica e continua del periferico.

Tramite uno zoccolo a 14PIN ed il cavo piatto apposito porteremo al uP Z80 i seguenti segnali:

PIN
1
2
3
4
5
6
7
8
14
Valore
A
B
C
D
E
DA
GND
OE
Vcc

Per vedere lo schema elettrico del modulo tastierino clicca qui.
Per vedere le foto di questo modulo clicca qui.

[Index][Scheda madre con uP Z80][Programma][Tastierino][Scheda visualizzazione][Scheda alimentazione e clock][Lista Argomenti]