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