DEFINIZIONE
Un codice binario è un insieme di regole che consente di associare gli elementi di due insiemi:
oggetti da rappresentare
configurazioni binarie formate da un determinato numero n di bit. Con n bit è possibile codificare 2n oggetti distinti.
Tra gli oggetti che si possono codificare ricordiamo:
i caratteri usando ad es. i codici ASCII e UNICODE,
le cifre decimali usando il sistema di numerazione binario naturale o il codice BCD, GRAY, ecc...
i simboli grafici come quelli per il display a 7 segmenti usando configurazioni binarie a 7 bit.
CODICI DI CORREZIONE E RILEVAZIONE DEGLI ERRORI
Particolari codici si utilizzano per rilevare o correggere eventuali errori di sequenze di bit (messaggi, file...) e sono costituiti da stringhe di bit aggiuntive.
Alcuni sono molto complicati.
Ad es. il codice CRC (Cyclic Redundancy Check) consente di correggere gli errori o se non è possibile semplicemente di segnalarli per l'eventuale ritrasmissione; ad es. i file zip quando sono danneggiati producono un errore di CRC.
Invece il FEC (Forward Error Correction) si usa soltanto per correggere errori; è il caso in cui la ritrasmissione è impossibile, come nella telefonia o nella trasmissione satellitare a lunga distanza ed in generale nella comunicazione in tempo reale in cui la segnalazione e la ritrasmissione non è utile.
Altri codici sono meno complicati, come il codice di parità che, nella forma più semplice, aggiunge alla sequenza dati un bit per rendere pari (o dispari) il numero totale di bit 1.
CODIFICATORE o ENCODER http://www.ti.com/lsds/ti/logic/decoder-encoder-multiplexer-products.page#p404=Encoder/Multiplexer
Presenta 2n ingressi (uno per ogni oggetto da codificare), attivabili uno alla volta, ed n uscite: fornisce in uscita il codice dell'unico ingresso attivato.
In linea di principio lo schema logico è semplicissimo: per ogni uscita una porta OR che riceve gli ingressi di interesse.
E' importante chiarire il concetto di attivazione di una linea di ingresso e di uscita:
per il codificatore l'ingresso attivo deve essere solo uno; quindi se tutti gli ingressi sono allo stato alto ed un unico ingresso, quello attivo, è allo stato basso significa che lo stato attivo in ingresso è lo stato basso!.
ES. Codificare le cinque vocali secondo la seguente tabella.
Per 5 oggetti è necessario un codice a 3 bit, quindi 3 uscite.
L'ingresso A non agisce sulle uscite: è un ingresso inutile e il suo codice si ha quando nessun altro ingresso è attivo.
Y0 è attivo solo se sono attivi gli ingressi E ed O.
Y1 è attivo solo se sono attivi gli ingressi I ed O.
Y2 dipende solo da U: basta un buffer.
Il circuito appena visto non gestisce il caso di attivazioni multiple accidentali (il codice in uscita risulta errato per entrambi gli ingressi attivati) oppure la possibilità di privilegiare alcuni ingressi rispetto ad altri nel caso di richieste contemporanee.
Il mercato offre codificatori a priorità che producono in uscita il codice dell'ingresso più significativo.
Per es. nel caso del codificatore delle 10 cifre decimali, attivando 2 e 7 in uscita si avrà il codice del 7. La cifra 9 avrà priorità su tutte gli altre.
L'implementazione di questi circuiti è più complicata e bisogna utilizzare le mappe K. o metodi analoghi.
I seguenti datasheet https://digsys.upc.edu/csd/chips/classic/74LS148.pdf
sono relativi al codificatore a priorità 74147 che converte le dieci cifre decimali nel codice BCD con nove ingressi e quattro uscite.
Si osserva che:
gli ingressi sono attivi allo stato basso: per ottenere in uscita il codice di un ingresso bisogna porre questo ingresso allo stato basso e tutti gli altri ingressi allo stato alto; in effetti nella famiglia TTL ingressi lasciati aperti, inutilizzati, sono considerati dalla porta allo stato alto (per la struttura interna della porta).
la cifra 0 non ha un ingresso dedicato: il suo codice si ha quando nessun ingresso è attivato e tutte le uscite a livello alto.
anche le uscite sono attive allo stato basso, vedi codice della cifra 0 mentre per la cifra 1 si abbassa il bit meno significativo.
Esistono encoder con ulteriori linee (EI, EO e GS) per una espansione collegando due o più integrati fra di loro
Per approfondimenti http://www.pmar.it/retilogiche/mat/encoders_12.pdf
Es. Progettare un codificatore per 4 ingressi attivi allo stato alto; si richiedono uscite attive allo stato basso ed un'ulteriore uscita che visualizzi con un led l'attivazione di uno dei 4 ingressi.
DECODIFICATORE http://www.ti.com/lsds/ti/logic/decoder-encoder-multiplexer-products.page#p404=
Presenta n ingressi e 2n uscite: il particolare codice in ingresso attiva una sola delle n uscite.
Basta una porta AND per ogni uscita e lo schema è identico a quello dei demux
Es. Utilizzando un decoder con due selettori e 4 buffer tree state realizzare un mux con 4 ingressi.
Convertitori di codice e display a 7 segmenti
Display a catodo o anodo comune
decoder: decodificatore-codificatore
driver: capacità di fornire la corrente al carico
decoder driver per display a 7 segmenti: al codice di ingresso a 4 bit corrisponde in uscita un codice a 7 bit ( ad es. 4511). Per lo schema elettrico bisogna desumere dai datasheet se sono necessarie le resistenze di limitazione della corrente. Gli integrati prevedono ulteriori pin di cui bisogna comprendere la funzione (datasheet).
Es1. Sintetizzare le 7 funzioni per il codice di ingresso BDC
Es.2. Sintetizzare le 7 funzioni per il codice di ingresso GRAY
ES. 3 Pilotare un display a 7 seg per visualizzare i tre simboli L, H, - (tratto centrale). Quante linee di ingresso sono necessarie
I decoder sono utilizzati in moltissime applicazioni.
• Un esempio è la selezione dell'input/output da parte del processore.
• Ogni porta di I/O possiede un indirizzo (univoco).
• Quando il processore vuole comunicare con una determinata periferica esso produce il codice dell'indirizzo della porta di I/O al quale la periferica è connessa.
• L'indirizzo (binario) della porta è fornito in input al decoder il quale attraverso il suo output abilita la corrispondente porta di I/O.