Go Down

Topic: Come collego più dispositivi I2C? (Read 3 times) previous topic - next topic

Stefanoxjx

Grazie.
Ora vedo se riesco a far fumare qualche componente :D

uwefed


Le pull up sugli input non sono attive di default, vanno attivate esplicitamente in questo modo:
Inoltre le pull up integrate dell'ATmega, circa 20k, sono troppo alte come valore per consentire un corretto funzionamento del bus I2C che richiede come minimo una corrente di 1.5 mA, meglio se 3 mA, quando le linee vengono chiuse verso lo 0 logico, lo stato di idle prevede tutte e due le linee a 1 logico.

La libreria Wire attiva di default le resistenze interne pullup. Se hai collegato pochi dispositivi I2C e dei collegamenti/piste corte non serve aggiungere resistenze pullup esterne.
Quote from: http://www.arduino.cc/playground/Learning/I2C
Wire library
Wire library will enable ATMEL internal Pullups. So using additional pullup's with a short bus may not be required, for example interface only a single nearby EEPROM.



A parte le due linee di segnale SDA/SCL, che vabbè, resistenza PullUP ecc. ecc.
Ma quello che chiedevo qualche post fa è se l'alimentazione a questi aggeggi i2c devo darla dal pin di arduino +5V o +3.3. Deduco 3.3 visto che parlano di voltaggi da 1.8 a 3.6.
Gracias!

Sbagliato!!
Dipende dai dispositivi che colleghi. Ci sono integrati per 5V.  Quelli da 3,3V e quelli per tensioni ancora piú basse e esistono anche quelli per 3,3V ma che reggono 5V sui pin SDA e SCK. Leggiti il datasheet dei integrati che vuoi usare. Non sappamo dirlo visto che non sappiamo cosa vuoi fare.
Ciao Uwe

astrobeed


La libreria Wire attiva di default le resistenze interne pullup. Se hai collegato pochi dispositivi I2C e dei collegamenti/piste corte non serve aggiungere resistenze pullup esterne.


E questa è una bella cretinata dal punto di vista elettronico, il motivo è semplice le specifiche della I2C dicono chiaramente che la corrente minima che deve circolare sul bus è di 1.5 mA, caldamente consigliati 3 mA, anche con connessioni di pochi centimetri.
Con i 20k tipici delle pull up dell'ATmega possono scorrere al massimo 5/20k = 0.25 mA, troppo pochi per garantire il corretto funzionamento della I2C.
Comunque collegando due pull up esterne al 3.3V l'effetto delle pull up interne è solo quello di alzare la tensione di 0.1-0.2 Volt a vuoto, cioè invece di avere 3.3V avremo 3.4-3.5 V, valori perfettamente accettabili.
Dato che oltre ai data sheet esistono anche le misure strumentali ecco quello che si vede col DSO scrivendo sul bus I2C a vuoto, cioè senza collegare nessun device, e dialogando con un device a 3.3V, un accelerometro dotato di sue resistenze di pull up a 3.3V da 3.3k.

Segnale I2C a vuoto

Dettaglio fronti d'onda I2C a vuoto

Segnale I2C con pull up 3.3V

Dettaglio fronti d'onda I2C con pull up 3.3V


Da notare come a vuoto, cioè senza nessun utilizzatore collegato, il segnale I2C è si a 5V per effetto delle pull up interne, ma lo slew rate del fronte di salita è pessimo per via della poca corrente disponibile.
Con le pull up 3.3V da 3.3k, valore alto ma accettabile, il segnale diventa del giusto livello, circa 3.5V come atteso, e con lo slew rate del fronte di salita decisamente migliore, anche se non è ancora ottimale, l'ideale è usare pull up da 1.5k con i 3.3V che garantiscono la corretta forma d'onda.





Go Up