Catto / Mapa de Temas · Electrónica Digital III 6° año
Electrónica Digital III · 144 h · Eje 1 de 7

Familia de microcontroladores

En 5° año el microcontrolador era un concepto. Acá pasa a ser un chip concreto con patas numeradas, registros con nombre y una hoja de datos de cuatrocientas páginas. Aprender a leerla es, en buena medida, el contenido del año.

Microcontroladores Registros Puertos de E/S Memorias Hoja de datos

01De dónde venimos

En arquitectura de microprocesador y microcontrolador quedó establecido qué hay adentro: CPU con ALU y registros, memorias, buses y periféricos, todo en un chip. Ahora se trata de usar uno, y eso obliga a responder tres preguntas muy concretas:

¿Qué pata hace qué?

El diagrama de conexiones y la multiplexación de funciones: casi toda pata sirve para varias cosas y hay que elegir.

¿Qué registro lo configura?

Todo lo que el chip hace se decide escribiendo bits en registros de función especial. Programar un periférico es, literalmente, poner unos y ceros en el lugar correcto.

¿Qué memoria uso?

Flash para el programa, SRAM para las variables, EEPROM para lo que debe sobrevivir al corte. Elegir mal cuesta caro.

FamiliaArquitecturaInstruccionesVelocidadDónde se la ve
PIC de gama media
16F84A, 16F628A, 16F877A
Harvard, RISC3520 MHz → 5 MIPSIndustria argentina, equipamiento en servicio, mucha documentación en español
PIC de gama alta
18F, dsPIC
Harvard, RISC75+40–70 MHzCuando hacen falta más periféricos o cálculo
AVR
ATmega328P, ATtiny85
Harvard, RISC13120 MHz → 20 MIPSArduino. Un ciclo por instrucción y herramientas libres
ARM Cortex-M
STM32, RP2040
32 bitsThumb-248–480 MHzEl estándar actual de la industria
ESP3232 bits + radio240 MHzTodo lo que necesita WiFi o Bluetooth
Por qué se estudia una familia chica y vieja

Porque en un PIC de gama media se ve todo: el mapa de memoria entra en una hoja, los registros son ocho bits, no hay sistema operativo ni capas de abstracción, y cada instrucción tarda un tiempo conocido. Lo que se aprende ahí —leer la hoja de datos, configurar un periférico bit por bit, medir tiempos— se traslada tal cual a un ARM de 200 MHz. Al revés no funciona: quien empieza con bibliotecas nunca ve qué hay abajo.

02El diagrama de conexiones

Es la primera página útil de cualquier hoja de datos. Muestra el encapsulado con sus patas numeradas y, en cada una, todas las funciones que puede cumplir separadas por barras.

microcontrolador encapsulado DIP de 28 patas 1 PC6 / RESET 2 PD0 / RXD 3 PD1 / TXD 4 PD2 / INT0 5 PD3 / INT1 / OC2B 6 PD4 / T0 7 VCC 8 GND 9 PB6 / XTAL1 10 PB7 / XTAL2 11 PD5 / OC0B 12 PD6 / OC0A 13 PD7 / AIN1 14 PB0 / ICP1 15 PB1 / OC1A 16 PB2 / SS / OC1B 17 PB3 / MOSI 18 PB4 / MISO 19 PB5 / SCK 20 AVCC 21 AREF 22 GND 23 PC0 / ADC0 24 PC1 / ADC1 25 PC2 / ADC2 26 PC3 / ADC3 27 PC4 / SDA 28 PC5 / SCL Alimentación: un capacitor de 100 nF en cada par, y todos conectados Reset y grabación en circuito (ICSP/ISP) Oscilador: cristal con sus dos capacitores, lo más cerca posible Comunicación y entradas analógicas: están fijas en estas patas Casi toda pata cumple varias funciones: la barra separa las alternativas y hay que elegir una en el programa.
Figura 1. Patas de un microcontrolador de 28 patas, animado. Se destacan por turno los grupos: alimentación, reset y grabación, oscilador y puertos de entrada-salida. Casi toda pata cumple varias funciones y hay que elegir cuál se usa.
GrupoPatas típicasQué hay que respetar
AlimentaciónVDD / VCC y VSS / GNDUn capacitor de 100 nF pegado a cada par, y si hay varios pares, todos conectados. Sin ese capacitor el micro se resetea solo.
ResetMCLR̄ / RESET̄Activo en bajo: va con una resistencia de 10 kΩ a positivo. Dejarlo al aire es la causa número uno de que un micro «no arranque».
OsciladorOSC1/OSC2, XTAL1/XTAL2Cristal con sus dos capacitores de 22 pF, lo más cerca posible. Si se usa el oscilador interno, esas patas quedan libres como E/S.
GrabaciónICSP: MCLR, PGD, PGC · ISP: MOSI, MISO, SCK, RESETConviene sacarlas a un conector aunque el proyecto sea definitivo: reprogramar sin desoldar vale oro.
AnalógicasAN0…ANn, VREFAl encender, muchas patas arrancan configuradas como analógicas. Si se las quiere digitales hay que decirlo expresamente.
PeriféricosTX/RX, SDA/SCL, SDO/SDI/SCK, CCP/PWM, INTEstán fijas en ciertas patas: el circuito impreso tiene que respetarlas, o hay que usar la remapeabilidad si el chip la tiene.
La trampa clásica: patas analógicas por defecto

En muchos PIC, después del reset el registro ANSEL (o ADCON1) deja varias patas como entradas analógicas. Un programa que las lee como digitales recibe siempre cero, sin que nada indique el error. La primera línea de cualquier programa serio es la configuración de esos registros. En AVR pasa algo parecido con el comparador y con DIDR.

03Registros de función especial

La CPU no tiene «instrucciones para encender un LED». Lo que tiene es acceso a un conjunto de posiciones de memoria con nombre —los SFR— donde cada bit gobierna algo del hardware. Todo el manejo de periféricos se reduce a leer y escribir esos bits.

// Tres formas de escribir lo mismo (AVR): poner en 1 el bit 5 del puerto B
PORTB = PORTB | 0b00100000;   // explícito, poco legible
PORTB |= (1 << PB5);           // la forma idiomática
PORTB |= _BV(PB5);            // con la macro de la biblioteca

// Y para apagarlo, la máscara invertida
PORTB &= ~(1 << PB5);

// Preguntar por un bit de entrada
if (PIND & (1 << PD2)) { /* el pin 2 está en alto */ }

Estas cuatro líneas son el 90 % del trabajo con registros. Vienen directamente de los operadores a nivel de bit vistos en lenguaje C.

Cómo se lee la hoja de datos de un registro

Cada registro aparece con sus ocho bits, el nombre de cada uno, si es de lectura, de escritura o de las dos, y su valor después del reset. Ese último dato es el que más se pasa por alto: si un bit arranca en 1, el periférico ya está haciendo algo antes de que el programa diga nada.

La otra convención importante: una barra sobre el nombre, o una n final (MCLRn, CSn), significa activo en bajo.

Lectura-modificación-escritura

PORTB |= (1<<PB5) no escribe: lee el puerto, cambia un bit y lo vuelve a escribir. Si otra pata del mismo puerto está cargada —un LED que baja la tensión, un pin todavía conmutando— lo que se lee no es lo que se había escrito, y esa pata cambia de estado sola. Es un error famoso de los PIC. La solución es el registro LAT, que devuelve lo último escrito en vez del estado real de la pata: LATB |= (1<<5).

04Puertos de entrada y salida

Cada pata digital se maneja con dos o tres registros, y conviene tener el mecanismo claro porque es idéntico en todas las familias, aunque cambien los nombres.

DDRB 0 0 0 0 0 0 0 bit 5 PORTB 0 0 0 0 0 0 0 bit 5 Sólo se mira el bit 5, que gobierna la pata PB5. pata PB5 habilita la salida 0 0 pulsador a masa se lee acá DDR = 0 · la pata es entrada: se lee el pulsador 0 1 pulsador a masa se lee acá pull-up interna DDR = 0 y PORT = 1 · entrada con resistencia interna: ya no flota 1 1 LED masa DDR = 1 y PORT = 1 · salida en alto: el LED enciende 1 0 LED masa DDR = 1 y PORT = 0 · salida en bajo: el LED apaga
Figura 2. El camino de un pin, animado. El registro de dirección decide si la pata mira hacia afuera o hacia adentro; el de datos fija el nivel cuando es salida; el de lectura devuelve lo que hay en la pata cuando es entrada.
PICAVRFunción
DirecciónTRISxDDRxEntrada o salida
EscrituraPORTx / LATxPORTxNivel de salida
LecturaPORTxPINxEstado real de la pata
Resistencia de pull-upWPUx / OPTIONPORTx con DDR en entradaEvita entradas flotantes
Los dos convenios son opuestos: no confundirlos

En PIC, TRIS en 1 es entrada (la regla mnemotécnica: 1 parece una I de input, 0 una O de output). En AVR, DDR en 1 es salida. Es exactamente al revés, y es la confusión más común de quien pasa de una familia a la otra. Un pin configurado como salida por error, conectado a un pulsador que lo lleva a masa, se destruye.

Ejemplo · Cuánta corriente puede manejar una pata
  • AVR: 40 mA absolutos por pata, 20 mA recomendados, y 200 mA en total para todo el chip.
  • PIC de gama media: 25 mA por pata, y 200 mA sumando el puerto completo.
  • Un LED rojo con 2 V de caída alimentado desde 5 V con 330 Ω consume (5 − 2)/330 = 9,1 mA: entra sin problema.
  • Ocho LED encendidos a la vez en el mismo puerto son 73 mA: todavía entra, pero si fueran 20 mA cada uno serían 160 mA y el chip se calienta y las tensiones se corren.
  • Un relé de 12 V y 30 mA, un motor o una lámpara nunca van directo: llevan transistor (transistor como llave) con su diodo volante.

05Las tres memorias y los bits de configuración

MemoriaPIC16F877AATmega328PQué guarda
Flash8 K palabras de 14 bits32 KBEl programa. Se graba con el programador o con un bootloader.
SRAM368 B2 KBVariables y pila. Se borra al cortar la alimentación.
EEPROM256 B1 KBConfiguración, calibración, contadores: lo que debe sobrevivir al corte.
368 bytes de RAM son 368 bytes

Una cadena de texto de 40 caracteres se come el 11 % de la RAM de un 16F877A. Un arreglo de 100 enteros de 16 bits no entra. El compilador no siempre avisa: el programa compila, se graba y falla de manera extraña cuando la pila choca con las variables. Por eso en microcontroladores chicos se usan tipos del tamaño justo (uint8_t en vez de int), se evitan las cadenas y se guardan las constantes en Flash.

Bits de configuración: lo que se decide antes de que el programa corra

Se llaman configuration bits en PIC y fuses en AVR. No son memoria de datos: se graban junto con el programa y definen cómo arranca el chip.

  • Fuente de reloj: cristal, resonador, oscilador interno, con o sin divisor por 8. Es el fuse que más veces deja un chip «muerto»: si se elige cristal externo y no hay cristal, el micro no arranca y tampoco se lo puede reprogramar por la vía normal.
  • Watchdog: habilitado o no, y con qué tiempo.
  • Brown-out: a qué tensión se resetea el chip si la alimentación cae.
  • MCLR como reset o como pata de entrada.
  • Protección de código: impide leer la Flash. Se usa en producto terminado; en el taller conviene dejarla apagada.

06El repertorio de instrucciones

Un PIC de gama media tiene 35 instrucciones. No hace falta memorizarlas, pero sí entender qué clases hay y qué tarda cada cosa, porque de ahí salen los tiempos reales del programa.

ClaseEjemplosQué hacen
TransferenciaMOVLW, MOVWF, MOVFMover datos entre el acumulador (W) y la memoria.
Aritméticas y lógicasADDWF, SUBWF, ANDWF, XORWFOperar, dejando el resultado en W o en el registro.
De bitBSF, BCF, BTFSS, BTFSCPoner, borrar y probar un bit. Son las que hacen tan cómodo el manejo de periféricos.
De controlGOTO, CALL, RETURN, RETFIESaltos, subrutinas y retorno de interrupción.
EspecialesCLRWDT, SLEEP, NOPRefrescar el watchdog, dormir, perder un ciclo a propósito.
Ejemplo · Cuánto tarda de verdad un retardo

PIC con cristal de 4 MHz. El reloj se divide por 4, así que un ciclo de instrucción dura 1 µs.

  • Casi todas las instrucciones tardan un ciclo: 1 µs.
  • Las que saltan —GOTO, CALL, y las de prueba cuando efectivamente saltean— tardan dos.
  • Un lazo de retardo de tres instrucciones repetido 250 veces tarda unos 750 µs; anidando dos lazos así se llega al milisegundo con precisión de microsegundos.

Ese cálculo es la razón por la que en un micro se puede garantizar un tiempo, cosa que en una computadora con sistema operativo es imposible. Y también por la que los retardos por lazo se reemplazan por temporizadores en cuanto el programa hace más de una cosa (periféricos).

Assembler y C conviven

Hoy casi todo se escribe en C, y está bien: es más rápido de escribir y de mantener. Pero conviene saber leer el assembler que genera el compilador, porque es la única manera de responder preguntas como «¿cuántos ciclos tarda esta rutina de atención de interrupción?» o «¿por qué esta variable no se actualiza?». En los entornos actuales se ve con un clic (ventana de desensamblado).

07Recursos especiales

Watchdog

Un contador independiente que resetea el chip si el programa no lo refresca a tiempo. Es la red de seguridad ante un cuelgue: un lazo infinito por un ruido o un dato inesperado no deja el equipo muerto, lo reinicia.

Se refresca con CLRWDT (o wdt_reset()) en el lazo principal, nunca dentro de una interrupción: si el programa principal se cuelga y la interrupción sigue corriendo, el watchdog nunca actuaría.

Brown-out reset

Vigila la alimentación y mantiene el chip en reset mientras la tensión esté por debajo de un umbral. Sin él, al bajar lentamente la tensión el micro sigue ejecutando con datos corruptos: escribe cualquier cosa en la EEPROM y activa salidas al azar. En un equipo que maneja potencia, habilitarlo no es opcional.

Modos de bajo consumo

SLEEP detiene el reloj de la CPU y baja el consumo de miliamperes a microamperes. El chip despierta con una interrupción, con el watchdog o con un cambio en una pata. Es lo que permite que un sensor a pila dure años.

Power-on reset y arranque

El chip espera a que la alimentación se estabilice y recién ahí ejecuta la primera instrucción, que siempre está en la dirección 0. Ese retardo es configurable y hay que dejarlo: sin él, el micro arranca antes que el resto del circuito.

08En el laboratorio

Práctica 1 · El circuito mínimo

Armar en protoboard lo indispensable para que el micro viva: alimentación con capacitor de 100 nF, MCLR con su resistencia de 10 kΩ, cristal con sus dos capacitores y conector de grabación. Grabar un programa que sólo encienda un LED. Después sacar el capacitor de desacople y observar que el micro se reinicia o funciona errático. Es la demostración más rápida de por qué está ahí.

Práctica 2 · Registros a mano

Sin usar ninguna biblioteca, escribir la configuración de dirección y de nivel de un puerto completo y hacer un contador binario de 8 LED. Después leer la hoja de datos y agregar la configuración de las patas analógicas para que las que faltaban también funcionen. Anotar qué registro resolvió cada cosa.

Práctica 3 · Medir el reloj

Escribir un lazo que conmute una pata lo más rápido posible y medir la frecuencia con el osciloscopio. Con esa medición y el número de instrucciones del lazo, calcular el tiempo de instrucción y contrastarlo con el cristal. Repetir cambiando los fuses al oscilador interno y comparar la estabilidad.

Práctica 4 · Watchdog y bajo consumo

Habilitar el watchdog y provocar a propósito un lazo infinito: el equipo debe reiniciarse. Después medir la corriente del micro corriendo y con SLEEP, despertándolo con un pulsador. La diferencia —de decenas de miliamperes a microamperes— explica sola el diseño de cualquier equipo a batería.

Práctica 5 · EEPROM

Guardar en EEPROM un contador de encendidos y mostrarlo al arrancar. Cortar y volver a dar alimentación varias veces. Discutir cuántas veces por día se escribiría si el contador estuviera en el lazo principal, y en cuánto tiempo se agotarían los 100 000 ciclos de esa celda.

09Errores frecuentes

SíntomaCausa habitual
El micro no arranca y tampoco se deja grabarFuses con oscilador externo y sin cristal en la plaqueta. Se recupera con un programador que inyecte reloj, o con alta tensión.
Se reinicia solo, sobre todo al activar un reléFalta el capacitor de 100 nF, o el diodo volante, o la masa está mal distribuida.
Una entrada digital siempre lee 0La pata quedó configurada como analógica por defecto.
Un pulsador lee valores al azarEntrada flotante: falta el pull-up (interno o externo) o el antirrebote.
Al escribir un bit de un puerto, otro pin cambia soloLectura-modificación-escritura sobre PORT con carga. Usar LAT.
El programa compila pero se comporta de manera erráticaSe acabó la SRAM: la pila pisa las variables. Revisar el mapa de memoria que informa el compilador.
Funciona alimentado por el programador y no con su fuenteAlimentación insuficiente o mal filtrada, o falta conectar todos los pares VDD/VSS.
La EEPROM se llenó de datos corruptosEscrituras durante una caída de tensión. Habilitar brown-out.
El equipo se cuelga una vez por semanaSin watchdog. Con watchdog se reinicia solo y además queda registro de que pasó.

10Autoevaluación

¿Qué diferencia hay entre TRIS de un PIC y DDR de un AVR?

El convenio es opuesto: en PIC, TRIS en 1 configura la pata como entrada; en AVR, DDR en 1 la configura como salida. Confundirlos puede destruir una pata que quede como salida contra un pulsador a masa.

¿Por qué conviene usar LAT en vez de PORT para escribir?

Porque escribir en PORT implica leer antes el estado real de las patas. Si una pata está cargada, lo leído no coincide con lo escrito y esa pata cambia de estado. LAT devuelve lo último escrito, sin mirar la pata.

Un PIC con cristal de 4 MHz: ¿cuánto dura un ciclo de instrucción?

El reloj se divide por cuatro: 4 MHz/4 = 1 MHz, o sea 1 µs por instrucción. Las de salto tardan 2 µs.

¿Qué son los fuses o bits de configuración y por qué son peligrosos?

Definen cómo arranca el chip —reloj, watchdog, brown-out, función de MCLR, protección de código— y se graban con el programa. Si se elige un reloj que la plaqueta no tiene, el micro no arranca ni se deja reprogramar por la vía habitual.

¿Cuánta corriente puede entregar una pata y qué se hace si hace falta más?

Del orden de 20 a 25 mA, con un límite total por chip de unos 200 mA. Para más se usa un transistor o un MOSFET como llave, con su resistencia de base y el diodo volante si la carga es inductiva.

¿Para qué sirve el watchdog y dónde NO hay que refrescarlo?

Resetea el chip si el programa deja de refrescarlo, sacándolo de un cuelgue. No debe refrescarse dentro de una interrupción: si el programa principal se cuelga y la interrupción sigue corriendo, el watchdog no actuaría nunca.

¿Qué protege el brown-out reset?

Impide que el micro ejecute con la alimentación por debajo de su mínimo, situación en la que puede corromper la EEPROM y activar salidas al azar. Lo mantiene en reset hasta que la tensión se recupera.

Un 16F877A tiene 368 bytes de RAM. ¿Entra un arreglo de 100 enteros de 16 bits?

No: 100 × 2 = 200 bytes sólo para ese arreglo, más las demás variables y la pila. Aunque numéricamente parezca que entra, en la práctica deja al programa sin margen y termina fallando.

¿Por qué una entrada digital puede leer siempre cero aunque el circuito esté bien?

Porque la pata está configurada como entrada analógica, que es el estado por defecto de muchas patas después del reset. Hay que configurar los registros correspondientes (ANSEL, ADCON1) para pasarlas a digitales.

¿Qué ventaja concreta tiene sacar el conector de grabación en la plaqueta definitiva?

Permite reprogramar el equipo sin desoldar el micro, actualizar el programa en el lugar de instalación y, durante el desarrollo, cargar decenas de versiones por día. Cuesta un conector de cinco patas.

Desarrollo del eje «Familia de microcontroladores» de Electrónica Digital III (6° año), según la «Propuesta Curricular – Segundo Ciclo de la Modalidad Técnico Profesional, Educación Secundaria – Electrónica», Ministerio de Educación de la Provincia de Córdoba, DGETyFP. Volver al Mapa de Temas · catto.ar