Tema 6: Microcontroladores Carlos Garre del Olmo 1
Microcontroladores Contenidos Introducción a los microcontroladores. Principales familias y sus características. La familia PIC16. Diseño de sistemas empotrados. Programación de microcontroladores. Introducción a los DSP 2
Quées un Microcontrolador? Microcontrolador:todos los componentes básicos de un computador integrados en un único chip: Unidad central de proceso. Memoria (principal e incluso secundaria). Unidades de entrada/salida. Más microcontroladores que personas en el mundo! Cuantos microcontroladores llevas ahora mismo en los bolsillos? Teléfono móvil, llaves del coche, ipod, llave del garaje Cuántos tienes en casa? Lavadora, microondas, televisor, teclado, ratón, Y en el coche? Un coche moderno puede tener cerca de 100 microcontroladores (airbags, tracción, ABS, ). En 2003, Microchip vendió25 millones de microcontroladores PIC para el control de airbags. 3
Sistemas Empotrados Sistema empotrado/embebido (EmbeddedSystem):sistema informático cuyo hardware y software están concebidos para un uso concreto. Se componen de dos elementos: Controlador. Sistema a controlar. Son sistemas informáticos embarcados en el propio sistema que van a controlar. En muchos sistemas empotrados es más práctico utilizar microcontroladores que microprocesadores: Limitaciones de espacio todo en un único chip. Limitaciones de consumo los sistemas empotrados muchas veces son portátiles. Limitaciones económicas es más barato tener un único chip que todo el hardware de un computador basado en microprocesador. Las unidades de E/S de los microcontroladores están diseñadas para manejar sensores y actuadores típicos de los sistemas empotrados. Ejemplos: Lavadora, televisor, TDT, cajero automático, UVI móvil, caja del supermercado, misil, llaves del coche, GPS, boyas, 4
Características de los Microcontroladores Suelen utilizar arquitectura Harvard (memoria de datos e instrucciones separadas) Presenta ventajas en computadores que no hay que reprogramar constantemente. Dimensiones muy reducidas los que utilizaremos en las prácticas (encapsulado DIP) habitualmente sólo se usan para diseño de prototipos. Gran variedad dentro de una misma familia Adaptado a aplicaciones concretas: Robots y sistemas mecánicos (control de motores). Comunicaciones (WiFi, USB, Ethernet). Multimedia (entradas A/D y salidas D/A). Aplicaciones críticas (resistencia térmica, robustez). Instrumentación (sensores, LCD, ). Robustez (pantallazo azul en una lavadora o en un misil??) Watchdog Timer. Bajo consumo funcionamiento a pilas, sondas espaciales, Dormido hasta recibir interrupción. Protección anticopia de la memoria de programa evitar ingeniería inversa y espionaje industrial. 5
Elección de un Microcontrolador Obviando factores generales, como el precio o el tamaño, las características que nos ayudan a decidir entre la gran variedad de microcontroladores (PIC) son: Número de bits: Arquitecturas de 8, 16 y 32 bits. Velocidad: en MIPS o en MHz. De 4MHz a 80MHz. Memoria de programa: Tamaño: de 300Bs a 512KBs. Tipo: Flash (regrabable) vs OTP (programable una única vez). Autoescribible? ICSP. Memoria principal: de 16Bs a 64KBs. Memoria permanente: EEPROM de 0 a 4KBs. Temperatura de trabajo: De -40ºC a 150ºC. Voltaje: desde 1 8V. Encapsulado: DIP/SPDIP para prototipos. Otros: SOIC, QFN, SSOP, TQFP, DFN, Pines de E/S y pines totales: 4 a 85 / 6 a 100 Unidades de E/S y otros componentes: Conversores A/D. Puertos de comunicación digital (serie, RF, Ethernet, USB, ). Temporizadores, comparadores, PWM, capturadores, 6
Comunicación Analógica y Digital Conversores A/D: Número de puertos: 0 a 32 Resolución (bits) por puerto: 10b a 16b Interfaz de puerto serie: USB:Soporte para USB 2.0. OTG (On-The-Go): Pensado para sistemas embebidos, permite que un mismo dispositivo actúe como master y como slave. UART / USART:Clásica conexión de puerto serie (RS-232). La UART sólo soporta comunicación asíncrona. Comunicación con otros sistemas. SPI(Serial PeripheralInterface): interfaz serie síncronay full-duplexque sigue el paradigma maestro/esclavo. Comunicación entre componentes electrónicos del mismo sistema, que requieran buen ancho de banda. I2C(Inter-IntegratedCircuit): maestro/esclavo más lento que SPI. Pensado para comunicación entre componentes que no requieran velocidad, sino bajo coste. Requiere menos pines y permite conectar dispositivos en caliente. 7
Comunicación Analógica y Digital (II) Otras interfaces digitales: CAN(ControllerAreaNetwork): Comunica varias MCUsentre sí. Diseñado para automóviles comunicar todos los sistemas electrónicos del automóvil. LIN (Local Interconnect Network): Subsistema de CAN más económico. IrDA: Comunicación por infrarrojos. Puerto paralelo: GPIO, PMP. AC97:Interfaz de E/S para audio. Conecta la MCU con un codecexterno. Ethernet: clásica conexión de red. Radiofrecuencia (RF): comunicación inalámbrica rfpic: 10MW (~200m) 8
Sensores, Actuadores y Otros Temporizadores Timers: Contadores de 8 a 32 bits que se incrementan automáticamente. Permiten temporizar operaciones, interfaces, etc. Puede haber varios por chip (de 1 a 13). WatchdogTimer:Contador que se incrementa automáticamente, y se pone a 0 desde código. Si llega al final de la cuenta, resetea la MCU. Módulo CCP (Capture/Compare/PWM) Utiliza un registro dedicado para las tres funciones (CCPR) y un pin de E/S dedicado. Actúa junto con el primer temporizador (TMR1). Capture: en el momento en el que ocurre un flanco (programable) en el pin, se guarda el valor de TMR1 en CCPR y salta una interrupción. Compare: se guarda un valor en CCPR, y salta una interrupción cada vez que el valor de TMR coincide con el de CCPR. PWM (Pulse WidthModulation): utilizado para control de motores. Usa el pin como salida, emitiendo un pulso modulado en anchura. http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/95- dpi/pic16f628-ccp/exemplo_capture.html 9
PWM 10
Microcontroladores Contenidos Introducción a los microcontroladores. Principales familias y sus características. La familia PIC16. Diseño de sistemas empotrados. Programación de microcontroladores. Introducción a los DSP 11
Principales Familias Freescale: División de semiconductores de Motorola. Intel: 68HC705: MCU más vendida de la historia? 8 bits, 20 pines, 112B RAM. 68HC11: Familia de MCUs con arquitectura Von Neumann. Instrucciones CISC. Coldfire: arquitectura de 32 bits. Hasta 128KBs datos, 512KBs programa, 500MHz, 120 pines. Familias de 8 y 16 bits. 8051: Muy extendido. Sirve como núcleo para MCUsde otros fabricantes (Atmel: mayores fabricantes de tarjetas inteligentes). Texas Instruments, Zilog, Analog Devices Microchip: PIC:MCUsde 8, 16 y 32 bits. dspic: DSPs. rfpic: MCUscon unidad de RF. Por quélo escogemos? Muy extendido, muchísima información, muy didáctico, alianza académica, muestras gratuitas, fácil programación (HW y SW), 12
Microcontroladores Contenidos Introducción a los microcontroladores. Principales familias y sus características. La familia PIC16. Diseño de sistemas empotrados. Programación de microcontroladores. Introducción a los DSP 13
Familia PIC16 Microcontroladores de 16 bits. Muchísima información en Internet y en libros: robots, videojuegos, mando a distancia, instrumentación, multimedia, PIC-Pong y PIC-Tetris: El miembro de la familia más conocido es el 16F84: 1 75KBs de programa. 68B RAM. 64B EEPROM. 1 timer8 bits. 18 pines. 3$. También son muy utilizados el 16F876 y 16F877: 16F876: 14KB programa, 368B RAM, 256B EEPROM, 2x timers8 bits, 1 timer16 bits, 5x A/D (10b), USART, SPI, I2C, 2x CCP. 28 pines. 4$. 16F877: 40 pines. 8 canales A/D. 14
El PIC16F84A a fondo Juego de instrucciones RISC: 35 instrucciones Todas en un ciclo, salvo bifurcaciones (2 ciclos). Memoria de programa: 1024KW de 14 bits. Direccionamiento directo, indirecto y relativo. Pila por hardware de 8 niveles. 4 fuentes de interrupción: pin externo RB0/INT, TMR0, PORTB<7:4>, EEPROM write complete. 13 pines de E/S. Máximo 25 mapor pin (E/S). ICSP (2 pines), Power-up Timer(PWRT), WatchdogTimer(WDT), SLEEP mode, Code protection, 15
Memoria de datos y de programa Arquitectura del PIC16F84A 16
Decodificación y secuenciamiento de instrucciones Arquitectura del PIC16F84A 17
Direccionamiento Arquitectura del PIC16F84A 18
Arquitectura del PIC16F84A ALU 19
Puertos de E/S: Puerto A Puerto B Entrada de interrupción externa multiplexada con el LSb del puerto B Todo digital Arquitectura del PIC16F84A 20
Arquitectura del PIC16F84A EEPROM 21
Timer: Entrada de reloj externa multiplexada con el bit 4 del puerto A. Arquitectura del PIC16F84A 22
Sistemas básicos y de seguridad: Reloj: cristal externo circuito RC Interno Power On: 1. POR 2. PWRT 3. OST WDT Arquitectura del PIC16F84A 23
Arquitectura del PIC16F84A Registros: W! 24
16F84A: Descripcionde pines 25
16F84A: Memorias Programa y Datos Memoria de Programa: Memoria de Datos SFR: Special Function Registers. Divididos en 2 bancos. GPR: General Purpose Registers. Todos de 8 bits. 26
16F84A: SpecialFunctionRegisters 27
16F84A: Status Register Similar al registro de estado de x86, pero puede ser escrito y leído libremente (salvo bits TOy PD), además de automáticamente por la ALU. IRP, RP1: No implementados. RP0:Selección de banco de registros: 00 (Banco 0), 01 (Banco 1). TO: Time-out: 0 (WDT time-out), 1 (después de CLRWDT). PD: Power-down: SLEEP 0. Z:Zero: Igual que en x86. DC:Acarreo de dígito: acarreo del 4ºbit(mitad del byte). C:Acarreo: el de toda la vida (MSb). 28
16F84A: OptionRegister Permite configurar el funcionamiento de algunos componentes. RBPU: Si es 0, se activa un WeakPull-up en los pines del puerto B. INTEDG:Selecciona quées lo que provoca una interrupción en el pin RB0/INT: 0 (flanco de bajada), 1 (flanco de subida). T0CS:Selecciona la fuente de reloj del Timer: 0 (reloj interno), 1 (pin RA4/T0CKI). T0SE: Selecciona cuándo se incrementa el Timer si se usa reloj externo: 0 (flanco de subida de T0CKI), 1 (flanco de bajada de T0CKI). PSA: Permite preescalar un contador: 0 (preescala el Timer), 1 (preescala el WDT). PS2-PS0: Selecciona el ratio de escalado: 29
16F84A: INTCON Register Control de interrupciones: máscaras y activación. GIE: Global Interrupt Enable: 0 (desactiva todas las interrupciones), 1 (activa las interrupciones no enmascaradas). EEIE:Máscara para la interrupción de escritura terminada en EEPROM. 0 (inhabilita), 1 (habilita). T0IE:Máscara para la interrupción de overflowdel Timer. INTE: Máscara para la interrupción externa (pin RB0/INT). RBIE: Máscara para la interrupción de cambio en el puerto B. T0IF: Flag de la interrupción de overflow del Timer: 0 (no hay overflow), 1 (ha ocurrido overflow) se debe poner a 0 por software. INTF: Flag de interrupción externa. RBIF:Flagde interrupción por cambio del puerto B (al menos un bitha cambiado). 30
16F84A: Registros INDF y FSR Se utilizan para el modo de direccionamiento indirecto. FSR: puntero (contiene una dirección de memoria). INDF: dato al que apunta el puntero. INDF no es un registro físico, sino que lo usa el programador. Ejemplo: En la posición de memoria 0C tenemos el valor 4F. Cargamos la dirección de memoria en FSR: FSR= 0C. Si leemos INDF, nos devolveráel valor 4F: INDF = 4F. Si escribimos en INDF, cambiamos el contenido de la posición 0C de memoria. Ejemplo: Limpiar las posiciones de memoria 20-2F usando direccionamiento indirecto: 31
16F84A: Registros de la EEPROM La EEPROM no estámapeadaen memoria principal. Se accede a ella a través de unos registros específicos. EEDATA: Es donde guardamos el dato a escribir, o de donde leemos el dato leído. Es similar al registro DR visto en el tema 2. EEADR: Es donde indicamos la dirección de la EEPROM a leer o a escribir. Como el 16F84A tiene 64B, el rango estaráentre 00 y 3F. EECON1y EECON2: Control de la EEPROM. EECON2 no es un registro físico: EEIF: Flag de interrupción de fin de escritura. Se debe limpiar por software. WRERR: Se pone a 1 si falla la escritura. WREN: Si estáa 1, la EEPROM es de lectura/escritura. Si no, de sólo lectura. WR: Si el programador lo activa, comienza una escritura. Se limpia por hardware. RD: Si el programador lo activa, comienza una lectura. Se limpia por hardware. 32
16F84A: Manejo de la EEPROM Lectura: Escribir dirección en EEADR (00-3F). Activar el bitrd de EECON1. En el próximo ciclo, el dato estáen EEDATA se puede leer de inmediato. Escritura: Escribir dirección en EEADR (00-3F). Escribir valor en EEDATA. Cargar 55h en el registro virtual EECON2. Cargar AAh en el registro virtual EECON2. Activar el bitwr de EECON1 Se recomienda desactivar interrupciones hasta este punto. 33
16F84A: Puerto A de E/S Registro TRISA: cada bitse corresponde con uno de los pines del puerto A. Si ese bitestáa 1, significa que ese pin es una entrada. Si es 0, es una salida. Por defecto, todo son salidas (TRISA = 0). Registro PORTA: Lo que escribas en este registro sale por los pines de salida. Si lo lees, lees los pines de entrada. El bit4 estámultiplexado con la entrada de reloj del Timer, según el bitt0cs del Option Register. 34
16F84A: Puerto B de E/S Registro TRISB: Similar a TRISA, para el puerto B. Registro PORTB: Similar a PORTA, para el puerto B. Los pines que son entrada (TRISB) se pueden configurar como weak pull-up(bit RBPU del Option register). Los bits 4 a 7 pueden ser configurados para lanzar una interrupción en cuanto cambia su entrada (si están configurados como entradas en TRISB) Podemos tener la MCU en modo SLEEP hasta que cambie una entrada. 35
16F84A: Timer0 Funciona como un contador de 8 bits que se incrementa automáticamente en una de estas dos situaciones (según el bit T0CS del Option Register): Ciclo de reloj interno se dice que actúa como temporizador. Flanco externo en el pin RA4/T0CKI se dice que actúa como contador. Registro TMR0: Contiene el valor del contador. Si se escribe en él, deja de contar durante 2 ciclos tenerlo en cuenta si queremos una temporización precisa! Un contador de 8 bits con un reloj de 4MHz sólo nos permite hacer cuentas de unos pocos microsegundos. Solución para hacer cuentas más largas: sólo incrementar cada X ciclos PRESCALER. El PRESCALER se configura en el Option Register, y permite configurar el Timer para que cuente sólo cada 256 ciclos (1:1, 1:2, 1:4 1:256). Cuando el Timertermina su cuenta, genera la interrupción T0IF. Esta interrupción no puede cambiar el modo SLEEP, ya que durante este modo el Timerestá apagado. 36
16F84A: Interrupciones Hay 4 fuentes de interrupción: Pin externo RB0/INT. TMR0 overflow. Cambio en los bits 4:7 de PORTB. Fin de escritura en EEPROM. Máscaras de interrupción: registro INTCON. Máscara global en el bit GIE. Flags de interrupción: registros INTCON y EECON1. Cuando ocurre una interrupción: El bitgie se pone a 0 automáticamente (no se anidan interrupciones). Se hace un PUSH del PC a la pila hardware de 8 niveles. Cualquier otro contexto que se quiera salvar, se debe hacer por software. PC = 0004h vector de rutina de tratamiento de interrupciones. Se ejecuta la rutina de tratamiento. La rutina de tratamiento limpia los flags. La rutina de tratamiento regresa con la instrucción RETFIE. 37