La codifica BCD e i display a 7 segmenti
BCD è un acronimo che sta per Binary Coded Decimal : Decimale codificato in binario. E’ un sistema utilizzato in informatica e in elettronica per rappresentare una singola cifra decimale con il suo equivalente in binario. La codifica, dovendo rappresentare soltanto le cifre (quindi da 0 a 9) richiede unicamente un nibble (4 bit) per ogni cifra.
Il numero 248, ad esempio, in BCD sarà codificato come 0010 – 0100 – 1000 (ogni cifra è rappresentata in formato binario: 0010 =2, 0100=4, 1000=8).
Utilizzando i normali sistemi ad 8 bit, ovviamente ci troveremo ad avere i primi 4 bit inutilizzati: per convenzione, quindi, ogni cifra espressa in BCD avrà i primi 4 bit posti a zero (altri usano posti a uno), seguiti quindi dai 4 bit che codificano la cifra (8 sarà quindi codificato come 00001000, come avviene normalmente per codificare ad 8 bit un numero decimale).
Dal momento che 4 bit vengono “sprecati”, a volte si utilizza la codifica packet BCD, ovvero vengono messe due cifre per ogni byte. Nella codifica packet BCD, inoltre, viene anche aggiunto alla fine un codice per indicare il segno del numero: 1100 per il + e 1101 per il -, il numero 248, quindi sarà rappresentato in packet BCD come: 00100100 – 10001100.
In realtà la codifica BCD, sebbene porti degli “sprechi” di informazioni, è molto utilizzata per vari motivi in elettronica. Prima di tutto perchè permette un facile utilizzo dei display a led a 7 segmenti: esistono numerosi circuiti integrati che permettono di pilotare direttamente un display a 7 segmenti, passandogli la codifica in BCD della cifra da visualizzare.
Immaginiamo di dover pilotare un display a 7 segmenti con un picmicro: avremo bisogno di 7 pin di I/O per visualizzare una cifra: uno per ogni segmento del display, questo può non essere un problema se abbiamo a disposizione molti I/O oppure se la nostra applicazione non necessita di molti I/O.
Ma se dobbiamo pilotare numerosi display? La cosa si complica: si ricorre sicuramente al multiplex (si abilitano i display uno alla volta, molto velocemente) e si preferisce utilizzare un integrato BCD-to-seven-segments-driver (come il CD4511 o l’SN7447 per citarne alcuni), in maniera tale che anzichè 7 I/O per cifra, ne dobbiamo utilizzare soltanto 4, risparmiando ben 3 pin (e questo ci permette, ad esempio, di utilizzare un display a 7 segmenti anche con un picmicro da 8 pin).
Nell’esempio affianco (che illustra il collegamento classico di un BCD-to-7-segment-driver), per visualizzare, ad esempio, la cifra 7, imposteremo gli ingressi dell’SN7447 (ABCD – scritti in maiuscolo!) sul valore 0111 (7 codificato in BCD), (A=0,B=1,C=1,D=1), per contro l’integrato manderà tensione ai segmenti contrassegnati come a,b e c (scritti in minuscolo) per visualizzare il numero 7 sul display.
I segmenti di un display vengono generalmente identificati con le lettere come da disegno:
Quindi per visualizzare il numero 2, si accenderanno i segmenti a,b,g,e,d.
Un altro motivo per cui la codifica BCD è così utilizzata sta nel fatto che ha una corrispondenza quasi diretta con il codice ASCII: basta difatti sostituire le prime 4 cifre binarie della codifica BCD con 0011 per ottenere il corrispondente valore ASCII della cifra che si vuole rappresentare!
Prendiamo ad esempio il numero 8: in BCD sarà scritto come 1000 o meglio 0000 1000. Sostituendo le prime 4cifre binarie, inutilizzate, con 0011 otteniamo 0011 1000, ovvero 56 in decimale, che è proprio il codice ASCII del numero 8!
- Datasheet SN7447 (BCD to 7 segment driver) (3502 download)
- Datasheet CD4511 (BCD to 7 segment driver) (2117 download)