Catto / Mapa de Temas · Electrónica Digital II 5° año
Electrónica Digital II · 96 h · Eje 4 de 4

Arquitectura de microprocesador y microcontrolador

Hasta acá, para cambiar lo que hace un circuito digital había que cambiar los cables. Un procesador invierte eso: el circuito queda fijo y lo que cambia es el contenido de una memoria. Esa es toda la idea, y de ella sale la electrónica de los últimos cincuenta años.

Microcontroladores CPU Buses Memorias Ciclo de instrucción

01Del circuito cableado al programa

Un secuenciador de diez pasos con contadores y compuertas funciona perfecto. El problema aparece cuando el cliente pide que el paso 4 dure el doble, o que la secuencia cambie si un sensor se activa. Con lógica cableada eso es rediseñar la plaqueta.

La idea de programa almacenado

En vez de conectar compuertas para cada función, se arma una sola máquina capaz de ejecutar un repertorio corto de operaciones elementales —sumar, comparar, mover un dato, saltar— y se guarda en una memoria la lista de operaciones a ejecutar. Cambiar el comportamiento pasa a ser cambiar esa lista. El hardware queda igual.

Lógica cableadaProcesador
Cómo se cambiaRediseñando el circuitoReescribiendo el programa
VelocidadMáxima: todo ocurre en paraleloMenor: las operaciones se hacen una por vez
Costo por unidadCrece con la complejidadCasi constante: el mismo chip hace mucho o poco
Tiempo de desarrolloLargo para funciones complejasCorto, y se prueba sin soldar
Dónde ganaFunciones simples y muy rápidas, glue logicTodo lo demás

Hoy la lógica cableada sobrevive en tareas donde el tiempo se mide en nanosegundos o donde hace falta seguridad independiente del software: un enclavamiento de seguridad, la protección de una fuente, la lógica de arranque. Todo lo demás lo hace un microcontrolador de dos dólares.

02Los bloques de adentro

Cualquier CPU, del 6502 al procesador de una notebook, tiene los mismos cinco elementos. Cambian el tamaño y la cantidad, no la función.

ALU · Unidad aritmética y lógica

Es el único bloque que hace cuentas: suma, resta, AND, OR, XOR, corrimientos. Sus entradas vienen de los registros; su salida vuelve a un registro. Además genera las banderas: cero, acarreo, negativo, desbordamiento. Adentro no hay nada que no se haya visto en lógica combinacional: un sumador de acarreo serie o anticipado y unos multiplexores.

Registros

Memoria interna de acceso inmediato, de una palabra cada uno. El acumulador es el que participa en casi toda operación; los de propósito general guardan valores intermedios; los de estado guardan las banderas. Son los flip-flops de lógica secuencial, agrupados de a ocho o dieciséis.

Contador de programa (PC)

Un contador binario que guarda la dirección de la próxima instrucción. Se incrementa solo; los saltos y las llamadas a subrutina no son más que cargarle un valor distinto. Todo el control de flujo de un programa —un if, un while, una función— termina siendo eso.

Registro de instrucción y decodificador

El IR guarda el código binario que se acaba de leer y el decodificador lo traduce en señales de control: abrir este bus, habilitar aquel registro, decirle a la ALU que sume. Es una máquina de estados: la unidad de control.

Los tres buses
  • Bus de direcciones: unidireccional, sale de la CPU. Su ancho fija cuánta memoria se puede direccionar: 16 líneas → 216 = 64 KiB; 20 líneas → 1 MiB.
  • Bus de datos: bidireccional. Su ancho es el de la palabra: 8, 16, 32 bits.
  • Bus de control: lectura/escritura, reloj, reset, interrupciones, espera.

03El ciclo de instrucción

Es lo único que hace un procesador, millones de veces por segundo, desde que se enciende hasta que se apaga: buscar, decodificar, ejecutar. Entenderlo bien vuelve transparente todo lo demás.

Memoria $0002 MOV A,#5 $0003 ADD A,B $0004 OUT P1 $0005 JMP $02 CPU PC $0002 $0003 $0004 $0005 IR instrucción Decodificador unidad de control ALU suma, compara Registros A · B · banderas direcciones datos dirección instrucción control resultado 1 · el PC pone la dirección en el bus 2 · la memoria devuelve la instrucción al IR 3 · el decodificador la interpreta 4 · la ALU ejecuta y el PC avanza
Figura 1. Ciclo de instrucción, animado. El PC pone la dirección en el bus, la memoria devuelve la instrucción, el decodificador la interpreta y la ALU la ejecuta; al final el PC avanza a la siguiente. Un procesador no hace nunca otra cosa.
FaseQué pasaQuién trabaja
1 · BúsquedaEl PC pone su valor en el bus de direcciones y se activa la lectura.PC, bus de direcciones, memoria
2 · RecepciónLa memoria devuelve el código de la instrucción y se guarda en el IR.Memoria, bus de datos, IR
3 · DecodificaciónLa unidad de control interpreta el código y prepara las señales internas.Decodificador
4 · EjecuciónSe hace la operación: una cuenta en la ALU, una lectura de memoria, un cambio en un puerto.ALU, registros, periféricos
5 · AvanceEl PC se incrementa (o se carga con la dirección del salto) y vuelve a empezar.PC
Ejemplo · Qué tarda encender un LED

En un microcontrolador de 8 bits a 16 MHz, con un ciclo de instrucción de un ciclo de reloj:

  • Cada instrucción tarda 1/16 MHz = 62,5 ns.
  • Poner un pin en alto es una instrucción: 62,5 ns.
  • El lazo típico «encender, esperar, apagar, esperar» con un retardo de 500 ms ejecuta unos 8 millones de instrucciones por cada parpadeo, casi todas sin hacer nada.

De ahí que la primera optimización de cualquier programa embebido sea no esperar haciendo nada: para eso están los temporizadores y las interrupciones, que se ven en 6° año.

Ciclo de reloj no es ciclo de instrucción

Son cosas distintas y se confunden todo el tiempo. Un PIC clásico divide el reloj por cuatro: con un cristal de 20 MHz ejecuta 5 millones de instrucciones por segundo, no veinte. Un AVR ejecuta la mayoría en un solo ciclo, y por eso a 16 MHz rinde más que un PIC a 20. La cifra que hay que buscar en la hoja de datos es MIPS, no la frecuencia del cristal.

04Von Neumann y Harvard

La diferencia está en cuántos caminos hay entre la CPU y la memoria, y tiene una consecuencia práctica directa sobre la velocidad.

Von Neumann CPU Memoria instrucciones y datos juntos un solo bus instr dato Instrucciones y datos se turnan: el bus es el cuello de botella Computadoras de propósito general Harvard CPU Programa Flash Datos SRAM instr dato Los dos viajan al mismo tiempo: busca la próxima mientras ejecuta la actual PIC · AVR · casi todos los microcontroladores
Figura 2. Las dos arquitecturas, animadas. En Von Neumann, instrucciones y datos comparten el bus: hay que turnarse, y ese turno es el cuello de botella. En Harvard cada uno tiene el suyo y viajan a la vez.
Von Neumann
  • Una sola memoria y un solo bus para instrucciones y datos.
  • Más simple y más barato; el programa puede tratarse como dato (por eso una PC puede compilar y ejecutar lo que compiló).
  • La CPU no puede leer una instrucción y un dato al mismo tiempo.
  • Es la arquitectura de las computadoras de propósito general y de muchos ARM Cortex-M.
Harvard
  • Memoria de programa y memoria de datos separadas, cada una con su bus.
  • Búsqueda y ejecución se solapan: más velocidad con el mismo reloj.
  • Los buses pueden tener anchos distintos: en un PIC, 14 bits de instrucción y 8 de datos.
  • El programa no se puede modificar a sí mismo con facilidad, lo que además es una ventaja de seguridad.
  • Es la arquitectura de PIC, AVR y de casi todos los microcontroladores.

05Memorias y mapa de memoria

TipoVolátilSe escribePara qué se usa
SRAMIlimitadoVariables del programa y pila. Rápida, cara, ocupa lugar: por eso un micro chico tiene 2 KiB.
DRAMIlimitadoMemoria principal de una computadora. Necesita refresco constante.
ROM de máscaraNoNuncaGrabada en fábrica. Sólo para producciones enormes.
EPROM (UVPROM)NoSe borra con luz UVHistórica: la ventanita de cuarzo. Se borraba en 20 minutos bajo la lámpara.
EEPROMNoByte por byte, ~106 vecesGuardar la configuración, el número de serie, la última consigna.
FlashNoPor bloques, ~104–105El programa. Es lo que se graba al «quemar» el micro.
FRAMNoPrácticamente ilimitadoRegistro continuo de datos sin desgaste. Más cara.
La EEPROM se gasta

Está especificada en ciclos de escritura, no en años. Un programa que guarda una variable en EEPROM dentro del lazo principal, cien veces por segundo, agota los 100 000 ciclos de esa celda en menos de veinte minutos. Se escribe sólo cuando el valor cambió, y si hay que registrar seguido, se rota entre varias posiciones. Es un error clásico y el equipo falla recién a los meses, cuando ya está instalado.

El mapa de memoria es la tabla que dice qué hay en cada dirección: un tramo de RAM, uno de Flash, y —lo más particular de los microcontroladores— los registros de los periféricos, que se leen y escriben como si fueran posiciones de memoria. Encender un LED es escribir un 1 en un bit de una dirección determinada. Eso es lo que hace, por debajo, cualquier función de una biblioteca.

// Los dos renglones hacen lo mismo en un AVR: encender el bit 5 del puerto B
digitalWrite(13, HIGH);        // biblioteca: cómodo, unos microsegundos
PORTB |= (1 << PB5);         // acceso directo al registro: 62,5 ns

La segunda forma es la que se usa cuando el tiempo importa. Requiere leer la hoja de datos, que es justamente la habilidad que se desarrolla en 6° año.

06Microprocesador y microcontrolador

Un microprocesador es una CPU y nada más: necesita memoria externa, controladores y una plaqueta alrededor. Un microcontrolador es una computadora entera en un chip: CPU, memoria, reloj y periféricos.

un solo encapsulado CPUALU · registrosunidad de control Flashel programa2 a 512 KiB SRAMvariables y pila128 B a 64 KiB EEPROMconfiguraciónque sobrevive al corte Temporizadoresy PWMcuentan sin la CPU Conversor A/D10 o 12 bitsmultiplexado Puertos de E/Scada pin: entrada,salida o periférico ComunicacionesUSART · SPI · I²Cy watchdog El microprocesador tiene sólo el bloque verde: todo lo demás va afuera, en la plaqueta
Figura 3. Lo que un microcontrolador trae integrado. Los bloques anaranjados —los periféricos— son los que hacen que un chip de pocos dólares reemplace una plaqueta entera, y los que se estudian uno por uno en 6° año.
MicroprocesadorMicrocontrolador
MemoriaExterna, en chips aparteInterna: Flash, SRAM y EEPROM
PeriféricosExternosIntegrados: A/D, timers, puertos, comunicación
Potencia de cálculoAlta: GHz, 32 y 64 bitsModesta: MHz, 8 a 32 bits
ConsumoWattsMiliwatts, y microamperes durmiendo
ArranqueSistema operativo, segundosEjecuta el programa en microsegundos
Uso típicoComputadoras, servidores, celularesElectrodomésticos, autos, instrumentos, control
Costo del sistemaAltoMuy bajo: el chip y poco más
Familias que se van a ver en el taller
  • PIC (Microchip): Harvard, muy difundido en la industria argentina, enorme cantidad de modelos. Es el que se desarrolla en Electrónica Digital III.
  • AVR (Microchip/Atmel): el del Arduino UNO. Un ciclo por instrucción y herramientas libres.
  • ARM Cortex-M (STM32, RP2040, ESP32 con su propio núcleo): 32 bits, mucha potencia por poco dinero, el estándar actual de la industria.
  • ESP32: agrega WiFi y Bluetooth en el mismo chip; es lo que hace posible cualquier proyecto conectado.
La hoja de datos es la herramienta, no el tutorial

Un microcontrolador se aprende leyendo su datasheet y su manual de referencia: ahí están el mapa de memoria, los registros de cada periférico y los tiempos. Los ejemplos de internet resuelven un caso; la hoja de datos resuelve todos. Aprender a leerla es parte del oficio, y se practica con C, que es el lenguaje en el que están escritos casi todos esos ejemplos —lo que ya se trabajó en elementos básicos del lenguaje C.

07En el laboratorio

Práctica 1 · Ver el reloj

Con un microcontrolador funcionando, medir con el osciloscopio la frecuencia del cristal y compararla con lo que dice el circuito. Después escribir un programa que conmute un pin lo más rápido posible y medir la frecuencia de esa señal: de ahí sale cuántos ciclos gasta el lazo. Es la forma directa de comprobar que la CPU ejecuta una instrucción por vez y cuánto tarda.

Práctica 2 · Los buses, con LED

Sobre un sistema con memoria externa (o con un simulador), conectar LED a las líneas bajas del bus de direcciones y hacer correr un programa muy lento. Se ve la cuenta binaria del PC avanzando: es la Figura 1 en el banco.

Práctica 3 · Biblioteca contra registro

Escribir el mismo parpadeo de dos maneras: con la función de la biblioteca y escribiendo directo el registro del puerto. Medir con el osciloscopio la frecuencia máxima alcanzable en cada caso y anotar la diferencia. Suele ser de veinte a cincuenta veces.

Práctica 4 · Consumo

Medir la corriente del microcontrolador con el programa corriendo, y después con el micro en modo de bajo consumo esperando una interrupción. Se pasa de decenas de miliamperes a unos pocos microamperes. Es la razón por la que un sensor a pila dura años.

08Errores frecuentes

SíntomaCausa habitual
El micro no arrancaFalta el capacitor de 100 nF junto a la alimentación, el pin de reset quedó al aire, o los fuses quedaron configurados para un reloj que no existe en la plaqueta.
Se reinicia solo cada tantoEl watchdog está habilitado y el programa no lo refresca, o hay caídas de tensión por una carga inductiva mal desacoplada.
El programa funciona en el simulador y no en la plaquetaTiempos reales: rebotes de pulsadores, capacidades del cableado, o un retardo calculado con el reloj equivocado.
Las variables se corrompen sin motivoDesbordamiento de la pila: la SRAM es chica y un arreglo grande o una recursión la comen entera.
Una lectura del A/D es siempre bajaImpedancia de la fuente demasiado alta para el sample & hold. Ver conversores A/D.
El equipo falla a los meses de instaladoEscrituras repetidas en EEPROM: se agotaron los ciclos de una celda.
El pin no maneja el reléUn pin entrega 20 mA como máximo. Todo lo que consuma más va con transistor, y con diodo volante si es inductivo: transistor como llave.
«Le sobra memoria pero no compila»Se confunde Flash con SRAM. Las cadenas de texto viven en Flash, pero muchas bibliotecas las copian a SRAM al arrancar.

09Autoevaluación

¿Cuánta memoria puede direccionar un bus de direcciones de 16 líneas?

216 = 65 536 posiciones, o sea 64 KiB. Con 20 líneas serían 1 MiB y con 32, 4 GiB.

¿Qué guarda el contador de programa y qué pasa cuando hay un salto?

La dirección de la próxima instrucción. Normalmente se incrementa solo; un salto es simplemente cargarle otro valor, y una llamada a subrutina es guardar el valor actual en la pila antes de cargarlo, para poder volver.

Un PIC con cristal de 20 MHz que divide el reloj por cuatro: ¿cuántas instrucciones por segundo ejecuta?

20 MHz / 4 = 5 MIPS, y cada instrucción tarda 200 ns. Un AVR de 16 MHz con un ciclo por instrucción ejecuta 16 MIPS: más rápido con un cristal más lento.

¿Cuál es la ventaja concreta de la arquitectura Harvard?

Que puede buscar la próxima instrucción mientras ejecuta la actual, porque instrucciones y datos viajan por buses separados. Además cada bus puede tener el ancho que le conviene.

¿Por qué no conviene guardar un contador en EEPROM dentro del lazo principal?

Porque la EEPROM soporta un número limitado de escrituras por celda (105 a 106). Escribiendo cien veces por segundo se agota en minutos. Se guarda sólo cuando el valor cambia, o se rota entre varias posiciones.

¿Qué diferencia hay entre Flash, SRAM y EEPROM en un microcontrolador?

Flash: el programa, no volátil, se graba por bloques. SRAM: las variables mientras corre, volátil, se borra al cortar la alimentación. EEPROM: datos que deben sobrevivir al corte —configuración, calibración—, escribible byte por byte.

¿Qué son las banderas de la ALU y para qué sirven?

Bits de estado que la ALU deja después de cada operación: cero, acarreo, negativo, desbordamiento. Las instrucciones de salto condicional las consultan, así que son el puente entre la aritmética y el if de un programa.

¿Cuándo conviene lógica cableada en vez de un microcontrolador?

Cuando la respuesta tiene que ser de nanosegundos, cuando la función es tan simple que una compuerta la resuelve, y sobre todo cuando la seguridad no puede depender de que un programa esté corriendo: un enclavamiento o una protección se cablean.

¿Por qué escribir directamente el registro de un puerto es mucho más rápido que usar la función de la biblioteca?

Porque la función verifica el número de pin, busca en una tabla a qué puerto y bit corresponde y recién ahí escribe: son decenas de instrucciones. La escritura directa es una.

Un pin de salida tiene que manejar un motor de 500 mA. ¿Cómo se conecta?

Nunca directo: un pin entrega unos 20 mA. Va con un transistor o un MOSFET como llave, con su resistencia de base, el diodo volante sobre la bobina y, si conviene aislar, un optoacoplador. La alimentación del motor debe ser independiente de la del micro.

Desarrollo del eje «Arquitectura de microprocesador y microcontrolador» de Electrónica Digital II (5° 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