01 · Punto de partida
Antes de programar, conocer el hardware
Un programa que funciona en el papel puede fallar en la mesa por motivos que no tienen que ver con el código: una masa sin conectar, una alimentación inestable, un pin usado para dos cosas, un LED sin resistencia. Este taller reúne todo lo que conviene verificar antes de escribir la primera línea.
Los temas 2 y 3 fueron teoría: familias, buses, memorias y registros. Ahora tomamos el ATmega328P real y la placa Arduino Uno que lo contiene, y nos preguntamos de dónde sale cada tensión y adónde va cada señal.
Objetivo: al terminar vas a poder identificar los componentes de la placa, ubicar cualquier pin del chip, medir las tensiones básicas, calcular la resistencia de un LED y describir cómo se programa el chip.
02 · Reconocimiento
Las zonas de una placa Arduino Uno
La placa es mucho más que el microcontrolador: agrega todo lo que el chip necesita para funcionar y para comunicarse con la computadora.
| Componente | Función |
|---|---|
| Conector USB | Alimenta la placa con 5 V y comunica con la computadora |
| Conversor USB a serie (ATmega16U2) | Traduce el USB a las señales UART que entiende el ATmega328P |
| Conector de alimentación externa | Admite una fuente de corriente continua (se recomiendan 7 a 12 V) |
| Regulador de tensión | Convierte la tensión externa a 5 V y, mediante otro regulador, a 3,3 V |
| ATmega328P | El microcontrolador que ejecuta tu programa |
| Resonador de 16 MHz | Genera el reloj del microcontrolador |
| Botón de reset | Reinicia el programa desde el principio |
| LED «L» (pin 13) | LED de prueba conectado a PB5 |
| LED «ON», «TX» y «RX» | Indican alimentación y actividad de la comunicación serie |
| Cabeceras hembra | Dan acceso a los pines digitales, analógicos y de alimentación |
| Conector ICSP | Permite programar el chip sin pasar por el cargador de arranque |
Las cabeceras de la placa agrupan los pines en digitales (D0 a D13), analógicos (A0 a A5) y alimentación (VIN, 5V, 3V3, GND, RESET y AREF). Cada pin de la placa está conectado a un pin concreto del chip.
03 · El chip
El ATmega328P en encapsulado DIP-28
El encapsulado DIP (dual in-line package) tiene 14 patas a cada lado. Se numeran desde la muesca: el pin 1 queda arriba a la izquierda y la numeración baja por la izquierda y sube por la derecha, como una «U».
Los pines se reparten en cuatro familias:
- Puertos de entrada y salida. Tres puertos de ocho bits como máximo: PORTB, PORTC y PORTD, con nombres como PB5 o PD3. La letra indica el puerto y el número, el bit.
- Alimentación. VCC, GND, AVCC y AREF.
- Reloj. XTAL1 y XTAL2 (que comparten los pines PB6 y PB7).
- Reset. El pin 1, que también puede configurarse como PC6.
Casi todos los pines tienen más de una función: el pin 19 es el bit 5 del puerto B (PB5), pero también la señal de reloj SCK del bus SPI. Qué función se usa depende de cómo configure el programa los registros. El laboratorio de este tema incluye un buscador con el dibujo del chip.
Tabla completa de los 28 pines
| Pin | Nombre | En la Uno | Funciones |
|---|---|---|---|
| 1 | PC6 | RESET | RESET |
| 2 | PD0 | D0 | RXD |
| 3 | PD1 | D1 | TXD |
| 4 | PD2 | D2 | INT0 |
| 5 | PD3 | D3 | INT1 · OC2B · PWM |
| 6 | PD4 | D4 | XCK · T0 |
| 7 | VCC | 5V | Alimentación |
| 8 | GND | GND | Masa |
| 9 | PB6 | — | XTAL1 |
| 10 | PB7 | — | XTAL2 |
| 11 | PD5 | D5 | OC0B · T1 · PWM |
| 12 | PD6 | D6 | OC0A · AIN0 · PWM |
| 13 | PD7 | D7 | AIN1 |
| 14 | PB0 | D8 | ICP1 · CLKO |
| 15 | PB1 | D9 | OC1A · PWM |
| 16 | PB2 | D10 | SS · OC1B · PWM |
| 17 | PB3 | D11 | MOSI · OC2A · PWM |
| 18 | PB4 | D12 | MISO |
| 19 | PB5 | D13 | SCK · LED L de la placa |
| 20 | AVCC | 5V | Alimentación del ADC |
| 21 | AREF | AREF | Referencia del ADC |
| 22 | GND | GND | Masa |
| 23 | PC0 | A0 | ADC0 |
| 24 | PC1 | A1 | ADC1 |
| 25 | PC2 | A2 | ADC2 |
| 26 | PC3 | A3 | ADC3 |
| 27 | PC4 | A4 | ADC4 · SDA |
| 28 | PC5 | A5 | ADC5 · SCL |
04 · La energía
Alimentación y desacople
El chip necesita al menos tres conexiones de energía: VCC (pin 7), GND (pines 8 y 22) y AVCC (pin 20), que alimenta el conversor analógico. Todas deben estar conectadas, aunque no uses el ADC. AREF (pin 21) es la referencia del conversor y, si no se usa una externa, se recomienda un capacitor de 100 nF hacia masa.
| Entrada | Tensión | Comentario |
|---|---|---|
| Cable USB | 5 V de la computadora | La opción más simple; la corriente está limitada por el puerto |
| Conector de alimentación o pin VIN | 7 a 12 V recomendados | Pasa por el regulador de 5 V, que disipa la diferencia en forma de calor |
| Pin 5V | 5 V | Entra directo, sin regulador: debe estar bien estabilizado |
El regulador interno de 3,3 V de la placa entrega solo unas decenas de miliamperes en su pin 3V3; alcanza para un sensor, no para un módulo de radio. Y esa tensión no alimenta al ATmega328P, que sigue funcionando con 5 V.
Capacitores de desacople
Cada vez que la lógica interna conmuta, el chip toma pulsos breves de corriente. Si la fuente está lejos, esos pulsos provocan caídas momentáneas de tensión que pueden reiniciar el microcontrolador o falsear una lectura. Un capacitor cerámico de 100 nF lo más cerca posible entre VCC y GND aporta esa corriente local. Se coloca uno por cada par de pines de alimentación (VCC–GND y AVCC–GND).
05 · Dos nombres para cada pin
Pines del chip y pines de la placa
El entorno de Arduino numera los pines con su propia convención (D0 a D13, A0 a A5), mientras que la hoja de datos usa los nombres de puerto (PD0, PB5, PC3…). Para trabajar con registros, que es el enfoque de este curso, necesitás pasar de uno a otro.
| Arduino | Puerto del chip | Funciones destacadas |
|---|---|---|
| D0 a D7 | PD0 a PD7 | D0 y D1 son la UART (RX y TX), compartidos con el USB; D3, D5 y D6 tienen PWM; D2 y D3 admiten interrupciones externas |
| D8 a D13 | PB0 a PB5 | D9, D10 y D11 tienen PWM; D10 a D13 forman el bus SPI; D13 maneja el LED «L» |
| A0 a A5 | PC0 a PC5 | Entradas del ADC; A4 y A5 forman el bus I2C (SDA y SCL); también sirven como pines digitales |
Los dos pines PB6 y PB7 están ocupados por el resonador de 16 MHz y no están disponibles en la placa. En un chip con otra configuración de reloj podrían usarse como entradas y salidas.
Atención con D0 y D1
La placa conecta los pines D0 y D1 al chip USB-serie. Si dejás un cable conectado a ellos mientras cargás un programa, la carga puede fallar. Cuando no estés usando la comunicación serie, evitá ocuparlos.
06 · Arranque y ritmo
Reset, reloj y circuito mínimo
El reset (pin 1) es activo en bajo: cuando se lleva a masa, el microcontrolador se detiene y, al soltarlo, empieza a ejecutar el programa desde el principio. Para que no se reinicie por ruido, se mantiene en nivel alto con una resistencia de pull-up (normalmente de 10 kΩ a VCC). El botón de la placa conecta ese pin a masa.
El reloj marca el ritmo de ejecución. Una placa Uno usa un resonador de 16 MHz conectado a XTAL1 y XTAL2. El chip también tiene un oscilador RC interno de 8 MHz, menos preciso, que permite funcionar sin componentes externos.
Con eso se puede armar el circuito mínimo de un ATmega328P fuera de la placa:
| Componente | Conexión | Función |
|---|---|---|
| Fuente de 5 V | VCC (7), AVCC (20) y GND (8 y 22) | Alimenta el chip |
| 2 capacitores de 100 nF | VCC–GND y AVCC–GND | Desacople |
| Resistencia de 10 kΩ | RESET (1) a VCC | Mantiene el chip en marcha |
| Cristal de 16 MHz | XTAL1 (9) y XTAL2 (10) | Reloj preciso |
| 2 capacitores de 22 pF | Cada pata del cristal a GND | Ayudan a que el cristal oscile |
| LED con resistencia de 330 Ω | PB5 (19) a GND, en serie | Salida de prueba |
Ese chip suelto, sin cargador de arranque, hay que programarlo con un programador ISP. Un chip que se compra «virgen» viene configurado para usar el oscilador interno; para que utilice el cristal hay que cambiar sus fuses, tema del bloque 3.
07 · El camino del programa
De la computadora a la Flash
Compilar un programa produce un archivo binario con las instrucciones. Ese archivo tiene que llegar a la memoria Flash del chip. Hay dos formas habituales:
Mediante cargador de arranque
Una pequeña pieza de software, el bootloader, vive en una zona reservada de la Flash. Al reiniciar, espera unos instantes por si la computadora envía un programa por la UART y, si lo recibe, lo graba. La Uno incluye este cargador y el chip USB-serie hace de puente. El inconveniente es que ocupa memoria.
Mediante programador ISP
La programación serie en circuito (in-system programming) usa seis conexiones: MISO, MOSI, SCK, RESET, VCC y GND. Escribe en la Flash directamente, sin cargador, y permite cambiar los fuses. Es el método para chips nuevos y para producción.
La placa se reinicia automáticamente antes de cada carga: la señal DTR del puerto serie, a través de un capacitor de 100 nF, baja un instante el pin de reset, y el cargador queda listo para recibir. Por eso no hace falta pulsar el botón.
El mismo cable USB sirve además para comunicarse con el programa en ejecución: el puerto serie virtual de la computadora recibe lo que el ATmega328P envía por TX. Lo usaremos en el tema de comunicación serie para depurar con mensajes.
08 · Lo que un pin soporta
Límites eléctricos de los pines
Un pin de salida del microcontrolador es un par de transistores: uno conecta el pin a VCC y otro a masa. Esa estructura entrega y absorbe corrientes pequeñas. Según la hoja de datos del ATmega328P:
- El máximo absoluto por pin es de 40 mA, valor que no debe alcanzarse en uso normal. Se recomienda no superar 20 mA.
- La suma de las corrientes de todos los pines tiene también un límite total, del orden de 200 mA para la alimentación del chip.
- La tensión en un pin no debe superar VCC + 0,5 V ni bajar de −0,5 V.
Un LED siempre con resistencia
Un LED no limita su propia corriente: si se lo conecta directamente a una fuente, la corriente crece hasta dañarlo (y al pin del microcontrolador). La resistencia en serie fija la corriente según la ley de Ohm:
Con una salida de 5 V, un LED rojo cuya tensión directa Vf ronda los 2 V y una corriente deseada de 10 mA: R = (5 − 2) / 0,010 = 300 Ω. Como 300 Ω no es un valor estándar, se elige el siguiente de la serie, 330 Ω, con lo que la corriente baja a 3 / 330 ≈ 9,1 mA. La resistencia disipa P = I²·R ≈ 27 mW, muy por debajo de 1/4 W.
Si querés mover cargas que superen los límites del pin (motores, relés, tiras de LED), no se conectan directamente: se usa un transistor o un controlador intermedio, tema del bloque de actuadores.
09 · Analogía con programación
Del número de pin al registro y la máscara
Cuando en Arduino escribís digitalWrite(13, HIGH), la biblioteca hace por vos una traducción: determina el puerto, el bit y el registro. Este modelo en Python reproduce esa traducción para que veas qué hay detrás:
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
# Correspondencia entre pines de Arduino Uno y puertos del ATmega328P
def pin_a_puerto(d):
if 0 <= d <= 7:
return "D", d
if 8 <= d <= 13:
return "B", d - 8
raise ValueError("pin digital fuera de 0..13")
# Direcciones de datos de (PIN, DDR, PORT) de cada puerto
DIRECCIONES = {"B": (0x23, 0x24, 0x25),
"C": (0x26, 0x27, 0x28),
"D": (0x29, 0x2A, 0x2B)}
for d in (13, 8, 5, 0):
puerto, bit = pin_a_puerto(d)
pin, ddr, port = DIRECCIONES[puerto]
print(f"D{d:<2} -> P{puerto}{bit} máscara {1 << bit:#04x} ({1 << bit:08b}) PORT{puerto} = {port:#04x}")
Resultado: D13 → PB5, máscara 0x20; D8 → PB0, máscara 0x01; D5 → PD5, máscara 0x20; D0 → PD0, máscara 0x01. Probá con D10, D12 y 14, y observá el error.
En C, con esos datos, el equivalente de digitalWrite(13, HIGH) es simplemente PORTB |= 0x20;. Hacerlo directamente evita la traducción y ocupa mucho menos tiempo. La analogía tiene un límite: el modelo cubre solo los pines digitales y no los modos especiales, como el PWM.
10 · Exploración interactiva
Buscador de pines y calculadora de LED
La primera herramienta dibuja el chip y marca los pines que coinciden con tu búsqueda. La segunda calcula la resistencia de un LED con la serie estándar E12 y comprueba que la corriente no supere el límite del pin.
Mesa de trabajo virtual
1. Buscar un pin
2. Resistencia para un LED
Un número solo se interpreta como pin del chip (1 a 28). Para pines de la placa escribí la letra: D13, A3. La calculadora elige siempre el valor estándar igual o mayor, de modo que la corriente real nunca supere la deseada. Los valores típicos de tensión directa son orientativos (rojo cerca de 2 V; verde, amarillo y blanco entre 2 V y 3,3 V); la hoja de datos de tu LED es la referencia.
Recorrido guiado
- Buscá
PB5: es el pin 19 del chip, D13 en la placa, y también SCK. Es el LED «L». - Buscá
PWM: aparecen seis pines (D3, D5, D6, D9, D10, D11). Fijate en cuáles comparten puerto. - Buscá
SDAySCL: son A4 y A5, los pines del bus I2C. Si usás I2C, ya no los tenés disponibles para leer sensores analógicos. - Buscá
GND: hay dos pines de masa en el chip. Ambos deben conectarse. - En la calculadora, dejá 5 V, 2 V y 10 mA: resultan 300 Ω calculados, 330 Ω estándar y 9,1 mA reales. Pasá la salida a 3,3 V con un LED de 3 V y observá cómo cambia la resistencia.
Desafío: una corriente que el pin no soporta
Subí la corriente deseada a 25 mA con 5 V y un LED de 2 V. La calculadora advierte que se superan los 20 mA recomendados por pin. Un LED de alto brillo se alimenta con un transistor, no directamente desde el pin del microcontrolador.
11 · Método de trabajo
Procedimiento de medición paso a paso
- Inspeccioná la placa a simple vista: sin componentes quemados ni cortocircuitos visibles en la protoboard.
- Conectá solo el USB. Debe encenderse el LED «ON».
- Medí la alimentación con el multímetro en continua: entre el pin 5V y GND esperá cerca de 5 V; entre 3V3 y GND, cerca de 3,3 V. Los valores exactos varían con la placa y la fuente.
- Verificá el reset. El pin RESET debe leer cerca de 5 V en reposo, y bajar a casi 0 V mientras mantenés pulsado el botón.
- Armá el LED en la protoboard con la resistencia de 330 Ω en serie, desde un pin digital hasta GND. Respetá la polaridad: la pata larga del LED (ánodo) va hacia el pin.
- Medí la tensión del pin cuando el programa lo pone en alto y en bajo: debe pasar de cerca de 0 V a algo menos de 5 V. Si el multímetro muestra valores intermedios, revisá las conexiones.
Si algo falla, el orden de sospecha es: alimentación y masa, reset, cableado del LED y, recién después, el programa. Con el osciloscopio podés ver el reset al soltar el botón y las transiciones del pin en cada cambio.
12 · Comprensión
Confusiones frecuentes
«Los pines digitales de la placa son los mismos que los del chip»
Las posiciones y los números son distintos: D13 de la placa es el pin 19 del chip, PB5 en la nomenclatura de puertos. Hay una tabla de equivalencias en el tema, y las hojas de datos usan siempre los nombres del fabricante.
«Si no uso el conversor analógico, no necesito conectar AVCC»
AVCC alimenta el circuito analógico del chip y debe conectarse siempre, aun si el ADC no se utiliza. De lo contrario, el comportamiento puede ser errático.
«El pin 3V3 de la placa alimenta el microcontrolador»
El ATmega328P de la Uno funciona con 5 V. El pin 3V3 es una salida de un regulador separado, pensada para módulos externos de baja corriente.
«Una resistencia más pequeña hace brillar más al LED, sin riesgo»
Aumenta la corriente. Por encima del límite del LED lo daña, y por encima de unos 20 mA por pin exige más de lo recomendado al microcontrolador. La resistencia protege a ambos.
«Para programar el chip siempre hace falta un cargador de arranque»
El cargador es una comodidad que permite programar por USB. Con un programador ISP se escribe directamente en la Flash, incluso en un chip virgen, y se libera la memoria que ocuparía el cargador.
13 · Práctica guiada
Predecí antes de comprobar
1. Traducir nombres
Indicá el puerto del chip, el pin físico y la máscara para D11 de la placa Uno. ¿Qué otras funciones tiene?
Ver solución
D11 es PB3, el pin 17 del chip, con máscara 1 << 3 = 0x08. También es MOSI del bus SPI y la salida OC2A de un temporizador (PWM).
2. Resistencia para un LED verde
Un LED verde con Vf = 2,2 V se alimenta desde un pin de 5 V con 8 mA. ¿Qué resistencia estándar de la serie E12 corresponde y cuál es la corriente real?
Ver solución
R = (5 − 2,2) / 0,008 = 350 Ω. El valor E12 igual o mayor es 390 Ω. La corriente real es 2,8 / 390 ≈ 7,2 mA.
3. Pines que se pisan
Un proyecto usa un sensor I2C, dos entradas analógicas y seis salidas PWM. ¿Qué problema aparece en la Uno?
Ver solución razonada
El I2C ocupa A4 y A5, de modo que quedan A0 a A3 para entradas analógicas, suficientes para dos. En cambio, la Uno solo tiene seis pines PWM (D3, D5, D6, D9, D10, D11), y varios están compartidos con SPI o con la UART. Conviene revisar qué buses se necesitan antes de asignarlos.
4. Medir sin conectar
Con la placa conectada por USB, el multímetro entre RESET y GND marca 0 V sin pulsar el botón. ¿Qué indica?
Ver solución razonada
El pin debería estar cerca de 5 V por el pull-up. Un valor de 0 V sugiere que el pin está a masa: un cable o un componente de la protoboard lo cortocircuita, o el multímetro está mal conectado. Mientras el reset esté en bajo, el programa no corre.
5. Chip suelto
Armás el circuito mínimo con un chip nuevo y no logra cargar un programa por USB. ¿Por qué y cómo se resuelve?
Ver solución razonada
El chip virgen no tiene cargador de arranque y, además, el circuito no tiene el chip USB-serie. Hay que programarlo con un programador ISP conectado a MISO, MOSI, SCK, RESET, VCC y GND; allí se puede grabar el cargador o directamente el programa, y ajustar los fuses para elegir el reloj.
14 · Síntesis
Ideas para recordar
- La placa Uno agrega al ATmega328P la alimentación, el reloj, el botón de reset y un puente USB a serie.
- El chip tiene 28 pines: tres puertos (B, C y D), alimentación (VCC, AVCC, GND y AREF), reloj y reset.
- Casi todos los pines tienen varias funciones; el programa elige cuál se usa.
- VCC, AVCC y GND se conectan siempre, con capacitores de desacople de 100 nF.
- El reset es activo en bajo y se mantiene alto con una resistencia de 10 kΩ.
- Los pines D0 a D13 y A0 a A5 de la placa equivalen a PD, PB y PC del chip.
- Un pin soporta 20 mA de forma recomendada y 40 mA como máximo absoluto; el LED siempre lleva resistencia: R = (VCC − Vf) / I.
- El programa llega a la Flash por un cargador de arranque o por un programador ISP.
¿Listo para el tema 5?
Antes de avanzar, ubicá en el chip los pines de alimentación, reset y reloj; traducí D13, D8 y A2 a nombres de puerto; calculá la resistencia de un LED rojo a 10 mA; y explicá cómo llega tu programa a la Flash. Si podés justificar las cuatro respuestas, tu mesa de trabajo está lista.
En el próximo tema vamos a ver el entorno de trabajo: cómo compilar, cargar y depurar un programa, con la cadena de herramientas, el cargador de arranque y el primer programa que hace parpadear un LED.