1 - Introduzione
Dopo aver preso visione e dimestichezza con i circuiti integrati che realizzano le porte logiche elementari (vedasi l'articolo Elettronica Digitale Pratica I - Primi Passi) e ricordando che l'articolo è rivolto a principianti, vogliamo cimentarci nella realizzazione di qualcosa di pratico e realmente utilizzabile, un semplice circuito che, sfruttando solo porte logiche, soddisfi un'esigenza concreta.
Partiremo dall'idea percorrendo tutti i passaggi intermedi che portano alla realizzazione fisica. L'occasione è propizia anche per confrontare diversi metodi di minimizzazione della funzione logica: algebra booleana e mappa di Karnaugh, evidenziandone le analogie semplificative.
Ricavato il circuito base, grazie alla funzione logica, vedremo come semplificare ulteriormente la realizzazione utilizzando solo porte NAND o, in alternativa, solo porte NOR. La trattazione è inevitabilmente estesa, ma i meno pazienti non si preoccupino: darò indicazioni per saltare i paragrafi opportuni per giungere subito alla pratica.
L'idea è, quindi, di realizzare qualcosa di concreto come, per esempio, l'azionamento automatico di una ventola sotto determinate condizioni. Condizioni che andiamo a chiarire nella seguente descrizione funzionale.
2 - Descrizione Funzionale
Si vuole comandare l'accensione di una ventola di aerazione di un bagno sprovvisto di finestra. Anziché provvedere manualmente ogni volta all'accensione ed allo spegnimento, vorremmo che la ventola si accenda in automatico con queste modalità:
- sempre alla presenza di una persona;
- con umidità relativa superiore al 60%, ma non di notte per evitare di disturbare il prossimo.
e che si spenga da sola nel caso contrario che tali condizioni vengano a mancare.
Specificata la descrizione funzionale visualizziamo il progetto con uno schema:
Dove gli ingressi saranno i seguenti:
- A) Rilevatore di presenza di persone;
- B) Sensore di umidità;
- C) Timer giornaliero.
L'uscita è la ventola V.
Lo scatolotto rappresenta il circuito digitale da realizzare che prende il nome di Rete Combinatoria. E perché si chiama in tal modo? Vediamolo nel seguente paragrafo.
3 - Rete Combinatoria
Osservando lo schema e rileggendo la descrizione funzionale ci accorgiamo che la ventola si deve accendere o spegnere solo in base allo stato degli ingressi:
Ingressi | Uscita |
---|---|
c'è qualcuno? | ventola accesa |
c'è umidità e siamo di giorno? | ventola accesa |
non c'è nessuno e l'ambiente è asciutto? | ventola spenta |
e così via negli altri casi. | . . . |
Allora un circuito digitale dove l'output dipende unicamente dagli input propri al medesimo istante prende il nome di Rete Combinatoria. Quindi Rete Combinatoria è un circuito digitale, costituito solo con porte logiche senza elementi di memoria come Flip Flop o RAM, che realizza una opportuna combinazione degli ingressi per determinare l'uscita. La relazione tra ingressi e uscita prende il nome di funzione logica. Per identificare la quale si parte dalla descrizione funzionale di ciò che desideriamo realizzare e dall'analisi dei valori di ingressi e uscite. La descrizione funzionale l'abbiamo vista, ci manca di analizzare i valori di ingressi e uscite che vediamo subito.
4 - Valori di ingressi e uscite
Sia gli ingressi sia l'uscita assumono valori digitali dove, in logica TTL positiva, 0 vale zero volt ed 1 corrisponde a 5 volt. Ora assegniamo agli ingressi ed all' uscita i valori digitali che riteniamo più opportuni ed il relativo significato:
Dispositivo | 1 | 0 |
---|---|---|
A) Rilevatore presenza | presenza di persona | nessuna presenza |
B) Sensore umidità | umidità > 60% | umidità < 60% |
C) Timer | dalle 8 alle 24 | dalle 24 alle 8 |
V) Ventola | accesa | spenta |
Chiarita la descrizione funzionale ed il significato di ingressi e uscita dobbiamo ricavare la funzione logica che mette in relazione gli ingressi con l'uscita in modo da realizzare quanto descritto.
5 - Funzione Logica
Il nostro caso è molto semplice e possiamo individuare subito, in modo intuitivo, la funzione che permette alla ventola di accendersi in base agli ingressi, partendo solo dalla frase che usiamo per descriverne il comportamento:
la ventola (V) è accesa se vi è una persona (A) oppure se, di giorno dalle 8 alle 24 (C), vi è umidità superiore al 60% (B).
Sintetizzando:
V = 1 se A = 1 o se B = 1 e C = 1
dove "o" diventa OR e la "e" diventa AND
V = A OR ( B AND C )
e ricordando che, in logica booleana, il segno (+) identifica la OR e che () significa AND
V = A + B C
ma il segno () lo possiamo sottintendere, come la moltiplicazione in algebra, ottenendo la Funzione Logica finale:
Nel caso di situazioni più complesse non si riesce ad individuare subito una funzione ed occorre ricorrere alla tabella delle verità. Non è il nostro caso, ma lo facciamo lo stesso per esercizio, mentre chi vuole passare subito alla pratica può tranquillamente saltare al paragrafo 9.
6 - Tabella delle verità
Ricordiamo brevemente come si ottiene.
Si elencano gli ingressi con tutte le loro combinazioni possibili. Qui abbiamo 3 ingressi che, potendo assumere solo i due valori 1 o 0, danno luogo a 23 = 8 combinazioni. A fianco di ogni combinazione si scrive il valore che vogliamo che l'uscita abbia in quel caso.
A | B | C | V | significato |
---|---|---|---|---|
0 | 0 | 0 | 0 | ventola spenta perché: non c'è nessuno, l'umidità è bassa, è notte |
0 | 0 | 1 | 0 | ventola spenta perché: non c'è nessuno, l'umidità è bassa, è giorno |
0 | 1 | 0 | 0 | ventola spenta perché: non c'è nessuno, l'umidità è alta, è notte |
0 | 1 | 1 | 1 | ventola accesa perché: non c'è nessuno, l'umidità è alta, è giorno |
1 | 0 | 0 | 1 | ventola accesa perché: c'è qualcuno, l'umidità è bassa, è notte |
1 | 0 | 1 | 1 | ventola accesa perché: c'è qualcuno, l'umidità è bassa, è giorno |
1 | 1 | 0 | 1 | ventola accesa perché: c'è qualcuno, l'umidità è alta, è notte |
1 | 1 | 1 | 1 | ventola accesa perché: c'è qualcuno, l'umidità è alta, è giorno |
Partendo da tale tabella vediamo come si ottiene la funzione logica.
A fianco di ogni 1 della colonna V trascriviamo gli ingressi contrassegnati con se valgono 1 oppure con
se valgono 0:
A | B | C | V | mintermine |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
0 | 0 | 1 | 0 | |
0 | 1 | 0 | 0 | |
0 | 1 | 1 | 1 | ![]() |
1 | 0 | 0 | 1 | ![]() |
1 | 0 | 1 | 1 | ![]() |
1 | 1 | 0 | 1 | ![]() |
1 | 1 | 1 | 1 | ![]() |
Ciò cosa significa? Per esempio vediamo la quarta riga: 0 1 1 1
La ventola è accesa se non c'è nessuno e c'è umidità
ed è giorno
, quindi
AND
AND
o più sinteticamente:
E così via per gli altri casi. Nel complesso la ventola sarà accesa se si verifica anche uno solo di questi casi, quindi:
che sembra alquanto diversa da quella ricavata per intuito, infatti occorre qualche passaggio di semplificazione che possiamo effettuare in due modi: per via analitica o per via grafica. Vediamo entrambi iniziando dal primo metodo analitico.
7 - Sintesi analitica della Funzione Logica
Si tratta di applicare le regole dell'algebra booleana. Nel nostro caso, molto semplice, ne vediamo solo alcune man mano che procediamo con la semplificazione.
Dalla espressione di partenza vista sopra:
raccogliamo A a fattor comune:
ora raccogliamo B ed il suo negato:
Ora osserviamo e ci chiediamo che valore possa assumere questa somma nei 2 casi possibili che C valga 0 o 1:
Se C = 0: = (1 + 0) = 1 dato che (1 OR 0) fa 1;
Se C = 1: = (0 + 1) = 1 dato che (0 OR 1) fa 1;
Quindi in ogni caso fa 1 e quindi la nostra funzione diventa:
Anche qui consideriamo con tutti i valori che B può assumere:
Se B = 0: B * 1 = 0 * 1 = 0 cioè il valore stesso che ha B;
Se B = 1: B * 1 = 1 * 1 = 1 cioè il valore stesso che ha B;
Quindi possiamo sostituire B*1 con B:
E analogamente con B negato:
Come nel caso precedente abbiamo scoperto che C negato + C = 1 anche B negato + B = 1, quindi:
Ma A*1 = A:
Accidenti, la nostra funzione pare ancora diversa da quella ricavata per intuito, cominciamo a dubitare del nostro intuito?
Niente panico e utilizziamo un trucco; nessuno ci vieta di riconsiderare una condizione per la quale la ventola si accende aggiungendo una condizione in OR ridondante che non cambia la funzionalità:
Ora raccogliamo a fattor comune BC:
ma già sappiamo che A + A negato = 1 e che BC * 1 = BC, per cui:
OK: ce l'abbiamo fatta!
Quindi partendo dalla tabella delle verità abbiamo ricavato la funzione logica attraverso il metodo della sommatoria dei mintermini. Vi è anche un secondo metodo detto della produttoria dei maxtermini ma non mi sembra il caso di tediarvi troppo con la teoria.
Spesso è difficile ricavare una funzione ottimizzata applicando le regole dell'algebra booleana. In tali casi si ricorre alla mappa di Karnhaug. Stanchi? Stufi? Forza e coraggio! Un ultimo sforzo e poi passiamo al circuito.
8 - Mappa di Karnhaug
E' un metodo grafico per ricavare e ottimizzare le funzioni logiche. Si parte sempre dalla tabella delle verità, iniziando a disegnare un riquadro in base al numero di ingressi.
Con 2 ingressi:
Con 3 ingressi:
Con 4 ingressi:
Con 5 ingressi si utilizzano 2 riquadri da 4 ingressi. Con 6 ingressi servono 4 riquadri da 4 ingressi, ma diventa evidente che la complessità cresce in modo esagerato e, quindi, si preferisce ricorrere al metodo di Quine-McCluskey fondato su un algoritmo più efficiente e più facilmente realizzabile con un programma.
Ma torniamo al nostro caso con 3 variabili e vediamo come utilizzare la mappa di Karnaugh.
Riporto la tabella delle verità perchè ci serve averla sott'occhio:
A | B | C | V | mintermine |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
0 | 0 | 1 | 0 | |
0 | 1 | 0 | 0 | |
0 | 1 | 1 | 1 | ![]() |
1 | 0 | 0 | 1 | ![]() |
1 | 0 | 1 | 1 | ![]() |
1 | 1 | 0 | 1 | ![]() |
1 | 1 | 1 | 1 | ![]() |
Riprendiamo la mappa per 3 ingressi ed osserviamo che il primo riquadro in alto a destra è relativo agli ingressi A = 0, B = 0 e C = 0. In tal caso l'uscita V vale 0 perciò andiamo a scrivere 0 nel primo riquadro:
Procediamo col successivo riquadro a destra relativo agli ingressi A = 0, B = 1 e C = 0 dove V vale ancora 0 e scriviamo 0 nel secondo riquadro:
Poi nel terzo riquadro dove A = 1, B = 1 e C = 0 dato che V = 1 vi trascriviamo 1:
Insomma abbiamo compreso come compilare la mappa ed alla fine otteniamo:
Ora dobbiamo raggruppare in modo opportuno tutti gli 1 a due o a quattro per volta solo se adiacenti, con lo scopo di minimizzare la funzione risultante. Notiamo subito che vi sono quattro 1 adiacenti:
Ma questo raggruppamento in rosso che significato ha? Significa che l'uscita V vale 1 quando:
che non sono altro che 4 delle 5 condizioni evidenziate dalla tabella delle verità.
Il fatto di averle raggruppate ci consente di notare che la C, nella mappa, compare nel gruppo sia con 1 sia con 0, ovvero qualunque valore abbia C il risultato non cambia e, perciò, possiamo fare a meno di considerarla:
Ancora notiamo che anche la B appare sia con 1 sia con 0, eliminiamo pure essa:
In sostanza abbiamo semplificato ben 4 condizioni in un semplice:
Ora, però, rimane un 1 isolato, corrispondente alla rimanente condizione ÂBC per cui dovremmo scrivere:
che, guarda caso, è identica a quanto ottenuto nella (1) dopo numerosi passaggi di semplificazioni booleane.
Insomma cominciamo ad apprezzare e ringraziare Karnaugh per il suo metodo di minimizzazione grafico-visuale. Ma procediamo. Esattamente come abbiamo fatto per semplificare ulteriormente la funzione logica con le regole dell'algebra, anche qui applichiamo un trucco e raggruppiamo quell'uno rimasto solo col suo vicino:
Che, guarda caso, corrisponde a scrivere:
esattamente come nella (2)!
Ora, in quest'ultimo gruppo blu, notiamo che è A, ad apparire sia con 0 sia con 1 e, quindi, possiamo eliminarla dai 2 elementi corrispondenti:
ed eliminando la ridondanza:
Quindi, in sostanza, karnaugh ci permette di semplificare in modo agevole e veloce senza applicare le regole dell'algebra booleana ed il nostro caso, molto semplice, ci ha agevolmente permesso di confrontare i due metodi.
In conclusione prendendo opportunamente i raggruppamenti massimi di 1 della Mappa di Karnaugh si ottiene una funzione logica formulata col minor numero di termini e, quindi, col numero minore di porte logiche. E, a tal proposito, è giunto il momento, finalmente, di passare dalla funzione logica al circuito logico.
9 - Circuito Logico
Partendo dalla funzione logica sopra ottenuta:
e ricordando che il + identifica una OR e che BC sottintende B AND C:
per realizzare il circuito abbiamo bisogno di una porta OR e di una porta AND:
Ora, per realizzare questo semplice circuito, dovremmo andare a comprare un 74LS08 per la porta AND ed un 74LS32 per la porta OR. Quindi dovremmo usare 2 circuiti integrati. Però la teoria ci dice che qualunque porta elementare può essere realizzata con sole porte NOR o sole porte NAND. Vogliamo verificare ciò? Vediamo se riusciamo ad usare un solo tipo di porta, cominciando con le NOR e poi, se ne avremo voglia e se sarà il caso, vedremo le NAND. Per i più impazienti passate pure al paragrafo 12 ed eventualmente ritornate qui per capire come abbiamo semplificato il circuito.
10 - Circuito con porte NOR
Per ottenere una OR partendo da una NOR, ci basta negare l'uscita della NOR. Per cui il problema si riduce a trovare il modo di realizzare una NOT con la NOR e per fare ciò basta unire gli ingressi:
e, quindi, ottenere la OR:
Ora tentiamo di realizzare la AND con porte NOR. Con la tabella delle verità per la AND affiancata a quella per la NOR ci accorgiamo che sono una l'inversa dell'altra:
![]() | ![]() | AND | NOR |
---|---|---|---|
0 | 0 | 0 | 1 |
0 | 1 | 0 | 0 |
1 | 0 | 0 | 0 |
1 | 1 | 1 | 0 |
e che, quindi, ci basta invertire gli ingressi con due NOT che già sappiamo fare:
Ora siamo pronti a convertire il nostro circuito V = A + BC con sole porte NOR:
Questo circuito con porte NOR non è ulteriormente semplificabile. Per realizzarlo occorrono ben 5 porte NOR e, siccome nel 74LS02 vi sono solo 4 porte NOR, ci servirebbero due integrati e tanto varrebbe, allora, usare i due integrati AND e OR. Prima di rinunciare alla semplificazione vediamo che succede con le porte NAND.
11 - Circuito con porte NAND
Una NAND è solo una AND negata, basta allora porre una NOT all'uscita della NAND per ritrovarci con una AND. Il problema si riduce, quindi, nel realizzare una NOT, il che si ottiene collegando insieme gli ingressi della NAND:
Ora possiamo facilmente ottenere la AND:
Ci resta da trovare il modo di realizzare la OR con sole porte NAND.
Per fare ciò ci conviene evidenziare la tabella delle verità con 2 ingressi X e Y e confrontare le uscite di AND, NAND e OR
![]() | ![]() | AND | NAND | OR |
---|---|---|---|---|
0 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 1 |
dove osserviamo che l'uscita NAND è il rovescio dell'uscita OR e che corrisponderebbe all'uscita OR se gli ingressi fossero rovesciati anch'essi ovvero negati:
![]() | ![]() | NAND |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 1 |
Ecco ora si vede bene che una NAND con ingressi negati corrisponde ad una OR con gli ingressi non invertiti. Già sappiamo come creare una NOT con porta NAND e quindi possiamo ottenere la OR ponendo una NOT su ogni ingresso della NAND:
Infine ecco come appare il circuito V = A + BC con sole porte NAND:
Accidenti, anche qui abbiamo 5 porte! Però, un momento, cosa notiamo? Notiamo che vi sono due NOT in successione che si elidono a vicenda: direi di eliminarle dal circuito. Ecco, in fine, il nostro circuito nella versione finale e minimizzata:
Il tentativo di realizzare il circuito con sole porte NAND è andato a buon fine: ci basta un solo integrato di cui useremo 3 porte delle 4 disponibili. Procediamo sicuramente con le NAND montando il circuito integrato 74LS00 su una basetta breadboard per verificarne il funzionamento.
12 - Circuito su BreadBoard
Per provare il nostro circuito ci conviene predisporre una Breadboard col circuito integrato 74LS00, un paio di condensatori sul pin di alimentazione per smorzare le fluttuazioni di tensione e un LED con resistenza di limitazione corrente. Il tutto come da seguente schema:
dove abbiamo impostato gli ingressi A, B e C a valore 0 per cui l'uscita V sarà 0 anch'essa, ma il LED apparirà acceso per i motivi già visti nel precedente articolo. Infatti:
Bene! Non ci resta che provare le 8 combinazioni degli ingressi collegando i 3 fili blu, connessi sugli ingressi, di volta in volta al polo positivo o negativo rispettivamente per i valori 1 o 0. Come già osservato il LED si accende quando l'uscita è 0.
Per concludere l'esperimento verifichiamo col multimetro che tutti i valori di tensione (VOL, VOH, VIL, VIH) e corrente (IOL, IOH, IIL, IIH) rientrino nei parametri indicati nel data sheet. E con ciò, per ora, abbiamo terminato.
13 Conclusione
Abbiamo effettuato una bella carrellata sulla realizzazione di un circuito digitale partendo dall'idea, estrapolando la funzione logica attraverso vari metodi di minimizzazione, semplificando ulteriormente il circuito con una oculata scelta della tipologia di porta logica e, infine, testando i componenti e verificandone la funzionalità.
Dobbiamo, però, notare la macchinosità del provare le varie combinazioni infilando e scollegando i cavetti degli ingressi nella BreadBoard a mano! E che dire della verifica dell'uscita con un LED che si accende al contrario? Sarà utile provvedere a questi difetti operativi, ma l'articolo si è esteso abbastanza: vedremo questi aspetti prossimamente.
Come di consueto, ogni osservazione è gradita.