Interfaccia I2C per PC
Questa semplice interfaccia permette
di controllare qualsiasi dispositivo I2C con il computer per mezzo della
porta parallela. Vengono forniti anche dei semplici programmi di esempio
scritti in Basic per la gestione dell'interfaccia.
Il bus I2C
Il bus I2C e' composto da 2 linee chiamate SDA (dati) e SCL (clock),
entrambe del tipo a collettore aperto. La linea SDA e' di tipo
bidirezionale, e permette lo scambio dei dati tra i dispositivi I2C collegati,
mentre la linea SCL e' unidirezionale e serve come clock per sincronizzare
la comunicazione. Questo bus e'; stato ideato dalla Philips ed e'
utilizzato da moltissimi dispositivi usati anche in apparecchi commerciali.
Molto comuni sono ad esempio le EEPROM della famiglia 24Cxx.
La comunicazione con un dispositivo I2C e' caratterizzata da alcune fasi che sono
sempre uguali per qualsiasi dispositivo. L'inizio e la fine della comunicazione I2C
vengono determinati inviando nel bus gli impulsi di START e di STOP ottenuti mediante
una particolare sequenza di stati logici nelle linee SDA e SCL.
Gli stati START e STOP
In condizioni di riposo le linee SDA e SCL sono mantenute a livello
logico 1. La condizione di START si ha quando la linea SDA passa da 1 a 0 mentre SCL si
mantiene a livello 1. La condizione di STOP invece si ha quando la linea SDA passa da 0 a 1
mentre SCL si trova a livello 1.

Dopo aver inviato l'impulso di start, il livello logico della linea SDA viene ritenuto
valido e viene letto dal dispositivo I2C quando SCL e' a livello 1, mentre quando SCL e'
a livello 0 ogni cambiamento dello stato di SDA e' ininfluente.
Trasmissione dei dati nel bus
Dopo l'impulso di start, ogni dato da inviare o ricevere dal bus I2C e'
composto da 8 bit (cioe' un byte), piu' un nono bit di ACK utile per controllare che la
trasmizzione ha avuto buon esito. Ecco un esempio di trasmissione di 2 bytes:

Come si puo' vedere, va inviato prima il bit piu' significativo MSB. In corrispondenza
di ogni bit va inviato un impulso di clock sulla linea SCL. Il bit ACK ha sempre un livello 0
e viene generato dal dispositivo che ha ricevuto il dato.
Schema elettrico
I piedini sulla sinistra si riferiscono
al connettore da 25 pin da inserire nella porta parallela del computer.
L'alimentazione e' di 5 volt e viene prelevata dall'alimentazione del
dispositivo I2C da controllare.
Software
Utilizzando il Qbasic (o GWbasic,
TurboBasic e simili), la porta parallela LPT1 viene gestita tramite le
istruzioni OUT e INP, mentre in TurboPascal si usa l'istruzione PORT. Ecco
dei semplici esempi relativi a questa interfaccia:
OUT 890,1 pone SCL a livello 0
OUT 890,0 pone SCL a livello 1
OUT 888,0 pone SDA a livello 0
OUT 888,1 pone SDA a livello 1
Per leggere lo stato della linea
SDA:
OUT 888,1
IF INP(889) AND 64 = 64 THEN SDA=1 ELSE SDA=0
Inoltre potete prelevare qui un file contenente due esempi
scritti in Qbasic. Il primo programma mostra come va gestita una comunicazione
I2C generica, mentre il secondo e' un esempio di lettore/programmatore di
EEPROM 24C02
Routine I2C di esempio i2cex.zip
© Giuseppe Di Paolo '98
Aggiornato venerd́ 14 agosto 1998