Saltar al contenido
Herramienta

Compatibilidad de niveles lógicos 3,3V y 5V

Eliges quién manda la señal y quién la recibe, y sale si conectas directo, si necesitas un divisor con valores exactos o si vas a quemar el pin. Con los VIH y VIL reales de cada placa.

Un Arduino UNO manda 5 V y el pin de un ESP32 aguanta 3,6 V como máximo absoluto: se pasa 1,4 V. Conectado directo, ese pin se quema. No es que lea mal: entra corriente por el diodo de protección hacia el riel de 3,3 V.

Calculadora

Elige las dos placas

hoja de datos
hoja de datos

VDD: 1,8 a 5,5 V

Arduino UNO ESP32

Así quemas el pin

pasa el máximo absoluto

Margen alto

sobran 1,725 V

Margen bajo

faltan 75 mV

Máximo

se pasa 1,4 V

El máximo absoluto no es una sugerencia: entra corriente por el diodo de protección y mata el pin. Que hoy funcione no significa que esté bien.

Un divisor NO aísla: una falla del lado alto llega igual al pin, dividida. Con motores, potencia o inductancias al otro lado va un optoacoplador.

Conecta el GND de las dos placas: sin tierra común, ninguno de estos números significa nada.

012345Vmanda 1manda 0lee 1lee 0se rompeUNOmandaESP32recibese pasa del máximo012345Vmanda 1manda 0lee 1lee 0se rompeUNOmandaESP32recibese pasa del máximo

La banda verde es lo GARANTIZADO, no lo que mide tu multímetro.

Los números

LadoVDDVOH minVOL maxVIH minVIL maxMáximo absoluto
Arduino UNO5 V4,2 V0,9 V3 V1,5 V5,5 V
ESP323,3 V2,64 V0,33 V2,475 V0,825 V3,6 V

Fuentes: ATmega328P, características eléctricas DC · ESP32, características DC

El divisor

Divisor entre UNO y ESP32Divisor resistivo entre el pin de UNO, que manda 5 V, y el pin de ESP32. R1 de 750 Ω arriba y R2 de 1,5 kΩ abajo dejan 3,333 V en el nodo, y el pin necesita 2,475 V para leer un 1. Por el lazo circulan 2,222 mA; por la rama que va al pin no circula nada, porque una entrada no consume. Las dos placas comparten el GND.UNOriel 5 VESP32riel 3,3 Vlee 1 desde 2,475 V5 Ventra2,222 mAcorrienteR1750 Ω3,704 mWGK2-17R21,5 kΩ7,407 mWGK5-173,333 V5%: 3,22 V a 3,443 Vla entrada no consumeGND común de las dos placasDivisor entre UNO y ESP32Divisor resistivo entre el pin de UNO, que manda 5 V, y el pin de ESP32. R1 de 750 Ω arriba y R2 de 1,5 kΩ abajo dejan 3,333 V en el nodo, y el pin necesita 2,475 V para leer un 1. Por el lazo circulan 2,222 mA; por la rama que va al pin no circula nada, porque una entrada no consume. Las dos placas comparten el GND.UNOriel 5 VESP32umbral2,475 V5 V2,222 mAR1750 Ω3,704 mWR21,5 kΩ7,407 mW3,333 Vno consumeGND común

No las des vuelta: con R2 arriba, al pin le llegan casi los 5 V.

Consumo

2,222 mA

Peor caso al 5%

3,22 V a 3,443 V

Con 30 cm sirve hasta

15,92 MHz

El peor caso sigue dentro de lo que el ESP32 lee y aguanta. Para I2C a 400 kHz y para UART sobra, para SPI rápido no.

R1 750 Ω

La tenemos$100

R2 1,5 kΩ

La tenemos$100

Conversor de 4 canales

conversor de nivelLV 3,3 VHV 5 Vcanal 1canal 2canal 3canal 4va y vuelve: sirve para I2Cconversor de nivelLV 3,3 VHV 5 Vcanal 1canal 2canal 3canal 4va y vuelve: sirve para I2C

Alimenta los dos lados: con una sola referencia no convierte nada.

Sin precio ni stock acá

Búscalo en la tienda: conversor de nivel bidireccional de 4 canales.

Lo que va en el medio es un divisor de 750 Ω arriba y 1,5 kΩ abajo, que deja 3,333 V en el pin con 2,222 mA de consumo. Las dos las tenemos: 750 Ω SKU GK2-17, $100 con 280 en bodega, y 1,5 kΩ SKU GK5-17, $100 con 268 en bodega.

Por qué 3,3 V y 5 V no se llevan

Los cinco números que deciden todo

Un pin digital no ve voltajes: ve dos zonas y una tierra de nadie entre medio. Toda la compatibilidad entre 3,3 V y 5 V sale de comparar cinco números, y esta calculadora hace exactamente esas comparaciones.

  • VIH, del que recibe: desde qué voltaje lee un 1.
  • VIL, del que recibe: hasta qué voltaje lee un 0.
  • VOH, del que manda: lo mínimo que garantiza al mandar un 1, ya con carga colgando.
  • VOL, del que manda: lo máximo que deja al mandar un 0.
  • El máximo absoluto, del que recibe: sobre eso el pin se rompe, lea lo que lea.

Para que dos chips se entiendan tienen que cumplirse las dos:

VOH(quien manda) ≥ VIH(quien recibe) · VOL(quien manda) ≤ VIL(quien recibe)

Y antes que las dos, una tercera que no es de comunicación sino de supervivencia: el voltaje que sale del que manda no puede pasar el máximo absoluto del que recibe. Por eso la calculadora mira ese número primero. Que los umbrales calcen no sirve de nada si el pin ya se murió.

La tabla, con la fuente de cada número

Estos son los valores con los que trabaja la herramienta, calculados al riel nominal de cada placa. Los de Espressif y los del ATmega328P salen como fracción del riel, así que siguen valiendo si alimentas la placa a otro voltaje; los del RP2040 son fijos y no escalan.

Niveles lógicos al riel nominal de cada familia. VOH y VOL son del lado que manda; VIH y VIL, del que recibe.
FamiliaVDDVOH minVOL maxVIH minVIL maxMáximo absoluto
ESP32, ESP32 C3, ESP82663,3 V2,64 V0,33 V2,475 V0,825 V3,6 V
Arduino UNO y Nano5 V4,2 V0,9 V3,0 V1,5 V5,5 V
Raspberry Pi Pico y Pico 23,3 V2,62 V0,5 V2,0 V0,8 V3,8 V
Raspberry Pi 53,3 V2,62 V0,5 V2,0 V0,8 V3,6 V
Módulo de 5V con entrada TTL5 V2,4 V0,5 V2,0 V0,8 V5,5 V
Módulo de 5V con entrada CMOS5 V4,0 V0,5 V3,5 V1,5 V5,5 V
Módulo de 3,3V3,3 V2,64 V0,33 V2,31 V0,99 V3,6 V

Lo que no pudimos confirmar, y va dicho. Los umbrales de ENTRADA del RP2040 (2,0 V y 0,8 V) están en su hoja de datos. Los niveles de SALIDA que usamos, 2,62 V y 0,5 V, dependen del drive configurado en el pad, que puede ser 2, 4, 8 o 12 mA, y no los pudimos confirmar contra la hoja: trátalos como referencia, no como garantía. De la Raspberry Pi 5 es peor: Raspberry Pi no publica los umbrales del chip RP1 que maneja sus GPIO, así que ahí se usan los del RP2040, que comparte arquitectura de pad. Lo único que sí es seguro de la Pi es que sus GPIO no toleran 5 V. Inventar un número acá cuesta una placa, así que preferimos marcarlo.

Los cuatro veredictos y qué significan de verdad

Conecta directo

El VOH garantizado del que manda queda por sobre el VIH del que recibe, el VOL por debajo del VIL, y no se pasa del máximo absoluto. Un cable y listo. Ejemplo: un ESP32 mandándole a una Raspberry Pi Pico sobran 0,64 V en alto y 0,47 V en bajo.

Funciona, pero no está garantizado. El mínimo de hoja de datos no alcanza, pero el valor típico sí. Es el caso ESP32 a Arduino UNO: el UNO pide 3,0 V y el ESP32 solo garantiza 2,64 V, aunque sin carga entrega los 3,3 V completos. Anda en todos los bancos y el margen real es de 0,3 V. Para un proyecto de escritorio, ya. Para algo que tenga que andar solo un año, no.

Necesita adaptación. Ni el valor típico alcanza. Pasa cuando 3,3 V le manda a un módulo de 5 V con entrada CMOS, que pide 3,5 V: faltan 0,86 V y no hay divisor que los ponga, porque un divisor solo baja. Ahí va conversor o un buffer 74HCT, que es un chip pensado justo para esto: entradas con umbral TTL y salidas de 5 V.

Así quemas el pin

El voltaje del que manda pasa el máximo absoluto del que recibe. 5 V contra los 3,6 V de un ESP32 son 1,4 V de más; contra los 3,8 V de una Pico, 1,2 V. Esto no es "va a leer mal": es corriente entrando por el diodo de protección del pin hacia el riel de 3,3 V. A veces aguanta meses. A veces sube el riel, cuelga la placa y se lleva el puerto USB del computador de paso.

El divisor: cuándo sí y cuándo no

Bajar de 5 V a 3,3 V con dos resistencias es la solución más barata que existe y funciona perfecto en un solo sentido y en una señal push pull. La fórmula es la de siempre:

Vout = Vin × R2 / (R1 + R2)

R1 va del lado alto al nodo, R2 del nodo a tierra, y el pin del microcontrolador cuelga del nodo. Para 5 V a 3,3 V, el par que esta calculadora elige del catálogo es 1 kΩ arriba y 2 kΩ abajo: deja 3,33 V en el pin, consume 1,67 mA y con las dos resistencias al 5% el peor caso queda entre 3,22 V y 3,44 V, siempre sobre el umbral del ESP32 y siempre bajo su máximo.

Ese chequeo del peor caso es el que casi nadie hace y es el que importa. Una resistencia de banda dorada es de 5%: si te tocan las dos en el extremo malo, un par que en el papel daba justo 3,6 V te entrega 3,7 V y estás fuera de especificación sin haberte equivocado en nada.

El divisor también tiene un techo de velocidad. Visto desde el pin, el divisor es una fuente con una resistencia en serie:

R_th = R1 × R2 / (R1 + R2) · f_3dB = 1 / (2π × R_th × C_total)

Con 1 kΩ y 2 kΩ, R_th vale 667 Ω. Con 30 cm de cable, que suman unos 18 pF, el conjunto sigue sirviendo hasta unos 12 MHz: para un I2C a 400 kHz o un UART a 115200 sobra, y para SPI a 10 MHz con cables largos ya no. Esa es la razón por la que un divisor que "andaba" deja de andar cuando subes la velocidad o alargas el cable.

En I2C el divisor no va, y no es opinión

En I2C nadie maneja el nivel alto: los dos lados solo tiran la línea a tierra y el 1 lo pone el pull up. Un divisor en esa línea se pelea con el pull up, sube el nivel bajo que ven los dos chips y arruina los tiempos de subida del bus. Lo que corresponde es un conversor bidireccional con MOSFET, que es el circuito que la propia especificación de I2C describe para unir dos rieles. Y el valor del pull up es otro cálculo aparte, que tiene su propia herramienta: calculadora de pull up para I2C.

Un sensor de 12V a un Arduino UNO

Esta calculadora cubre lógica de 1,8 V a 5,5 V, que es donde vive el 99% de los proyectos. Si lo que tienes es un sensor industrial de 12 V o 24 V hablándole a un Arduino, el mismo criterio se aplica con otros valores: para 12 V hacia un UNO, que lee un 1 desde 3,0 V y se rompe sobre 5,5 V, el par que sale del catálogo es 4,7 kΩ arriba y 3,3 kΩ abajo. Deja 4,95 V en el pin, consume 1,5 mA y su R_th de 1,94 kΩ mantiene el ancho de banda sobre los 4 MHz.

Con equipos industriales revisa una cosa más antes de conectar nada: si el otro lado tiene motores, contactores o cualquier cosa con inductancia, la separación correcta no es un divisor sino un optoacoplador. Un divisor no aísla: si el lado de 12 V se va a 60 V por una falla, al pin le llegan 24 V dividos y muere igual.

Los cinco errores que se repiten

Creer que "funciona" es lo mismo que "está bien"

El caso ESP32 a Arduino UNO funciona en el 100% de las mesas y sigue estando fuera de la especificación. El día que el circuito se va a una caja, con cables más largos y a 40 grados adentro, ese margen de 0,3 V empieza a fallar de a ratos. Los errores intermitentes son los más caros de encontrar.

Adaptar en la dirección equivocada

Un divisor resistivo baja, no sube. Si el problema es que a tu señal de 3,3 V le falta nivel para un módulo de 5 V, un divisor la deja peor. Ahí va un conversor bidireccional o un 74HCT, que lee con umbral TTL y saca 5 V limpios.

Alimentar un solo lado del conversor

El módulo conversor tiene LV, HV y GND, y necesita las tres. LV al riel de 3,3 V, HV al de 5 V y GND común. Con un solo lado alimentado no convierte nada y la señal pasa a medias, que es peor que no pasar.

Olvidar la tierra común

Todos estos números se miden contra tierra. Si las dos placas no comparten GND, no hay referencia y ningún umbral significa nada: puedes tener 3,3 V en un lado que el otro ve como 1 V o como 8 V. Es el error que más se parece a "el módulo venía malo".

Confiar en el "3,3V y 5V" de la descripción

En la mayoría de los módulos eso se refiere a la alimentación, no a los pines de datos. Un módulo con regulador a bordo acepta 5 V en VCC y por dentro trabaja a 3,3 V, con pines que no toleran 5 V. Si la ficha no dice explícitamente que la entrada es tolerante a 5 V, trátala como de 3,3 V.

Preguntas frecuentes

¿El ESP32 tolera 5V en sus pines?

No. La hoja de datos del ESP32 fija el máximo absoluto del pin en VDD más 0,3 V, o sea 3,6 V cuando está alimentado a 3,3 V. Meterle 5 V lo pasa en 1,4 V. A veces aguanta meses y después el pin se muere, y a veces la corriente entra por el diodo de protección hacia el riel de 3,3 V, sube el riel y cuelga o quema la placa entera. Que hoy funcione no significa que esté bien.

¿Cómo conecto un sensor HC SR04 de 5V a un ESP32?

Trig va directo, porque ahí manda el ESP32 y el módulo lee con umbrales TTL desde 2,0 V. Echo NO va directo: es una salida de 5 V hacia un pin que aguanta 3,6 V. Ahí va un divisor de 1 kΩ arriba y 2 kΩ abajo, que deja 3,33 V en el pin, consume 1,67 mA y con las dos resistencias al 5% se queda entre 3,22 V y 3,44 V, siempre bajo el máximo del ESP32.

¿Un Arduino UNO lee bien una señal de 3,3V?

Casi siempre sí, y no está garantizado. El ATmega328P a 5 V pide 0,6 del riel para leer un 1, o sea 3,0 V, y el ESP32 solo garantiza 2,64 V en alto. Como la salida del ESP32 sin carga llega a los 3,3 V completos, en la práctica el UNO lo lee: por eso funciona en todos los bancos. Pero el margen real es de 0,3 V y se lo come el ruido de un cable largo o una caída por corriente. Para algo que tenga que andar solo, va un buffer 74HCT o un conversor.

¿Sirve un divisor de resistencias para adaptar un bus I2C?

No. En I2C nadie maneja el nivel alto: los dos lados solo tiran la línea a tierra y el 1 lo pone el pull up. Un divisor en esa línea se pelea con el pull up, cambia el nivel bajo que ven los dos lados y arruina los tiempos de subida del bus. Para I2C entre 3,3 V y 5 V va un conversor bidireccional con MOSFET, que es exactamente el circuito que la especificación de I2C describe para unir dos rieles.

¿Qué diferencia hay entre VIH, VIL, VOH y VOL?

Los dos primeros son del que recibe: VIH es desde qué voltaje lee un 1 y VIL es hasta qué voltaje lee un 0. Entre los dos hay una tierra de nadie donde la entrada no sabe qué está leyendo. Los dos últimos son del que manda: VOH es lo mínimo que garantiza al mandar un 1 con carga y VOL lo máximo que deja al mandar un 0. Para que dos chips se entiendan hacen falta las dos comparaciones: VOH del que manda por sobre VIH del que recibe, y VOL del que manda por debajo de VIL del que recibe.

¿Un módulo que dice 3,3V y 5V se puede conectar a cualquiera de los dos?

Ojo con eso, porque casi siempre se refiere a la ALIMENTACIÓN y no a los pines de datos. Muchos módulos traen un regulador que acepta 5 V en VCC y por dentro trabajan a 3,3 V, con pines de datos que no toleran 5 V. Si la ficha no dice explícitamente que la entrada es tolerante a 5 V, trátala como de 3,3 V y adapta.

Dónde la usamos

Tutoriales del blog donde esta cuenta aparece en un proyecto de verdad.