Conversión I2C 3.3 a 5.0 V

35

Estoy tratando de conectar un dispositivo 3.3VI 2 C a un Arduino de 5V.

No tengo ningún problema con la línea SCL. Puedo usar un divisor de voltaje simple pero tengo un problema con la línea SDA ya que es bidireccional.

No estoy del todo seguro de cómo manejar esto. Sin embargo, he agregado un par de diodos, con un divisor de voltaje en el lado de entrada esclavo y nada más en la entrada maestra.

¿Hay alguna otra solución?

JohnC
fuente
Los futuros lectores deben tener en cuenta que aunque OP solo puede usar SCL en una dirección, I2C generalmente permite que SCL sea bidireccional.
The Photon

Respuestas:

25

Un buen documento sobre el tema es la palanca de cambio de nivel bidireccional para el bus I2C y otros sistemas que utiliza un solo mosfet como palanca de cambio de nivel bidireccional.

sivu
fuente
Me gusta el circuito de Philips. Inteligente. De alguna manera, podría ser mejor si las salidas I2C no tuvieran que absorber toda la corriente de todos los pull-ups, pero diseñar un repetidor I2C activo es difícil; No creo que se pueda hacer con lógica normal, ya que el repetidor debe ser capaz de detectar un borde ascendente y reaccionar ante él antes de que cualquier dispositivo I2C pueda hacerlo.
supercat
2
¡El enlace está muerto!
Zimano
14

Para ampliar la respuesta de sivu, este es un uso común para los llamados "conmutadores de bus", que son básicamente MOSFET controlados por lógica. El uso de MOSFET discretos tiene algunos inconvenientes (la capacitancia parásita / acoplamiento capacitivo es uno) y puede ser complicado elegir un buen MOSFET. Los interruptores de bus están optimizados para su uso en circuitos lógicos de alta velocidad.

Varios fabricantes los fabrican, incluidos Fairchild, TI, IDT y Pericom. Echa un vistazo a la NC7SZ384 .

Vea las siguientes notas de aplicación, entre otras:

Jason S
fuente
8

Muchos Arduino tienen soporte integrado para funcionar a 3.3 V. En realidad, todos pueden funcionar a 3.3 V y el esquema del chip FTDI explica cómo hacerlo en un ejemplo. Paul, quien fabricó el Teensy USB Arduino , me sugirió que pudiera unir el cable USB y suministrar un voltaje de 3.3 V en lugar de la línea V CC del cable. Podrías probar esto. Pero también hay otras opciones.

  1. Verifique los niveles lógicos para el Arduino. Creo que admiten 3.3 V como lógica ALTA incluso en un Atmel de 5 V. Un artículo de SparkFun dice: "* Conectar un pin de salida digital de 3.3 V a un pin de entrada de 5 V es a menudo sencillo. La mayoría de los dispositivos son bastante tolerantes al voltaje mínimo que aceptarán como un valor digital alto. La mayoría de los microcontroladores Atmel, por ejemplo, acepte cualquier valor superior a 0.6 * V CC como alto, por lo que el dispositivo de 3.3 V debe emitir un nivel superior a 3 V (0.6 * 5 V). * "
  2. Compra uno de los clones de Arduino que ha seleccionado puentes de 3.3 V y 5 V. Utilizo el cloan RBBB, que configuré el chip FTDI de los cables de suministro a 3.3 V. Pero hay muchos otros que tienen opciones de configuración reales de 3.3 V, incluido uno de los Arduinos oficiales recientes, si no recuerdo mal. También es posible usar el USB Teensy con su plug-in de Arduino y siga las instrucciones en su sitio para instalar un regulador de 3,3 V .
  3. Empalme el cable USB y proporcione una fuente de alimentación de laboratorio de 3,3 V de calidad en lugar de la línea V CC del cable USB. Debería ser de baja corriente, como ha sugerido Paul. Por lo tanto, ya sea una fuente de voltaje de buena calidad. También podría simplemente poner un par de baterías en serie para obtener el voltaje deseado.
  4. Si está interesado, puedo tratar de examinar el esquema de su Arduino y tal vez sea posible hacer un cambio en la configuración FTDI que permita 3.3 V.

Por último, tenemos una discusión que podría interesarle sobre esto aquí en Chiphacker sobre soluciones unidireccionales y bidireccionales para la disminución de voltaje. Este artículo sobre SparkFun mencionado por todbot es útil, al igual que la discusión sobre el artículo bidireccional MOSFET vinculado desde SparkFun. Para resumir el artículo de SparkFun:

  • Resistencia en línea. Unidireccional Reducción solamente: reduce la corriente, los diodos de sujeción de E / S de circuitos integrados pueden limitar la entrada máxima.
  • Resistencias en serie. Unidireccional Descenso solo, pero granular.
  • Diodo. Unidireccional Descenso Más seguro Alto de 5 V bloques diodo; el lado de 3.3 V luego se une a alto. Pero, si invierte la configuración del diodo, ¿no podría también intensificar?
  • MOSFET Bidireccional. Bajar o subir.
  • En comentarios: Ejemplo de aislamiento óptico: 4N25. Alta corriente.
  • En comentarios: ejemplo de diodo Zener: 1N4728A
  • En comentarios: 74HC244 / 125 unidireccional
cyphunk
fuente