Calcolatrice-Z80

Ho realizzato una calcolatrice basata sul microprocessore Z80, con la stessa tecnologia degli anni 70.

 

Descrizione e foto del PCB

Quì potete scaricare l’ intero progetto realizzato con CAD/CAE Eagle. Nella foto sottostante potete vedere il PCB.

schema

Una volta realizzato il PCB vanno collegati alcuni ponti: i rispettivi pin 14 di IC3 ed IC4 vanno collegati assieme in parallelo al pin 14 di  IC2 con filo nel lato rame. Fare ponte lato rame tra pin 10 di IC15 e pin 26 di IC12 (Z80). Gli altri due ponti da realizzare sono indicati dai due elastici gialli.

 

Ora descriverò lo schema sottostante:

schema_elettrico

 

GRUPPO CPU/MEMORIE

Inizierò dalla descrizione del gruppo cpu memorie EPROM e RAM, il cui schema è stato trovato su internet. Si tratta di una mappatura di memoria “I/O mapped”,  ossia l’ accesso alle periferiche avviene attraverso l’ istruzione  “out(indirizzo_periferica), a”.

Le aree degli indirizzi delle memorie e delle periferiche sono le seguenti: EPROM da 0x0000 a 0x7FFF (da 0 a 32767byte), RAM da 0x8000 a 0xFFFF (da 32767 a 65535byte), perif. DISPLAY da 0x00 a 0x07 (da 0 a 7byte), perif. TASTIERA da 0x00 a 0x02 (da 0 a 2byte), perif. SPEGNIMENTO 0x08.

Le porte logiche di IC16, IC17 e IC19C hanno lo scopo di creare la cosi detta mappatura di memoria descritta sopra.

 

ALIMENTAZIONE

Ho pensato di utilizzare due alimentazioni a 5V separate: una  per alimentare la periferica DIPLAY + IC9, IC10 ed IC11 facente capo allo stabilizzatore IC29 ed il resto della scheda alimentata da IC28.

 

PERIFERICA DI SPEGNIMENTO

Questa calcolatrice ha un interruttore ON/OFF generale di accensione e spegnimento del sistema più un pulsante nella tastiera preposto alla stessa funzione ed infine una PERIFERICA DI SPEGNIMENTO atta allo spegnimento del sistema dopo il passaggio di un determinato tempo senza aver premuto nessun pulsante: la gestione di tale periferica avviene da software.

Tale periferica è formata da un flip-flop D che ha lo scopo di mantenere menorizzato lo stato precedente di accensione-spegnimento (IC18A) + IC19A-B-C + T1 (2N2222) ed un relè a doppio scambio atto allo spegnimento ed accensione del tutto.

Quando si manda un qualsiasi valore (es. “out(0x08), a”) all’ indirizzo 0x08 il sistema si spegne.

 

PERIFERICA DISPLAY

La periferica di visualizzazione è formata da 8 display 7-segm. i cui segmenti sono pilotati dai rispettivi registri PIPO (da IC1 ad IC8).

La cifra da visualizzare viene decisa da una delle 8 uscite di IC9, quest’ ultimo ha lo scopo di decodificare gli indirizzi da 0x00 a 0x07 presenti nei pin ADD0, ADD1 ed ADD2 del BUS INDIRIZZI.

 

PERIFERICA TASTIERA

La periferica tastiera ha lo scopo di inserire le cifre digitate in modo che vengano alaborate dal firmware interno.  Essa è formata dal IC25A-B che hanno lo scopo di presentare il contenuto del tasto premuto il tempo  sul BUS DATI, poi da IC26 che ha lo scopo di mandare ad “1” il clock del gruppo IC21A-B fino a IC24A-B (essi sono dei registri PIPO), in modo tale che ogni volta che viene premuto un pulsante della tastiera viene presentato il rispettivo valore al buffer IC25A-B che abilitato lo presenta a sua volta nel BUS DATI. 

La tastiera è formata da una matrice di 8×3 tasti connessa agli strip JP1 e JP2IC20 è a sua volta un decoder degli indirizzi del quale vengono utilizzate solo le uscite Y0, Y1 ed Y2 aventi lo scopo di presentare uno “0” quando vine invocato il rispettivo indirizzo in modo tale che sul BUS DATI venga a sua volta letto il tasto premuto per quella rispettiva cella (da 0x00 a 0x02).

Il polling della tastiera avviene senza l’ invocazione dell’ interrupt, quindi attraverso un loop infinito che ne legge il contenuto (polling) attraverso l’ istruzione “in a, (indirizzo_cella_tastiera)”.

Collegato alla tastiera c’ è un pulsante di “RAM-test” che una volta  premuto ha la funzione di effettuare il test delle celle della RAM. Tutto ciò avviene da software.

 

GENERATORE DI CLOCK E RESET

Nello schema il CLOCK ed il RESET vengono generati da IC15, in fase di realizzazione su bread-board del circuito la frequenza di Clock è stata impostata con un quarzo a 3Mhz. Tale circuito a porte not non funzionava nel senso che sul pin 6 della CPU (CK) non si rilevava nessun segnale. E’ stato quindi sostituito da un circuito basato su NE555 con una frequenza massima di 45Khz (tale frequenza è il massimo che si può ottenere con quel chip).

L’ NE555 si è rivelato quindi funzionante ma con una frequenza nettamente inferiore rispetto al circuito a porte not purtroppo. Ciò ha influito non poco sulle prestazioni dell’ intero sistema.

 

Nella foto sottostante si può vedere la bread-board del sistema in fase di test:

 

 

 

Questa invece la scheda finita ed accesa:

scheda_finita

notare la piccola millefori in alto a sinistra con la quale è stato realizzato il generatore di clock, di cui riporto sotto lo schema:

 

generatore_CK

 

Tale schema viene montato nello zoccolo di IC15 al posto del relativo 74LS04.