Publicado el 10 de Junio del 2020
979 visualizaciones desde el 10 de Junio del 2020
3,4 MB
133 paginas
Creado hace 10a (23/04/2015)
MICROCONTROLADORES
MICROCONTROLADORES
Introducción
Arquitectura
Memoria
I/O Digital
Interrupciones
I/O Analógica
Timers/PWM
Interfaces y Otros Periféricos
INTRODUCCIÓN
Uso de los microcontroladores
Microondas, Lavarropas, Televisores, ...
Automóviles, aviones, barcos
Teléfonos
Automatización industrial
Pequeños dispositivos ad-hoc
...
INTRODUCCIÓN
Ejemplo. Se quiere:
Leer periódicamente una temperatura
Prender y apagar un calefactor
Mostrar en un display la temperatura
Permitir al usuario ajustar la temperatura
Posibilidad de actualizar la funcionalidad con un
interfase serie
INTRODUCCIÓN
Diseño discreto. Se requiere:
Un microprocesador
20 líneas de I/O (2 chips de 16 c/u)
1 Interfaz serie (1 chip)
1 Timer (1 chip)
Memoria SRAM (para variables)
Memoria Flash (para programa)
Memoria EEPROM (para constantes)
INTRODUCCIÓN
Diseño
discreto.
INTRODUCCIÓN
Diseño
Integrado.
ATmega16 (atmel)
OFERTA DE MICROCONTROLADORES
Estructurada por “familias” y “subfamilias”.
Por ejemplo, cada familia tiene el mismo núcleo del
procesador (su código será compatible):
8051,PIC,HC,ARM
O son familias orientadas a la aplicación
O por performance (de diferente tipo)
INTRODUCCIÓN
OFERTA DE MICROCONTROLADORES
OFERTA DE MICROCONTROLADORES
OFERTA DE MICROCONTROLADORES
Año: 2014
OFERTA DE MICROCONTROLADORES
ARQUITECTURA
ARQUITECTURA
ARQUITECTURA
ARQUITECTURA
ARQUITECTURA
ARQUITECTURA: PROCESADOR
ARQUITECTURA
Von Neuman vs. Hardvard
CISC vs. RISC
Tamaño/variedad de las instrucciones
Velocidad: clock; 8/16/32 bits
SISTEMAS EMBEBIDOS
Dos alternativas:
“BARE METAL”
Sobre un Sistema Operativo
básico (administrador de tareas)
de tiempo real (QNX, FreeRTOS, …)
genérico (Linux, Android, Windows, …)
SISTEMAS EMBEBIDOS: BOOTLOADING
Un”bootloader” es una pieza de código que se puede
encargar de:
Inicializar el harware en forma básica
Cargar la aplicación o el sistema operativo en la memoria tomándolo de una
flash, la red u otro medio no-volatile
I Execution of the application
Puede no haber “bootloader” o este estar implícito en el
proceso de arranque de la CPU
Puede haber “bootloaders” para completar el proceso de
“bootloading”
EJEMPLOS DE BOOTLOADING: X86
BIOS
(ROM)
El Sistema
Operativo
(Kernel
del Filesystem)
Etapa 1
(512 bytes de
algún dispositivo
de
almacenamiento)
Etapa 2
(el bootloader
propiemente
dicho)
EJEMPLOS DE BOOTLOADING:
ARM TI OMAP3 CON LINUX
Inicializa la RAM y trata de
encontrar una imagen
ejecutable en varios lugares
y la carga en SRAM o RAM
ROM Code
(en la CPU)
Linux
Kernel
Toma el control del
sistema
completamente. (los
“bootloaders” ya no
existen)
Corre en la SRAM, inicializa
la DRAM, el controlador
NAND or MMC y carga en la
RAM la siguiente etapa y la
ejecuta.
X-loader /
U-Boot 1
U-Boot 2
Corre en la RAM.
Inicializar algún
harware (red,USB, etc.).
Carga el kernel y lo
ejecuta
EJEMPLOS DE BOOTLOADING:
MCS08- BAREMETAL
De la hoja de datos:
“…
3.3 Run Mode
Run is the normal operating mode for the MC9S08LC60
Series. This mode is selected upon the MCU exiting reset
if the BKGD/MS pin is high. In this mode, the CPU
executes code from internal memory with execution
beginning at the address fetched from memory at
0xFFFE:0xFFFF after reset.
…”
MEMORIA
Registros (memoria de corto plazo):
Pequeña (relativamente)
Almacenamiento temporario p/CPU
Memoria de datos
Relativamente Grande
Almacena datos mientras el MCU funciona
Memoria de programa
Relativamente Grande
De preferencia, mantiene el programa incluso con el
MCU apagado.
MEMORIA: TIPO FÍSICOS
MEMORIA
S/DRAM: sin limite de escrituras
EEPROM: 100.000 ciclos de borrado
Flash: 10.000 ciclos de borrado
MEMORIA: DIRECCIONAMIENTO
Separado:
Cada tipo físico se direcciona por separado (por
ejemplo, usando diferentes registros índices)
Hay direcciones repetidas
Contínuo:
Se accede siempre igual y la logica interna
accede a la memoria que corresponde
No hay direcciones repetidas
MEMORIA: DIRECCIONAMIENTO
Separado
MEMORIA: DIRECCIONAMIENTO
Continuo
MEMORIA: EJERCICIO
For (i=100;i>=0;i--)
Inadvertidamente i es almacenada en EEPROM
Inadvertidamente i esta implementada como unsigned
Como la EEPROM es lenta, cada iteración lleva, digamos, 10
ms
¿Que pasa al conectar el MCU?:
el programa se cuelga
Me doy cuenta, digamos, a los 10 segundos
Empiezo a “debuggear” el programa (pero no apago el MCU)
¿En cuanto tiempo me quedo sin microcontrolador?
ENTRADA/SALIDA DIGITAL
DIGITAL I/O
Implementadas por pines de conexión directa al
exterior:
Los MCU tienen en general de 8 a 32 pines (o más).
Se agrupan en “ports” de a 8 pines.
En general, los pines se pueden configurar como entrada
o salida
La lógica puede ser positiva o negativa.
Los pines pueden tener otras funciones alternativas.
DIGITAL I/O
•pin 1 del port B
•Módulo de Interrupción 1 - entrada 5
•Pin Tx de puerto serie
•Conversor AD canal 5
DIGITAL I/O
Los pines se controlan mediante 3 registros:
Data Direction Register (DDR): hay uno por cada
puerto y cada bit determina la dirección de un pin.
Port Register (PORT): uno por cada puerto y cada bit
controla el estado del puerto (si es de salida)
Port Input Register (PIN): uno por cada puerto y cada
bit da el estado de su respectivo pin, esté este
configurado como entrada o salida.
DIGITAL I/O
(del manual de referencia del MCU)
DIGITAL I/O
DIGITAL I/O
DIGITAL I/O
Ejemplo:
bit 7
bit 0
1 0 0 0 0 0 0 0
PTBDD = 0x80; // initialize PTB7 as output
PTBD = 0; // initialize PTB to 0
PTBD_PTBD7 = ~PTBD_PTBD7; // invert the output
DIGITAL I/O
PORT Register: de preferencia debe
escribirse con operaciones de escritura de
bit, si estan disponibles
Caso contrario usar : Read-Modify-Write
con cuidado.
DIGITAL INPUT
La entrada se muestrea con cada pulso (flanco
ascendente normalmente) del clock, lo que ocasiona
“metaestabilidad”:
DIGITAL INPUT
Normalmente incorporan un Schmitt-trigger.
Para reducir la “metaestabilidad” se introducen
“sincronizadores”
DIGITAL INPUT
Cancelación de ruidos
Resistencias de pull-up/down en las entradas: puede
(debe) programarse su conexión/desconexión (a
veces mediante el registro PORT).
DIGITAL OUTPUT
Apenas el DDR setea un pin como salida, el MCU
excita el pin de acuerdo al contenido del registro
PORT correspondiente.
Cuidado con los cortocircuitos
Orden de seteo de DDR y PORT
PROTECCIÓN DE ENTRADAS Y SALIDAS
Conexión directa: problemas habituales
Aislación galvánica
INTERRUPCIONES
INTERRUPCIONES
Un programa sin uso de interrupiones (polling):
¿inconvenientes?
ProcesarProducir salidas. . .do_init();. . .for (;;) {do_inputs();do_some_process();set_outputs()}Inicializa-cionesLeer entradasINTERRUPCIONES
Con interrupciones:
Pueden no existir
ProcesarProducir salidas. . .do_init();. . .interrupts_on;for (;;) {do_some_process();set_outputs()}Atender evento 1Atender evento 2Atender evento n. . .Inicializa-cionesINTERRUPCIONES
Las interrupciones se generan cuando cambia un
“estado”.
Permiten la reacción ante eventos
Restricciones de tiempo real
Polling vs. Interrupts
Interrupt Service Routine (ISR)
INTERRUPCIONES
Control de Interrupciones
Interrupt Enable (IE): bit que se setea para habilitar al
controlador que llame a la ISR cuando se produce el
evento.
Interrupt Flag (IF): lo setea el MCU cuando se produce
el evento. Se limpia automatica o manualmente.
Interrupt mode (IM): mas de un bit para indicar si la
interrupcion se produce por flanco ascendente,
descendente, , etc.
Global Interrupt Enable.
INTERRUPCIONES
Control de Interrupciones
Inhabilitar las interrupciones no implica perder
eventos.
Cuidado al limpiar la IF
Normal Interrupts and NMI
INTERRUPCIONES
Interrupt Vector Table: es una tabla donde se indica
para cada interrupción en donde se encuentra la
ISR que la atiende.
Puede contener la dirección de la primera
instrucción de la ISR respectiva o una instrucion
jump (JSR) a la ISR (depende el MCU)
INTERRUPCIONES: IVT
En el Atmega128 (Atmel):
8
G
Q
8
0
S
9
C
M
l
)
e
a
c
s
e
e
r
F
(
INTERRUPCIONES
Prioridades: fijas o variables
Dentro de una ISR se puede establecer cuales
interrupciones se permiten (sin hacerlo “a mano”
vía los IE)
Cancelación de ruidos
Eventos internos
INTERRUPCIONES
Pasos que ocurren ante una interrupción:
1. MCU setea la IF (esté o no habilitada la interrupción)
2.
3.
Se termina la instrucción en curso o si el MCU está en
estado “sleep”, se despierta.
Se identifica la ISR considerando los IE y la
interrupcion de mas alta prioridad (si hay mas de un IF
seteado).
4.
Se llama a la ISR (... y ya pasó un tiempito)
INTERRUPCIONES
Ejemplo:
El controlador de interrupciones 1 (KBI1) tiene
8 entradas conectadas a determinados puertos
KBI1P2
INTERRUPCIONES
Registros de control (ubicación en la memoria)
Son 3
dirección
mnemónicos de funcion de cada bit
INTERRUPCIONES
INTERRUPCIONES
Mapeo a variables:
INTERRUPCIONES
Ejemplo inicialización:
void InitKBI() {
/*KBI1 Init*/
KBI1SC_KBIE = 0;
KBI1ES_KBEDG3 = 0; // KBI1P3 internal pull-up, falling edge/low level
KBI1ES_KBEDG2 = 0; // KBI1P2 internal pull-up, falling edge/low level
KBI1PE_KBIPE3 = 1;
KBI1PE_KBIPE2 = 1;
KBI1SC_KBIMOD = 0; // Detect edges only
KBI1SC_KBACK = 1
Comentarios de: Introducción a los Microcontroladores (0)
No hay comentarios