Sto sperimentando con il protocollo I2C.
Ho visto che tutte le periferiche collegate tramite I2C devono lavorare alla medesima tensione (tutte a 5V o tutte a 3.3V) a meno di non impiegare degli appositi convertitori di livello.
Ho due domande:
A scopo didattico: se ho una periferica I2C a 5V e una a 3.3V, esiste il modo per escluderne una alla volta dalla catena I2C in modo da avere o solo una o solo l'altra attiva? (ed utilizzarle quindi alternativamente anche se hanno tensioni di lavoro differenti).
L'uguaglianza delle tensioni di lavoro è valida solo per la catena I2C o in generale? Mi spiego: è possibile montare contemporaneamente periferiche SPI e oneWire che lavorano a tensioni diverse? (oppure catena I2C a 3.3V + oneWire a 5v). Spero che la domanda non sia troppo stupida...
NON puoi MAI mischiare apparecchiature con segnali di livelli diversi senza utilizzare gli appositi convertitori di livello o, in alcuni semplici casi, dei partitori resistivi per riportare i valori nel range stabilito.
Ad esempio, per Arduino UNO che lavora a 5V hai dei livelli di tensione ben precisi che vengono riconosciuti come LOW ed altri come HIGH ... puoi leggere una mia spiegazione di dettaglio QUI.
SukkoPera:
Erm, ma visto che parliamo di i2c, non basterebbe mettere pull-up a 3.3v? I dispositivi a 5V dovrebbero comunque interpretare correttamente i dati.
Se il discorso è SOLO per il bus I2C (... ma mi sembrava molto più generico) allora, con Arduino UNO, se colleghi SOLO devices che NON hanno già le pull-up montate (... e già questo spesso non è possibile), allora potresti effettivamente mettere tu due pull-up verso i 3.3V che tengono comunque HIGH il bus e dovrebbe funzionare.
Il problema è che se già ti sposti su Arduno MEGA, dove le pull'up sono montate di fabbrica sulla scheda verso il +5V ... ecco che senza "manometterla" (... e NON è una manomissione da principianti, sono resistenze SMD) già non vale più il discorso.
Quindi, come regola generale ... meglio usare gli adattatori di livello che rischiare danni
Ci sono dispositivi che hanno una tensione di alimentazione di 3,3V ma sopportano 5V sul BUS I2C. per sapere se il dispositivo scelto é uno di quelli leggi il suo datasheet.
Un Arduino alimentato a 5V vede 3,3V ancora come HIGH. Percui dovrebbe funzionare con un I2C BUS a 3,3V. Ma visto che le capacitá parasite e i carico dei dispositivo fanno che il passaggio L a H diventa arrotondato puó essere che un bus 3,3V abbia un limite di funzionamento molto piú ridotto rispetto uno a 5V con lo stesso cavo, distanze, resistenze pullup e dispositivi.
vedi grafici su Gammon Forum : Electronics : Microprocessors : I2C - Two-Wire Peripheral Interface - for Arduino