Otras familias de microcontroladores
Aprender un microcontrolador sirve; entender en qué se parecen todos sirve mucho más. Este eje sale de la familia con la que se empezó y compara arquitecturas, recursos y herramientas, para poder elegir el chip adecuado a cada problema y migrar sin empezar de cero.
La arquitectura básica, los registros de control, la memoria y los puertos de E/S se desarrollan en familia de microcontroladores, y los periféricos internos en periféricos del microcontrolador. Acá se compara entre familias.
01Las decisiones de arquitectura
| Decisión | Qué implica |
|---|---|
| Harvard o von Neumann | Harvard tiene buses separados para programa y datos: puede buscar instrucción y dato en el mismo ciclo. Von Neumann usa un solo bus, más simple y más flexible. Casi todos los microcontroladores usan variantes de Harvard. |
| RISC o CISC | RISC: pocas instrucciones, casi todas de un ciclo, y un compilador que las combina. Es lo que usan AVR, PIC y ARM. CISC sobrevive sobre todo en el mundo de las PC. |
| 8, 16 o 32 bits | El ancho del camino de datos. Con 8 bits, sumar dos variables de 32 bits lleva varias instrucciones; con 32 bits, una. No es sólo velocidad: también cambia cuánta memoria se puede direccionar. |
| Registros o acumulador | Los AVR y los ARM tienen bancos de registros generales; los PIC clásicos trabajan casi todo contra un acumulador único, lo que obliga a más movimientos. |
| Pipeline | Solapa la búsqueda de una instrucción con la ejecución de la anterior. Sube el rendimiento y complica el conteo exacto de ciclos, que en control fino a veces importa. |
Durante años, elegir 8 bits era la decisión económica. Hoy un ARM Cortex-M0+ cuesta lo mismo o menos que un 8 bits equivalente, con más memoria y periféricos mejores. La razón para seguir usando 8 bits suele ser otra: simplicidad, consumo en reposo muy bajo, disponibilidad y el hecho de que el equipo ya lo conoce.
02Panorama comparado
| Familia | Núcleo | Reloj | Flash / RAM | Rasgo distintivo |
|---|---|---|---|---|
| AVR (ATmega328P) | 8 bits RISC | 16 MHz | 32 kB / 2 kB | El de las placas Arduino clásicas. Documentación enorme y comportamiento muy predecible. |
| PIC (16F877A) | 8 bits RISC | 20 MHz | 14 kB / 368 B | Décadas de industria detrás. Muy robusto, con periféricos analógicos buenos. |
| ARM Cortex-M (STM32F103) | 32 bits | 72 MHz | 128 kB / 20 kB | El estándar industrial actual. Muchos fabricantes, un mismo núcleo y herramientas compartidas. |
| ESP32 | 32 bits, doble núcleo | 240 MHz | 4 MB / 520 kB | Trae WiFi y Bluetooth adentro. Es la opción natural de cualquier proyecto conectado. |
| RP2040 | 32 bits, doble Cortex-M0+ | 133 MHz | externa / 264 kB | Sus bloques PIO generan protocolos por hardware sin ocupar la CPU. |
Los conceptos son los mismos en todas: puertos de entrada y salida con sus registros de dirección y de dato, temporizadores, interrupciones con su vector y su rutina de atención, conversores A/D, PWM, comunicación serie. Lo que cambia son los nombres de los registros y las herramientas. Por eso quien entendió bien una familia aprende la siguiente en días, no en meses.
03Cómo se elige
| Criterio | Qué preguntar |
|---|---|
| Periféricos | ¿Tiene la cantidad de canales A/D, PWM, puertos serie y temporizadores que el proyecto necesita? Es lo primero que descarta candidatos. |
| Memoria | Flash para el programa y RAM para los datos, con margen. Quedarse sin RAM a mitad de desarrollo obliga a rediseñar. |
| Consumo | Si funciona a batería, importan los modos de bajo consumo y la corriente en reposo, no la de trabajo. |
| Conectividad | ¿Hace falta WiFi, Bluetooth, Ethernet, CAN? Integrarlo sale más barato que agregarlo afuera. |
| Encapsulado | Un chip sólo disponible en encapsulado de montaje superficial fino puede ser imposible de soldar en el taller. |
| Disponibilidad y precio | El mejor chip del mundo no sirve si no se consigue en el país o si tiene un año de espera. |
| Herramientas y comunidad | Compilador, depurador, bibliotecas, ejemplos y gente que ya resolvió el mismo problema. |
Requisitos: 4 sensores analógicos, registro en tarjeta de memoria, reloj de tiempo real, pantalla, envío de datos por WiFi una vez por hora y alimentación a batería con panel solar chico.
- Un 8 bits clásico queda corto: 2 kB de RAM no alcanzan cómodos para manejar tarjeta, pantalla y buffers, y habría que agregar un módulo WiFi externo.
- Un ESP32 resuelve WiFi, memoria y potencia de cálculo de una sola vez, y su sueño profundo baja el consumo a decenas de microamperes entre transmisiones.
- Decisión: ESP32, con el detalle de que su conversor A/D es mediocre. Si la precisión de temperatura importa, se agrega un conversor externo por bus serie.
Ese último punto es el tipo de detalle que sólo aparece leyendo la hoja de datos: la decisión no se toma por la marca sino por los números.
04Migrar de una familia a otra
- La lógica del programa: máquinas de estado, cálculos, filtrado, decisiones.
- Los protocolos y los formatos de datos.
- Todo lo escrito en C estándar sin tocar registros.
- La configuración de relojes, puertos y periféricos.
- Las rutinas de atención de interrupción y sus vectores.
- Cualquier cosa que dependa del conteo exacto de ciclos.
- El arranque, la tabla de vectores y el mapa de memoria.
/* Capa de abstraccion: la aplicacion nunca toca registros. */ /* hal.h — la misma interfaz para cualquier familia */ void hal_init(void); void hal_led(uint8_t encendido); uint16_t hal_adc(uint8_t canal); void hal_espera_ms(uint16_t ms); /* hal_avr.c — implementacion para AVR */ void hal_led(uint8_t e) { if (e) PORTB |= (1<<PB5); else PORTB &= ~(1<<PB5); } /* hal_stm32.c — implementacion para STM32, misma firma */ void hal_led(uint8_t e) { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, e ? GPIO_PIN_SET : GPIO_PIN_RESET); } /* app.c — no cambia una linea al migrar */ while (1) { hal_led(1); hal_espera_ms(500); hal_led(0); hal_espera_ms(500); }
Agregarla después, sobre un programa donde los registros están salpicados por todos lados, cuesta casi tanto como reescribirlo. Separar desde el primer día lo que es lógica de lo que es hardware no cuesta nada y vale muchísimo, incluso si nunca se migra: hace posible probar la lógica en la computadora, sin el chip.
05Herramientas de desarrollo
| Herramienta | Qué hace |
|---|---|
| Compilador cruzado | Corre en la PC y genera código para el microcontrolador. En la práctica, GCC para AVR, ARM y RISC-V. |
| Enlazador y script de memoria | Decide dónde va cada cosa: código en flash, variables en RAM, pila. Es lo que más cambia entre familias. |
| Grabador | Escribe el binario en la flash del chip: ISP en AVR, ICSP en PIC, SWD en ARM, puerto serie en ESP32. |
| Depurador | Detiene la ejecución, pone puntos de parada y muestra variables y registros en el chip real. Con SWD alcanzan dos pines. |
| Analizador lógico | Muestra lo que pasa en los pines. Para depurar comunicación serie es más útil que el depurador. |
| Simulador | Permite probar sin hardware. Sirve para la lógica; nunca reemplaza la prueba en el circuito real. |
Y funciona, hasta que deja de funcionar. Aprender a usar un depurador de verdad —parar en una línea, mirar variables, avanzar paso a paso— cambia por completo la velocidad para encontrar problemas. Un adaptador SWD cuesta poco y es la mejor inversión del taller después del osciloscopio.
06En el laboratorio
Escribir un programa que lea un potenciómetro y regule el brillo de un LED por PWM, con capa de abstracción. Implementarlo en dos familias distintas cambiando sólo el archivo de la capa. Medir cuántas líneas hubo que tocar: es la demostración concreta de para qué sirve separar capas.
Elegir tres microcontroladores y armar una tabla propia con: canales A/D y su resolución, cantidad de temporizadores, memoria, consumo en reposo, tensión de trabajo, encapsulados y precio real en el mercado local. Justificar cuál se elegiría para un proyecto concreto.
Con un adaptador SWD o similar, poner un punto de parada dentro de una rutina de interrupción, observar el valor de las variables y avanzar paso a paso. Comparar la experiencia con depurar el mismo problema encendiendo y apagando un LED.
Medir con un multímetro en serie la corriente de una placa en funcionamiento normal, en reposo y en sueño profundo. Calcular la autonomía con una batería determinada en cada caso. La diferencia entre los tres estados suele ser de tres órdenes de magnitud.
07Errores frecuentes
| Error | Consecuencia |
|---|---|
| Elegir el chip por costumbre | Se termina agregando afuera lo que otro chip traía adentro, más caro y más frágil. |
| No verificar disponibilidad real | El proyecto queda trabado esperando un componente que no se consigue. |
| Mezclar 5 V con 3,3 V | Los ARM y el ESP32 trabajan a 3,3 V y no toleran 5 V en sus pines: se dañan. |
| Registros esparcidos por todo el programa | Migrar o probar se vuelve imposible sin reescribir. |
| Asumir que el A/D interno es bueno | Varía muchísimo entre familias. Si la medición importa, hay que leer la especificación real. |
| Quedarse sin RAM | El programa se comporta de manera errática por desbordes de pila, y el síntoma no señala la causa. |
| Depurar sólo con LED | Se pierden horas en problemas que un punto de parada resuelve en minutos. |
08Autoevaluación
¿Qué ventaja da la arquitectura Harvard en un microcontrolador?
Buses separados para programa y datos: puede buscar la instrucción siguiente y acceder a un dato en el mismo ciclo, lo que sube el rendimiento sin subir el reloj.
¿Por qué un núcleo de 32 bits no es sólo «más rápido»?
Porque además cambia cuánta memoria puede direccionar y cuántas instrucciones hacen falta para operar con variables grandes: sumar dos enteros de 32 bits es una instrucción en lugar de varias.
¿Qué rasgo distingue al ESP32?
Que trae WiFi y Bluetooth integrados, además de doble núcleo y bastante memoria. Es lo que lo vuelve la opción natural para un proyecto conectado.
¿Cuál es el primer criterio que descarta candidatos al elegir un chip?
Los periféricos: si no tiene la cantidad de canales A/D, PWM o puertos serie que el proyecto necesita, no hay velocidad ni memoria que lo compense.
¿Qué parte del programa se porta sin cambios entre familias?
La lógica: máquinas de estado, cálculos, filtrado y protocolos, siempre que estén escritos en C estándar y no toquen registros directamente.
¿Para qué sirve una capa de abstracción de hardware?
Para que la aplicación no toque registros: se cambia sólo la implementación de la capa al migrar. Además permite probar la lógica en la computadora, sin el chip.
¿Qué es un compilador cruzado?
Uno que corre en la PC y genera código para otra arquitectura, la del microcontrolador. En la práctica, GCC en sus versiones para AVR, ARM o RISC-V.
¿Qué precaución hay al conectar un ARM o un ESP32 con lógica de 5 V?
Trabajan a 3,3 V y sus pines no toleran 5 V: hace falta un adaptador de nivel o un divisor. Conectarlos directo los daña.
¿Qué diferencia hay entre grabador y depurador?
El grabador sólo escribe el programa en la flash; el depurador además detiene la ejecución, pone puntos de parada y muestra variables y registros mientras el chip corre.
¿Por qué medir el consumo en reposo y no sólo el de trabajo?
Porque en un equipo a batería el dispositivo pasa la mayor parte del tiempo durmiendo: la autonomía la define el consumo en reposo, que puede ser mil veces menor que el de trabajo.