Los niveles lógicos son los rangos de tensión que un circuito interpreta como un 0 o un 1. No existe un único voltaje exacto para cada estado, sino umbrales de entrada y márgenes de seguridad que dependen de cada familia lógica.
Hoy en día vivimos en un mundo híbrido. Tenemos placas antiguas trabajando a 5V y sensores o micros modernos (ESP32, Raspberry Pi, STM32…) trabajando a 3.3V. Conectarlos sin pensar es una forma estupenda de liberar humo y aprender por las malas.
La realidad física es sucia. ¿Qué pasa si un cable tiene 4.5V? ¿Es un 1? ¿Y si tiene 2.5V? ¿Es un 1, un 0, o un error?
Los fabricantes definen umbrales para garantizar que un chip entienda a otro, y no todas las familias usan los mismos valores. Vamos a comparar TTL y CMOS y a ver qué ocurre al conectar 5 V con 3,3 V.
Las familias lógicas
TTL (Transistor-Transistor Logic)
Es la tecnología clásica (series 74LSxx), basada en transistores BJT.
- Alimentación estándar: 5V.
- Son robustos pero consumen bastante corriente (se calientan).
- Sus umbrales son muy permisivos con el nivel alto.
CMOS (Complementary Metal-Oxide-Semiconductor)
Es la tecnología moderna (series 74HCxx, y todos los micros actuales), basada en transistores MOSFET.
- Alimentación flexible: 5V, 3.3V, 1.8V…
- Consumo estático casi nulo.
- Tienen umbrales distintos a TTL.
Los umbrales de tensión ( )
Para entender la compatibilidad, tenemos que mirar cuatro parámetros en el datasheet de cualquier chip:
El caso TTL (5V)
- 0 lógico: De 0V a 0.8V.
- 1 lógico: De 2.0V a 5V.
- Zona muerta: De 0.8V a 2.0V.
Para un chip TTL, 2.5V es un “1” perfecto. Esto es una ventaja enorme para la compatibilidad, como veremos luego.
El caso CMOS (5V)
Los CMOS son más estrictos y dependen del voltaje de alimentación (
- 0 lógico: De 0V a aprox 1.5V (
). - 1 lógico: De aprox 3.5V a 5V (
). - Zona muerta: De 1.5V a 3.5V.
El conflicto: conectando 5V y 3.3V
Aquí llega el problema real. Tienes un Arduino UNO (5V) y un sensor o una Raspberry Pi (3.3V).
Escenario A: salida 3.3V entrada 5V
El sensor de 3.3V envía datos al Arduino de 5V. El dispositivo de 3.3V entregará unos 3.2V cuando quiera decir “1”.
- Si la entrada es TTL (o compatible): Sí. Como 3.2V es mayor que 2.0V, lo ve como un HIGH sólido.
- Si la entrada es CMOS estricta (
): No. 3.2V cae en la zona muerta. Podría funcionar, pero es inestable. - Caso Arduino: El ATmega328P tiene un
de . Así que 3.3V es suficiente para ser un HIGH.
Veredicto: Generalmente funciona directo, aunque vamos un poco justos.
Escenario B: salida de 5 V → entrada de 3,3 V 🚨
El Arduino de 5V envía datos a la Raspberry Pi o al ESP32 de 3,3V El Arduino entrega 5V para decir “1”.
El dispositivo receptor funciona a 3.3V. Sus diodos de protección internos no aguantan más de 3.6V.
- Resultado: Quemas el pin de entrada o el procesador entero del dispositivo de 3.3V.
- Excepción: Algunos pines de microcontroladores modernos son “5V tolerant”, pero ante la duda, asume que no lo son.
Adaptación de niveles
¿Cómo conectamos el Arduino (5V) al ESP32 (3.3V) de forma segura?
La solución barata para señales lentas. Usamos dos resistencias (
Valores típicos:
Para protocolos rápidos y bidireccionales como I2C, el divisor de tensión no sirve. Usamos un módulo conversor de niveles (basado en un MOSFET BSS138).
- Tiene un lado HV (High Voltage, 5V).
- Tiene un lado LV (Low Voltage, 3.3V).
- Traduce automáticamente en ambas direcciones
Vimos esto en su propia entrada