← Índice del curso

Microcontroladores · Tema 16

La electrónica de un pin

Para el programa, un pin es un bit. Para el circuito, es un par de transistores, una resistencia, dos diodos y un comparador, con límites de corriente y de tensión que no perdonan. Conocer ese interior explica por qué un LED necesita resistencia, por qué una entrada flotante lee cualquier cosa y por qué no se conecta un motor a un pin.

01 · Punto de partida

Más que un bit

En el tema 15 escribiste ceros y unos en PORTB y los pines cambiaron. Pero «alto» y «bajo» son tensiones, y entre el registro y el cable hay circuitos reales con resistencias, capacidades y límites. Es el territorio de lo que aprendiste en los cursos de componentes y electrónica digital: niveles lógicos, familias CMOS, entradas flotantes y fan-out.

Este tema vuelve a ese terreno con un chip concreto, el ATmega328P. Las ideas valen para cualquier microcontrolador CMOS; los números cambian de un modelo a otro y de una tensión a otra, por eso conviene leer la sección de características eléctricas de la hoja de datos.

Retomamos los estados del pin del tema 15 y el cálculo de la resistencia de un LED del tema 4.

02 · El esquema

Por dentro de un pin

Estructura interna de un pin de entrada y salida Entre la alimentación VCC y la masa GND hay un transistor P que sube el pin y un transistor N que lo baja. Una resistencia de pull-up con interruptor conecta el pin a VCC. Dos diodos de protección lo limitan entre masa y VCC. Una entrada con disparador de Schmitt lleva el nivel del pin al registro PIN. Transistor PTransistor N Pull-up≈ 20–50 kΩ + interruptor Entradadisparador de Schmitt → PINx DiodoDiodo VCCGND sube el pin (salida en alto)baja el pin (salida en bajo) protecciónPIN

Los transistores P y N están controlados por la lógica de DDRx y PORTx: con la salida en alto, conduce el P; con la salida en bajo, el N; con el pin como entrada, ninguno de los dos. La resistencia de pull-up se conecta por un interruptor interno gobernado por PORTx, DDRx y el bit PUD. La entrada llega al registro PINx a través de un disparador de Schmitt, y los dos diodos protegen el pin de tensiones que se salgan del rango entre masa y VCC.

Cada bloque explica una regla que vas a aplicar a diario. Las secciones siguientes recorren uno por uno.

03 · Empujar y tirar

La salida push-pull

La salida tiene dos transistores complementarios: uno empuja el pin hacia VCC y el otro lo tira hacia masa. En cualquier momento conduce uno solo. Esa configuración se llama push-pull (o de contrafase) y es la salida habitual de la lógica CMOS que viste en el curso de electrónica digital.

Su ventaja es que el pin tiene una impedancia de salida baja tanto en alto como en bajo, de modo que cambia de nivel rápido y entrega o absorbe corriente con la misma fuerza. Los niveles no son ideales: con carga, la tensión se aparta de los rieles. La hoja de datos garantiza, con una alimentación de 5 V y una carga de 20 mA, una salida en alto de al menos 4,2 V y una salida en bajo de como máximo 0,9 V. Es decir, el pin se comporta como un interruptor con una resistencia de unos 40 Ω.

Esa resistencia interna, parecida a la de un transistor encendido, es la que hace que un pin se caliente si se le pide demasiada corriente, y la que obliga a incluirla en el cálculo exacto de un LED (sección 7).

04 · Decidir entre 0 y 1

La entrada y sus umbrales

Una entrada digital convierte una tensión continua en un bit. Para eso compara la tensión del pin con dos umbrales, que en el ATmega328P son proporcionales a VCC:

Umbrales de entrada del ATmega328P, según su hoja de datos.
AlimentaciónNivel bajo garantizado (VIL)Nivel alto garantizado (VIH)
2,4 V a 5,5 Vhasta 0,3 · VCCdesde 0,6 · VCC
1,8 V a 2,4 Vhasta 0,2 · VCCdesde 0,7 · VCC
Los mismos umbrales en voltios para las dos alimentaciones más comunes.
VCCSe lee 0Zona indefinidaSe lee 1
5 V≤ 1,5 V1,5 V a 3,0 V≥ 3,0 V
3,3 V≤ 0,99 V0,99 V a 1,98 V≥ 1,98 V

Entre los dos umbrales hay una zona indefinida donde la lectura no está garantizada. Una señal sana la atraviesa rápido; una señal lenta o ruidosa puede quedarse allí y provocar lecturas erráticas. Para atenuarlo, la entrada tiene un disparador de Schmitt, un comparador con histéresis: el umbral para pasar de 0 a 1 es mayor que el de pasar de 1 a 0, así que pequeñas oscilaciones alrededor de un único valor no producen rebotes en la lectura.

Los umbrales dan la clave de la compatibilidad del tema 2: una salida de 3,3 V alcanza el umbral de 3,0 V de un AVR a 5 V, pero con poco margen. Un valor típico de un dispositivo de 3,3 V cargado puede quedar por debajo, y entonces la lectura se vuelve incierta. En el sentido contrario, una señal de 5 V sobre una entrada alimentada con 3,3 V la sobrepasa en más de 0,5 V.

05 · Soltar el pin

Alta impedancia y colector abierto

Un pin en alta impedancia (Hi-Z) no conduce ni a VCC ni a masa: es como un cable desconectado. Es el estado de una entrada, y también lo que ocurre con un pin que se suelta a propósito. Tiene dos consecuencias:

  • Un pin Hi-Z sin nada conectado «flota». Su tensión queda determinada por las fugas y el ruido que capte: puede oscilar entre 0 y 1 al acercar un dedo. Además, si queda en la zona indefinida, los transistores del buffer de entrada conducen a la vez y consumen corriente de más. Por eso una entrada siempre debe estar conectada a un nivel definido, con un interruptor, un sensor o una resistencia.
  • Un pin Hi-Z deja que otro dispositivo maneje la línea. Es la base de los buses compartidos.

Los buses como I2C o 1-Wire usan líneas de colector abierto (open drain): los dispositivos solo pueden bajar la línea o soltarla, y una resistencia externa la sube. Así no hay conflicto si dos dispositivos intentan manejarla a la vez. Un pin push-pull no es de colector abierto, pero se lo emula con los registros del tema 15: se deja PORTx en 0 y se alterna DDRx:

PORTB &= ~(1 << PB0);      // el nivel que se impondrá al bajar la línea: 0

DDRB |=  (1 << PB0);         // salida en bajo: la línea baja
DDRB &= ~(1 << PB0);        // entrada Hi-Z: se suelta, la resistencia externa la sube

Este patrón nunca fuerza un nivel alto, de modo que dos dispositivos jamás pelean con tensiones opuestas. Es la forma segura de compartir una línea.

06 · Un nivel por defecto

Pull-up y pull-down

Una resistencia de pull-up conecta un pin a VCC; una de pull-down, a masa. Cumplen la misma función: dar al pin un nivel por defecto cuando nada más lo maneja. El caso típico es un pulsador entre el pin y masa: con el pulsador abierto, el pull-up mantiene un 1; al cerrarlo, el pin se conecta a masa y lee 0.

El AVR trae pull-ups internos de entre 20 kΩ y 50 kΩ que se activan con PORTx (con el pin como entrada). Ahorran un componente y espacio. No hay pull-downs internos, así que para uno se usa una resistencia externa.

Cómo elegir el valor de una resistencia externa

Dos fuerzas opuestas determinan el valor:

  • Una resistencia chica da un nivel firme y flancos rápidos, pero cuando el interruptor está cerrado circula I = VCC / R. Con 10 kΩ y 5 V son 0,5 mA; con 470 Ω, más de 10 mA, desperdiciados.
  • Una resistencia grande ahorra corriente, pero la fuga de entrada (hasta 1 µA por pin) produce una caída V = Ifuga · R: con 2 MΩ, 2 V. Además, la capacidad del cable forma con ella un filtro RC que enlentece el flanco de subida: aproximadamente 2,2 · R · C.

Un valor de 4,7 kΩ a 100 kΩ funciona en casi todos los casos; 10 kΩ es la elección habitual. La herramienta 3 del laboratorio muestra el compromiso numéricamente.

07 · Cuánto puede dar un pin

Límites de corriente y LED

Límites de corriente del ATmega328P (hoja de datos).
LímiteValorComentario
Máximo absoluto por pin40 mANo debe alcanzarse en uso normal
Corriente recomendada por pin20 mA a 5 V (10 mA a 3 V)Condición de prueba de VOH y VOL
Suma de un grupo de pines100 mALos pines del chip se reparten en grupos con este tope
Total por VCC y GND200 mASuma de todas las salidas más el consumo del propio chip

La consecuencia práctica: un pin enciende un LED o excita la base de un transistor, no más. Diez LED al máximo de 20 mA cada uno ya consumen todo el presupuesto del chip.

El LED con la caída del pin

En el tema 4 calculaste la resistencia como R = (VCC − Vf) / I, suponiendo que el pin es una conexión ideal a VCC. Con 20 mA, el pin cae 0,8 V respecto de VCC, lo que cambia el resultado. Una forma más exacta es tratar al pin como una resistencia en serie, Rpin ≈ 40 Ω:

R = (VCC − Vf) / I − Rpin

Para un LED rojo (Vf ≈ 2 V) a 15 mA con 5 V: 3 / 0,015 − 40 = 160 Ω, y el valor estándar siguiente es 180 Ω (13,6 mA reales). Sin considerar el pin, saldrían 200 Ω y 220 Ω de serie (11,5 mA). La diferencia es pequeña, pero crece con la corriente, y con 3,3 V puede decidir si el LED enciende.

El LED puede conectarse de dos maneras. Entregando corriente (source): ánodo al pin, cátodo a masa mediante la resistencia; el LED enciende con la salida en alto. Absorbiendo corriente (sink): ánodo a VCC mediante la resistencia, cátodo al pin; enciende con la salida en bajo. En los AVR ambas capacidades son parecidas; la segunda es frecuente cuando varios LED comparten una alimentación o un pin se usa de entrada y salida.

08 · Lo que no se debe hacer

Protección y tensiones fuera de rango

Los dos diodos del esquema protegen el pin contra descargas electrostáticas y picos breves. Si la tensión del pin supera VCC en más de unas décimas de volt, el diodo superior conduce y la corriente fluye hacia la alimentación; si baja de masa, lo hace el inferior. Las condiciones máximas absolutas de la hoja de datos son −0,5 V y VCC + 0,5 V.

Esos diodos no están pensados para trabajar en régimen. Conectar una señal de 5 V a un pin de 3,3 V hace que el diodo conduzca corriente continua a través de la alimentación del chip: el pin se estropea, el chip se calienta o la alimentación sube. Una resistencia en serie limita la corriente a un valor tolerable, pero no la elimina, y no es una solución fiable. Para señales de otra tensión se usa un divisor o un adaptador de niveles (tema 2).

  • Entradas expuestas (conectores, cables largos, botones al exterior): una resistencia en serie de 100 Ω a 1 kΩ y, a veces, un capacitor pequeño a masa o un diodo supresor reducen el efecto de las descargas electrostáticas.
  • Cargas inductivas (relés, motores): generan picos de tensión al apagarse que pueden superar esos límites; necesitan un diodo de rueda libre (tema 38).
  • Alimentación primero: aplicar una señal a un pin cuando el chip está apagado inyecta corriente a través del diodo hacia VCC y puede alimentarlo parcialmente por la entrada, con un comportamiento extraño. Se evita encendiendo las fuentes en el orden correcto.

09 · Analogía con programación

Umbrales, resistencias y fugas, con números

Este programa reúne los tres cálculos del tema. Primero compara la resistencia de un LED con y sin la caída del pin. Después barre tensiones de entrada con alimentaciones de 5 V y 3,3 V y muestra qué lee el pin en cada una (0, 1, o «?» si es indefinido). Por último calcula el nivel alto que llega a la entrada con distintas resistencias de pull-up, bajo el peor caso de fuga.

Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.

R_SALIDA = 40            # resistencia de salida equivalente de un pin (estimación), en ohmios
SERIE_E12 = [10, 12, 15, 18, 22, 27, 33, 39, 47, 56, 68, 82]


def e12_mayor_o_igual(ohmios):
    for decada in (1, 10, 100, 1_000, 10_000, 100_000):
        for base in SERIE_E12:
            if base * decada >= ohmios:
                return base * decada


def leer_nivel(vin, vcc):
    """Qué lee la entrada digital con umbrales del 30 % y el 60 % de VCC."""
    if vin > vcc + 0.5 or vin < -0.5:
        return "FUERA DE RANGO"
    if vin <= 0.3 * vcc:
        return "0"
    if vin >= 0.6 * vcc:
        return "1"
    return "?"


# 1) Un LED rojo (2 V) a 15 mA con una salida de 5 V: con y sin la caída del pin.
vcc, vf, i = 5.0, 2.0, 0.015
ingenua = (vcc - vf) / i
corregida = (vcc - vf) / i - R_SALIDA
for nombre, r in (("sin la caída del pin", ingenua), ("con la caída del pin", corregida)):
    estandar = e12_mayor_o_igual(r)
    corriente = (vcc - vf) / (estandar + R_SALIDA)
    print(f"{nombre:<22} R = {r:5.0f} Ω -> estándar {estandar:>3} Ω -> corriente real {corriente * 1000:4.1f} mA")

# 2) Barrido de tensiones de entrada con VCC = 5 V y con VCC = 3,3 V.
print()
for vcc in (5.0, 3.3):
    lecturas = " ".join(f"{v / 2:.1f}V:{leer_nivel(v / 2, vcc)}" for v in range(0, 12, 1))
    print(f"VCC = {vcc} V -> {lecturas}")

# 3) El nivel alto que llega a la entrada con un pull-up, según su valor (fuga máxima 1 µA).
print()
for r in (10_000, 100_000, 1_000_000, 2_000_000):
    nivel = 5.0 - 1e-6 * r
    estado = leer_nivel(nivel, 5.0)
    print(f"pull-up de {r / 1000:6.0f} kΩ -> nivel alto en la entrada {nivel:4.2f} V -> lee {estado}")

Resultado: con la caída del pin la resistencia es de 160 Ω y la serie E12 da 180 Ω (13,6 mA); sin ella, 200 Ω y 220 Ω (11,5 mA). Con VCC = 5 V la zona indefinida va de 1,5 a 3,0 V; con 3,3 V, de 0,99 a 1,98 V, y por encima de 3,8 V la entrada queda fuera de rango. Un pull-up de 2 MΩ deja el nivel alto en el límite exacto de 3 V. Probá cambiar R_SALIDA a 25 o a 60.

El modelo del pin como resistencia de 40 Ω es una aproximación lineal derivada de la caída garantizada a 20 mA; el comportamiento real de los transistores no es exactamente lineal, y la hoja de datos solo garantiza los puntos extremos.

10 · Exploración interactiva

LED, umbrales y pull-up

Tres calculadoras: la resistencia de un LED con la caída del pin (entregando o absorbiendo corriente), qué lee un pin de entrada para una tensión dada, y cómo afecta el valor de un pull-up a la corriente, al nivel alto y a la velocidad del flanco.

Banco del pin

1. Resistencia de un LED

Resistencia calculada—
Valor estándar E12 (igual o mayor)—
Corriente real—
Caída en el pin—

2. ¿Qué lee la entrada?

Umbral bajo—
Umbral alto—
Lectura—

3. Resistencia de pull-up externa

Corriente con el interruptor cerrado—
Nivel alto con la fuga máxima (1 µA)—
Tiempo de subida (2,2 · R · C)—

La resistencia de salida de 40 Ω de la herramienta 1 es una estimación que sale de la caída garantizada a 20 mA (0,8 V en alto, 0,9 V en bajo); no es un dato de la hoja de datos. Los umbrales de la herramienta 2 son los de esa hoja para el ATmega328P. La herramienta 3 usa la fuga máxima de entrada de 1 µA y supone una capacitancia de cable fija.

Recorrido guiado

  1. En la herramienta 1, con 5 V, 2 V y 15 mA entregando corriente, la resistencia es de 160 Ω y el valor estándar, 180 Ω (13,6 mA). Cambiá a «Absorbe corriente»: el cálculo es el mismo, con la caída en el pin del lado de masa.
  2. Con 3,3 V, un LED de 3 V (azul o blanco) y 10 mA, la herramienta avisa de que no queda margen: el pin no puede entregar esa corriente con tan poca tensión disponible. Probá con un LED rojo (2 V).
  3. Subí la corriente a 30 mA: aparece la advertencia de los 20 mA por pin.
  4. En la herramienta 2, probá «Salida de 3,3 V a 5 V»: lee 1, pero con menos margen del que parece (el umbral es de 3,0 V). «Salida de 5 V a 3,3 V» da fuera de rango. «Señal de 2,2 V» cae en la zona indefinida.
  5. En la herramienta 3, con 10 kΩ el nivel alto es de 4,99 V y el flanco, de 2,2 µs. Probá 2 MΩ: el nivel cae a 3 V, justo en el umbral, y el flanco se alarga a decenas de microsegundos.
Desafío: la zona de peligro de las señales lentas

Un sensor entrega una tensión que sube muy despacio, de 0 a 5 V en varios segundos. ¿Qué lee el pin mientras la tensión cruza entre 1,5 y 3 V? Puede oscilar entre 0 y 1 (el disparador de Schmitt reduce el problema, pero no lo elimina cuando hay ruido). Si la señal es analógica y lenta, no es un caso para una entrada digital, sino para el conversor analógico-digital (bloque 7).

11 · Método de trabajo

Cómo conectar algo a un pin

  1. Identificá el sentido: ¿el pin recibe una señal o entrega corriente?
  2. Revisá las tensiones: la del dispositivo debe caer dentro de los umbrales y del rango máximo del pin.
  3. Calculá la corriente: debe estar por debajo de 20 mA por pin y dentro de los límites de grupo y totales.
  4. Si es una salida a una carga: poné la resistencia (LED) o un transistor (cargas más grandes).
  5. Si es una entrada: asegurá un nivel definido siempre, con un pull-up (interno o externo) o un pull-down, y protegé las entradas expuestas.
  6. Medí: con el multímetro, la tensión del pin en cada estado; con el osciloscopio, la forma y el tiempo de los flancos.

Si algo se comporta de forma rara, medir directamente en el pin resuelve más dudas que releer el código: ¿llega el nivel que creías? ¿Con qué tensión? ¿Tiene ruido?

12 · Comprensión

Confusiones frecuentes

«Un pin en alto entrega 5 V»

Entrega 5 V sin carga. Con carga, la tensión baja unas décimas de volt (hasta 0,8 V con 20 mA). Con una carga demasiado grande, la caída aumenta y el pin se calienta.

«Una entrada sin conectar lee 0»

Lee lo que capte: ruido, la mano, el pin de al lado. Puede leer 0, 1 o alternar. Una entrada necesita siempre un nivel definido.

«El pull-up interno reemplaza a cualquier resistencia externa»

Con 20 a 50 kΩ es débil: sirve para un pulsador cercano, pero con cables largos o ruido eléctrico conviene una resistencia externa más chica. Y no existe pull-down interno.

«Si pongo una resistencia en serie, puedo conectar 5 V a un pin de 3,3 V»

La resistencia limita la corriente por el diodo de protección, pero esa corriente igual circula hacia la alimentación del chip. No es una solución fiable. Se usa un divisor o un adaptador de niveles.

«Con la suma de pines en 20 mA cada uno, no hay problema»

Hay un límite por grupo de pines (100 mA) y otro total (200 mA, que incluye el consumo del chip). Con muchos pines cargados al máximo, se superan aunque ninguno exceda su límite individual.

13 · Práctica guiada

Predecí antes de comprobar

1. ¿Qué lee el pin?

Un AVR alimentado con 5 V recibe una señal de 3,3 V de un sensor. ¿Qué lee y qué problema potencial hay?

Ver solución razonada

El umbral de nivel alto es 0,6 × 5 V = 3,0 V. 3,3 V lo supera y se lee 1, pero con solo 0,3 V de margen. Si el sensor entrega algo menos con carga o con la tensión baja, la lectura se vuelve incierta. Conviene un adaptador de niveles o alimentar el AVR a 3,3 V (con un reloj apropiado).

2. Resistencia de un LED

Un LED rojo de 2 V a 15 mA, entregado por un pin de 5 V con resistencia de salida de 40 Ω. ¿Qué resistencia E12 usás y cuál es la corriente real?

Ver solución

R = 3 / 0,015 − 40 = 160 Ω. El E12 igual o mayor es 180 Ω. Corriente real = 3 / (180 + 40) ≈ 13,6 mA.

3. Corriente de un pull-up

¿Cuánta corriente circula con un pulsador cerrado y un pull-up de 10 kΩ a 5 V y a 3,3 V? ¿Y con el pull-up interno de 20 a 50 kΩ?

Ver solución

10 kΩ: 0,5 mA a 5 V y 0,33 mA a 3,3 V. Pull-up interno a 5 V: entre 5/50 000 = 100 µA y 5/20 000 = 250 µA.

4. Un presupuesto de corriente

Un diseño enciende 14 LED a la vez, cada uno a 15 mA, desde un único chip. ¿Se respetan los límites?

Ver solución razonada

14 × 15 mA = 210 mA, por encima de los 200 mA que admiten VCC y GND, y eso sin contar el consumo del chip (unos 10 mA). Además, los pines se agrupan con un tope de 100 mA por grupo. No es viable. Se resuelve con menos LED simultáneos, con multiplexado (tema 18) o con un registro de desplazamiento como el 74HC595 del curso de circuitos secuenciales.

5. Un pull-up demasiado grande

Una entrada con un pull-up de 2 MΩ a 5 V, con la fuga máxima de 1 µA. ¿Qué nivel llega al pin y qué pasa con el margen?

Ver solución

Caída = 1 µA × 2 MΩ = 2 V. El nivel alto es 5 − 2 = 3 V, exactamente el umbral de nivel alto (0,6 × 5 V). No hay ningún margen: cualquier ruido o fuga adicional lo lleva a la zona indefinida. Hay que usar una resistencia bastante menor.

14 · Síntesis

Ideas para recordar

  • Un pin tiene un par de transistores (push-pull), un pull-up conmutable, dos diodos de protección y una entrada con disparador de Schmitt.
  • La salida entrega o absorbe corriente con una resistencia equivalente de unas decenas de ohmios; 20 mA es el valor recomendado y 40 mA el máximo absoluto.
  • La entrada lee 0 por debajo de 0,3·VCC y 1 por encima de 0,6·VCC; entre ambos, el resultado no está garantizado.
  • Una entrada flotante capta ruido; se le da siempre un nivel definido con un pull-up o un pull-down.
  • El pull-up interno es de 20 a 50 kΩ; una resistencia externa se elige entre unos 4,7 y 100 kΩ según corriente, nivel y velocidad.
  • La resistencia de un LED debe considerar la caída del pin: R = (VCC − Vf)/I − Rpin.
  • El rango de tensión del pin es de −0,5 V a VCC + 0,5 V; fuera de él, los diodos de protección conducen y el pin se daña.

¿Listo para el tema 17?

Antes de avanzar, calculá el nivel mínimo que lee un pin a 3,3 V, explicá por qué una entrada no se deja flotando y decí por qué un pin no puede alimentar un motor. Si podés justificar las tres respuestas, entendés la interfaz eléctrica del microcontrolador.

En el próximo tema usamos todo esto para leer el mundo: entradas digitales y antirrebote, con pulsadores, sondeo (polling) y filtrado por software.