Superare le proprie limitazioni e divenire signori dell'universo
ELETTRONICA DIGITALE
… studiare, studiare ed ancora studiare,
è il solo modo di capire quanto possa
essere grande sia la propria ignoranza!
CODICI BINARI
CODICI BINARI
Definizioni
Un codice è un insieme convenzionale di regole e di simboli idonei
a rappresentare gli elementi di un altro insieme.
In elettronica digitale i numeri, le lettere dell’alfabeto e i segni
d’interpunzione sono rappresentati con stringhe di bit.
Il codice binario è un insieme di regole che servono per stabilire
una corrispondenza biunivoca tra i numeri, le lettere dell’alfabeto,
i segni d’interpunzione e le stringhe di bit che li devono
rappresentare; un codice può essere definito:
• efficiente;
• ridondante;
• pesato;
• non pesato;
• a distanza unitaria (o ciclico);
• autocomplementante.
Se la stringa è lunga n bit, il numero massimo di simboli che si possono rappresentare è
Se i simboli sono
allora tutte le configurazioni binarie sono utilizzate; se
alcune configurazioni restano inutilizzate, quindi sono senza significato.
Noti gli N simboli da rappresentare, per determinare il numero intero
di bit necessari si
utilizza la relazione:
Un codice si dice efficiente se utilizza un numero di bit strettamente necessario, cioè
quando
e quindi tutte le
configurazioni sono utilizzate.
Un codice si dice ridondante se utilizza un numero di bit superiore a quello strettamente
indispensabile, cioè se
.
Un codice si dice pesato quando è possibile stabilire una regola matematica che consenta
di determinare la stringa di bit corrispondente al simbolo da rappresentare.
Condizione necessaria ma non sufficiente perché un codice sia pesato è che la somma dei
pesi sia compresa tra 9 e 15.
Se si rispetta questa condizione, sono rappresentate tutte le dieci cifre decimali.
Un codice è non pesato, se non esiste una regola matematica per determinarlo; affinché sia
noto, è necessario conoscere l’intera tabella di corrispondenza tra le stringhe di bit e i
simboli da rappresentare.
Per esempio, il sistema di numerazione binario può essere considerato un codice pesato,
anche se è difficilmente utilizzabile perché il numero di bit varia continuamente, mentre
i circuiti digitali devono lavorare su un numero di bit fisso.
Si definisce distanza il numero di bit che varia tra due configurazioni successive.
Un codice è a distanza unitaria quando, tra ogni configurazione e la successiva, cambia un
solo bit.
Un codice è autocomplementante quando, invertendo ogni singolo bit (complemento a 1),
si ottiene il complemento a 9 del numero decimale rappresentato.
Condizione necessaria perché un codice pesato sia ad autocomplementazione è che la
somma dei pesi deve essere ugale a 9.
I codici possono essere anche definiti:
•
numerici;
•
alfanumerici;
•
a controllo di errore.
Codici numerici
Sono strutturati in modo tale da rappresentare numeri; si esaminano di seguito i codici
BCD (8421), AIKEN (o BCD 2421), XS3 (Eccesso 3) e Gray.
Codice BCD
Il BCD (Binary Coded Decimal, decimale codificato in binario) è un codice pesato più
vicino al sistema di numerazione binario.
Ogni numero decimale è rappresentato con un nibble (gruppo di quattro bit), perché la
cifra 9, che è la più grande della base, necessita di quattro bit per la sua rappresentazione.
Delle sedici combinazioni che si possono scrivere con quattro bit, solo dieci sono quelle
utilizzate, le altre sei sono combinazioni non utilizzate.
Si tratta dunque di un codice ridondante.
Partendo dal bit più significativo (a sinistra), i pesi sono 8, 4, 2, 1, cioè multipli di 2 come
nel sistema binario naturale.
È il codice più utilizzato per eseguire le somme e in genere per la rappresentazione dei
numeri nell’interfacciamento dei sistemi digitali con periferiche, stampanti o strumenti di
misura.
Non è idoneo per le sottrazioni e inoltre, per il numero di bit utilizzato, non è efficiente.
La sottostante tabella riporta le dieci cifre decimali per i primi tre codici.
Cifre decimali codificate nei codici numerici.
Decimale
BCD 8421
AIKEN 2421
XS3
0
0000
0000
0011
1
0001
0001
0100
2
0010
0010
0101
3
0011
0011
0110
4
0100
0100
0111
5
0101
1011
1000
6
0110
1100
1001
7
0111
1101
1010
8
1000
1110
1011
9
1001
1111
1100
Codice AIKEN
Il BCD 2421 o AIKEN è un codice pesato e autocomplementante. Le configurazioni
sono riportate nella seguente tabella.
Rispetto al BCD 8421, l’AIKEN non è ridondante, dato
che tutte le sedici configurazioni sono utilizzate.
Ogni singola cifra deimale è convertita su quattro
bit i cui pesi sono, a partire dal bit più significativo,
2, 4, 2, 1.
Come si nota dalla tabella, l’AIKEN, per le cifre
decimali da 2 a 7, ammette due notazioni diverse.
Codice BCD 2421 o AIKEN.
Decimale
AIKEN 2421
0
0000
1
0001
2
0010
3
0011
0011
4
0100
1010
5
1011
0101
6
1100
0110
7
1101
0111
8
1110
9
1111
Il codice pertanto perde la caratteristica della
corrispondenza biunivoca tra i numeri decimali e le
stringhe di bit. È necessario, ovviamente, stabilire
quale delle due configurazioni adottare per i numeri
da 2 a 23.
La scelta non è indifferente perché il codice è costru-
-ito in modo tale che il complemento a 9 di ogni cifra
decimale si ottiene con il suo complemento a 1.
Per esempio, se si sceglie per il 7 la configurazione
1101, per il 2 è obbligatoria la notazione 0010; e
così via per le altre coppie di numeri.
Il codice Eccesso 3
Il codice Eccesso 3 (XS3) è non pesato e autocomplementante. È stato ottenuto somma-
-ndo 3 a ogni configurazione del BCD 8421.
Anche in questo caso il complemento a 9 si ottiene invertendo ogni singolo bit; ad
esempio, 7 (1010) ha come complemento a 9 il 2 (0101).
Il codice XS3 viene utilizzato da alcuni circuiti contatori.
Con il codice autocomplementante sono facilitate le operazioni di sottrazione.
Il codice Gray
Il codice Gray, non pesato e a distanza unitaria, è
utilizzato per la codifica degli angoli, generalmente
nei codificatori meccanici di posizione, realizzati con
piste metalliche sulle quali strisciano dei contatti.
Con la codifica Gray un solo contatto alla volta commuta
da zona isolante a zona conduttrice.
Il sistema diventa così insensibile a eventuali false
combinazioni che invece si verificano se più contatti
commutano contemporaneamente.
Si ipotizzi che il sistema debba commutare dalla
posizione 7 alla posizione 8: nella notazione binaria
vuol dire eseguire una transizione da 0111 a 1000.
Poiché i circuiti reali hanno tempi di commutazione
diversi quando passano da 0 a 1 piuttosto che da 1 a 0,
il sistema non passa direttamente da 0111 a 1000, ma
attraversa una combinazione intermedia:
.
Si ha quindi una falsa risposta in corrispondenza di
0000, sequenza che il sistema non ha attraversato.
La tabella a lato riporta il codice Gray su 4 bit
Codice GRAY a 4 bit
Decimale
Binario
Gray
0
0000
0000
1
0001
0001
2
0010
0011
3
0011
0010
4
0100
0110
5
1001
0111
6
0110
0101
7
0111
0100
8
1000
1100
9
1001
1101
10
1010
1111
11
1011
1110
12
1100
1010
13
1101
1011
14
1110
1001
15
1111
1000
Codici alfanumerici
I codici alfanumerici sono strutturati in modo tale da
rappresentare lettere (maiuscole e minuscole), numeri, segni di punteggiatura, simboli
matematici e speciali, comandi per la trasmissione, la stampa e la separazione dati.
Gli standard più utilizzati sono ASCII ed EBCDIC.
L’ASCII (American Standard Code for Information Interchange) è lo standard americano
per lo scambio di informazioni; è noto anche come US-ASCII (si pronuncia «æski» in
inglese e «asci» in italiano).
È un codice a 7 bit più un bit di parità (pari o dispari).
Proposto nel 1963 come standard di comunicazione per telescriventi, fu in seguito
approvato dall’ISO (International Organization Standardization, organismo internazionale
di standardizzazione) con ISO 646 per tutte le comunicazioni.
È stato approvato anche dal CCITT (Consultative Committee International on Telephones
and Telegraphy, comitato consultativo internazionale telefonico e telegrafico) che stabi-
-lisce gli standard per i modem.
Il formato ASCII è universalmente riconosciuto da tutti i computer, cosa non vera per
i testi digitati e formattati con i diversi programmi applicativi in commercio.
Qualsiasi computer può generare un file ASCII, ad esempio con Blocco Note di Windows o
con un applicativo analogo, salvando il file in un formato esclusivamente testuale.
ISO ha poi diffuso anche un altro standard, chiamato comunemente ASCII esteso, che si
diversifica per ogni tipo di alfabeto.
L’esigenza nacque dalla necessità di codificare i simboli degli alfabeti diversi da quello
occidentale.
L’ASCII esteso è codificato su 8 bit e può rappresentare 256 caratteri, tra i quali sono
compresi i 128 caratteri dell’ASCII a 7 bit.
Le denominazioni sono le seguenti:
• ISO 8859-1 (Latin-1) per i linguaggi dell’Europa occidentale;
• ISO 8859-2 (Latin-2) per i linguaggi dell’Europa centrale;
• ISO 8859-5 (Latin/Cirillico) per i caratteri cirillici;
• altri, anche per le lingue orientali.
Il codice EBCDIC (Extended Binary Coded Decimal Interchange Code) è un’estensione del
BCD strutturato su 8 bit , senza bit di
parità, e può codificare 256 caratteri.
Era utilizzato nei sistemi operativi dei minicomputer e dei mainframe dell’IBM.
Codici a controllo di errore
Le cause di errori nelle stringhe di bit possono essere due:
• variazioni indesiderate di tensione in fase di memorizzazione,
• rumore sul canale nei sistemi di trasmissione a distanza.
Ne consegue che un 1 può trasformarsi in uno 0 e uno 0 può trasformarsi in un 1.
La possibilità che un canale introduca un errore nella trasmissione di un dato è studiato
con la teoria della probabilità.
Si definisce capacità di un canale il numero di bit (del dato) che può transitare
nell’unità di tempo.
Se un trasmettitore genera messaggi a un ritmo inferiore alla capacità del canale, esiste
un sistema di codifica tale che la probabilità di errore può essere piccola a piacere.
Viceversa se il ritmo con cui vengono generati i messaggi è superiore alla capacità del
canale, non sarà possibile trasmettere i messaggi senza errori.
Un canale si definisce simmetrico se la probabilità che un 1 si trasformi in uno 0 è uguale
alla probabilità che uno 0 si trasformi in un 1.
Un’ulteriore ipotesi è che gli errori siano tutti eventi indipendenti tra loro.
Ogni canale è caratterizzato da un parametro BER (Bit Error Rate) definito come rapporto
tra il numero di bit errati e il numero di bit trasmessi.
In genere il BER è compreso tra
, valori che apparentemente sembrerebbero
trascurabili, ma che in realtà non lo sono.
È possibile ridurre la probabilità di errore sui bit del dato utilizzando tecniche di codifica
di canale, che consiste nell’aggiungere bit di ridondanza al dato da trasmettere.
In ricezione la presenza dei bit di ridondanza permette di rilevare e/o correggere i bit
errati nella trasmissione del messaggio.
La codifica di canale non riduce la probabilità di errore in trasmissione (errore che è do-
-vuto unicamente al rumore presente sul canale), ma riduce gli errori sul dato in
ricezione.
L’inconveniente della codifica di canale consiste proprio nella ridondanza, cioè nella
trasmissione di bit non appartenenti al dato e quindi nella necessità di un tempo maggiore
per la trasmissione, e nella maggiore complessità circuitale.
I codici a controllo di errore possono essere di due tipi:
•
rilevatori di errori, cioè codici in grado di rilevare la presenza di un errore, ma non
di correggerlo;
•
correttori di errori, cioè codici in grado di rilevare i bit errati e di correggerli.
I codici a controllo di errore sono finalizzati alla ricerca dell’errore singolo.
Infatti la probabilità che si verifichi un errore singolo, ovvero che un solo bit del dato in
trasmissione sia errato, è di gran lunga superiore alla probabilità che si verifichi un
errore doppio, ovvero che due bit siano errati contemporaneamente.
Gli errori multipli, cioè più di due bit errati contemporaneamente, hanno ovviamente
probabilità molto più bassa rispetto all’errore doppio e quindi a quello singolo.