SCL tolerante a 5V y SDA

0

Buscando en línea pequeñas pantallas OLED SSD1306 para usar con Arduino sobre I2C, encuentro productos que se parecen a esto:

Los vendedores no ofrecen hojas de datos, y las descripciones de los productos no dicen nada acerca de si las líneas SCL / SDA son tolerantes a 5V.

Según lo que se ve en las imágenes, parece que hay un regulador para la línea VCC, por lo que esto se reducirá a 3.3 V o lo que sea que la pantalla necesite para funcionar. Pero el resto de la placa son solo resistencias y condensadores, sin cambios de nivel a la vista.

Me preocupa que estos vendedores simplemente jueguen con las tolerancias de estas pantallas y se fríen inmediatamente con señales de 5V SDA / SCL, o envejezcan rápidamente y se fríen un poco después.

¿Qué piensan ustedes?

    
pregunta ttsiodras

3 respuestas

2

I2C es correctamente un bus open collector (bueno, hoy en día, open drain ), lo que quiere decir que los dispositivos activos solo se accionan a nivel bajo, y se confía en las resistencias pullup para elevar el bus al riel de suministro. .

Por lo tanto, como punto de partida, querrá asegurarse de que sus únicas resistencias de recuperación I2C se conecten a un riel de 3.3v, y que no tengan ninguna en la placa Arduino o en otro lugar que se conecte a 5v.

Los chips ATmega que se usan en los Arduino típicos tienen especificaciones que indican que funcionan bastante bien con entradas de 3.3v cuando funcionan con un suministro de 5v, por lo que leer la señal debería estar bien.

El mayor desafío es que tendría que asegurarse de que en ningún momento el Arduino haya elevado activamente las líneas I2C, por ejemplo, debido a un error de software o la carga de un programa diferente. (Podría decirse que también quiere asegurarse de que nunca active las activaciones internas, pero son bastante débiles y es menos probable que sea un problema).

Si no puede ofrecer esta garantía, I2C también es bastante compatible con el cambio de nivel basado en MOSFET, y muchos módulos se venden por muchas fuentes. Aquí hay un extracto de un canal del esquema de versión de Parkfun . Probablemente querrá reemplazar (o simplemente poner en paralelo) la resistencia de 10K con resistencias de un valor de recuperación de bus I2C más típico.

Y, por supuesto, también querría medir el voltaje de operación real de la placa en lugar de suponer que es de 3.3v. Con el traductor de nivel MOSFET, tiene una amplia latitud incluso para algo como un 1.8v I2C en el lado bajo. Pero sin el traductor de nivel, debe asegurarse de que su Arduino tenga una tensión de bus I2C lo suficientemente alta como para que su Arduino pueda leerla de manera confiable, lo cual puede no serlo si es sustancialmente inferior a 3.3v.

    
respondido por el Chris Stratton
2

La gran mayoría de estas pantallas se basan en el SSD1306 que de hecho es un I2C máximo de 3.3 V dispositivo.

Conectarse a un MCU de tipo AVR puede ser problemático y hay una buena descripción del problema aquí en Arduino tierra .... y una cura simple usando pullups separados. Dependiendo de la pantalla que compre, es posible que haya detectores incorporados a rieles de 3,3 V o cambiadores de nivel como el uso de Adafruit en sus pantallas.

Agregar las dos resistencias 4k7 también actúa como un divisor con cualquier recuperación interna en la MCU, pero la tensión es muy cercana al máximo y puede excederla dependiendo de su MCU.

    
respondido por el Jack Creasey
0

El controlador no es tolerante a 5V. De lo que he leído este tablero necesita pull ups externos. A menos que haya un divisor de voltaje de resistencia, que se pueda usar para la traducción de 5v a 3.3v, debe proporcionar el suyo propio.

Hay un montón de simples transistores más traductores de voltaje de resistencia para i2c. O utilice un arduino de 3.3V u otro MCU.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas