Conversione da I2C 3,3 a 5,0 V.


35

Sto cercando di interfacciare un dispositivo 3.3VI 2 C con un Arduino 5V.

Non ho alcun problema con la linea SCL. Posso usare un semplice divisore di tensione ma ho un problema con la linea SDA in quanto questo è bidirezionale.

Non sono affatto sicuro di come gestirlo. Ho pensato di aggiungere una coppia di diodi, con un divisore di tensione sul lato dell'ingresso slave e niente di più sull'ingresso principale.

ci sono altre soluzioni?


I lettori futuri dovrebbero essere consapevoli del fatto che anche se OP potrebbe usare SCL solo in una direzione, I2C generalmente consente a SCL di essere bidirezionale.
The Photon,

Risposte:


25

Un buon documento sull'argomento è il cambio di livello bidirezionale per bus I2C e altri sistemi che utilizza un singolo mosfet come cambio di livello bidirezionale.


Mi piace il circuito Philips. Intelligente. Potrebbe in qualche modo essere migliore se le uscite I2C non dovessero assorbire tutta la corrente da tutti i pull-up, ma progettare un ripetitore I2C attivo è difficile; Non penso che possa essere fatto con la logica normale, dal momento che il ripetitore deve essere in grado di rilevare un fronte di salita e reagire ad esso prima di qualsiasi dispositivo I2C.
supercat

2
Il link è morto!
Zimano,

14

Espandersi sulla risposta di Sivu, questo è un uso comune per i cosiddetti "switch bus" che sono fondamentalmente MOSFET a controllo logico. L'uso di MOSFET discreti presenta alcuni inconvenienti (capacità parassita / accoppiamento capacitivo essendo uno) e può essere difficile scegliere un buon MOSFET. Gli interruttori del bus sono ottimizzati per l'uso in circuiti logici ad alta velocità.

Diversi produttori li producono, tra cui Fairchild, TI, IDT e Pericom. Dai un'occhiata a NC7SZ384 .

Vedi le seguenti note, tra le altre:


8

Molti Arduino hanno il supporto integrato per funzionare a 3,3 V. In realtà, tutti possono funzionare a 3,3 V e lo schema del chip FTDI spiega come in un esempio. Paul, che ha realizzato Teensy USB Arduino , mi aveva suggerito di poter aprire il cavo USB e fornire una tensione di 3,3 V al posto della linea V CC del cavo. Puoi provare questo. Ma ci sono anche altre opzioni.

  1. Controlla i livelli logici per Arduino. Credo che supportino 3,3 V come logica ALTA anche su un Atmel di provenienza 5 V. Un articolo SparkFun afferma: "* Il collegamento di un pin di uscita digitale da 3,3 V a un pin di ingresso da 5 V è spesso semplice. La maggior parte dei dispositivi è abbastanza tollerante alla tensione minima che accetterà come valore digitale elevato. La maggior parte dei microcontrollori Atmel, ad esempio, accetta qualsiasi valore superiore a 0,6 * V CC , quindi il dispositivo a 3,3 V deve emettere un livello superiore a 3 V (0,6 * 5 V). * "
  2. Acquista uno dei cloni di Arduino che ha ponticellato i selettori da 3,3 V e 5 V. Uso la cloan RBBB che ho impostato il chip FTDI dei cavi di alimentazione su 3,3 V. Ma ce ne sono molti altri che hanno opzioni di configurazione effettive a 3,3 V, incluso uno dei recenti Arduinos ufficiali se ricordo bene. Si potrebbe anche usare il Teensy USB con il suo plugin di Arduino e seguire le istruzioni sul suo sito installare un regolatore di 3,3 V .
  3. Collegare il cavo USB e fornire un'alimentazione di laboratorio di qualità 3,3 V al posto della linea V CC del cavo USB. Dovrebbe essere a bassa corrente, come ha suggerito Paul. Quindi, sia una fonte di tensione di buona qualità. Potresti anche mettere un paio di batterie in serie per ottenere la tensione desiderata.
  4. Se sei interessato, posso provare a esaminare lo schema del tuo Arduino e forse è possibile apportare una modifica alla configurazione FTDI che consentirebbe 3,3 V.

Infine, abbiamo una discussione che potrebbe interessarti al riguardo qui su Chiphacker sulle soluzioni unidirezionali e bidirezionali per ridurre la tensione. Questo articolo su SparkFun menzionato da todbot è utile, così come la discussione sull'articolo MOSFET bidirezionale collegato da SparkFun. Per riassumere l'articolo SparkFun:

  • Resistenza in linea. Unidirezionale. Solo step-down: riduce la corrente, i diodi di serraggio I / O dei circuiti integrati possono limitare l'ingresso massimo.
  • Resistori serie. Unidirezionale. Solo step-down, ma granulare.
  • Diodo. Unidirezionale. Step-down. Più sicuro. Alto da 5 V blocchi di diodi; il lato 3.3 V si lega poi in alto. Ma se invertite la configurazione del diodo, non potreste anche intensificare?
  • MOSFET. Bidirezionale. Step-down o step-up.
  • Nei commenti: esempio di isolamento ottico: 4N25. Alta corrente.
  • Nei commenti: esempio di diodo Zener: 1N4728A
  • Nei commenti: 74HC244 / 125 unidirezionale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.