¿Puede este AVR MCU con 5V I2C funcionar con este sensor con 3.3V I2C?

3

Me gustaría conectar un MPU-9150 con un sensor ATmega128 utilizando I2C. El Atmega opera a 5V, mientras que el chip del sensor opera a 3.3V.

¿Cómo puedo saber si los dos pueden trabajar juntos? No estoy muy acostumbrado a leer hojas de datos y no sé qué buscar.

    
pregunta Andreas

3 respuestas

6

i2c es una configuración de colector abierto. Los pines de un dispositivo solo deben tirar de la línea hacia abajo o liberarlos (por ejemplo, establecerlos como entradas de alta impedancia), permitiendo que las resistencias de extracción i2c suban la línea a VCC. VCC puede ser cualquier cosa dentro de las especificaciones del dispositivo. En este caso, un pullup de 3.3v funcionará con el sensor, y en (AVR VCC 5v * 0.6) = 3v es más alto que el Logic High mínimo para el AVR. Solo debe asegurarse de que los pull-ups solo estén conectados a 3.3v, por lo que todos los demás deben eliminarse / eliminarse o, en el caso de los pull-ups internos, deben estar inhabilitados.

El módulo de sensor al que se vincula ya tiene resistencias de pull-up externas conectadas a su VCC (suponiendo 3.3v). Solo tiene que deshabilitar cualquier extracción interna en la biblioteca AVR o i2c que está usando (si está usando una).

Editar: Así es como se conectaría. El LD1117 es solo un regulador estándar de 3.3v.

simular este circuito : esquema creado usando CircuitLab

Alternativamente, puedes hacer transbordadores o transistores bidireccionales para el cambio de nivel, o desplazadores de nivel i2c dedicados.

¿Cómo obtengo un Arduino (5 V) y MPR121 (3.3 V) para hablar? y Conversión I2C 3.3 a 5.0 V también tiene más información.

    
respondido por el Passerby
5

De la hoja de datos para el ATmega128: Hoja de datos de ATmega128

Laentradadealtovoltajepuedeserunmínimode0,6deVcc.SitienesuATmega128funcionandoa5V,laentradaALTAmínimaes3V.

Sideseaestarseguro,intentebuscarenGoogle"3.3V a 5V nivel shifter" y obtendrá una gran cantidad de recursos para crear circuitos para usar.

    
respondido por el Nick Williams
3

La solución estándar es usar un cambiador de nivel, para su caso, el txs0102 parece ser el mejor ajuste.

Otra opción es simplemente operar a 3V3 (es decir, su resistencia pullup se conectaría a 3V3 en ese momento), ya que es suficiente para que ATMega detecte un nivel alto.

En tal caso, recomendaría un pullup más bajo de lo normal para estar seguro; 1K, por ejemplo.

    
respondido por el fceconel

Lea otras preguntas en las etiquetas