Introducción a los
Microcontroladores
Introducción
Arquitectura
Memoria
I/O
Interrupciones
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
nucleo 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)
Oferta de
Microcontroladores
Oferta de
Microcontroladores
Oferta de
Microcontroladores
Oferta de
Microcontroladores
Dentro de cada “familia” hay mucha
varidad de dispositivos
Pueden estar agrupados en
“subfamilias”
Una forma de clasificación es en base
a los perifericos que integran o
memoria
Oferta de
Microcontroladores
MC9RS08KA Family
Arquitectura
Arquitectura: Procesador
REPASO
Arquitectura
Von Neuman vs. Hardvard
CISC vs. RISC
Tamaño/variedad de las instrucciones
Velocidad: clock; 8/16/32 bits
Arquitectura
de las instrucciones
Por stack
Por acumulador
Dos direcciones
Tres direcciones
REPASO
Arquitectura
Modos de direccionamiento
REPASO
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
REPASO
Memoria: Atención
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?
I/O
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
Digital I/O
Digital I/O
PTBDD = 0x80; // initialize PTB7 as output
PTBD = 0; // initialize PTB to 0
PTBD_PTBD7 = ~PTBD_PTBD7; // invert the output
Ejemplo:
bit 7 bit 0
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
Analog I/O
Conversión DIGITAL a ANALOGICA:
Usando un modulador de ancho de
pulso
Conversión DIGITAL a ANALOGICA:
Por redes del tipo R-2R. Para r bits sería:
REPASO
Conversión Analógica-Digital (CAD)
Comparador: determina si V1 >V2 y
arroja 1, ó 0 en caso contrario.
Conversión Analógica-Digital (CAD)
Conversion de valor
REPASO
Conversión Analógica-Digital (CAD)
La velocidad de muestreo determina la
máxima frecuencia posible de muestrear
(fmax<fs/2). Además, hay que tener en
cuenta el tiempo que puede llevar la
conversión.
La conversion lleva tiempo: para asegurar
la estabilidad se usa una etapa de
retención (sample-hold)
REPASO
Conversión Analógica-Digital (CAD)
Directa (flash): muy rápida (1 bit
time); muy cara
REPASO
Este modo de
conversión rápido es
utilizado en algunos
MCU y por lo general,
no hay mas de 1 o 2
canales “rápidos”.
Conversión Analógica-Digital (CAD)
Seguidor (tracking): muy lenta (2
r
bit
times) y variable; barata.
REPASO
Conversión Analógica-Digital (CAD)
Aproximaciones sucesivas: velocidad media
y fija en r+1
REPASO
Este es el modo mas utilizado
Conversión Analógica-Digital (CAD)
Control del CAD
Habilitación
Tensión de
Referencia
Entrada
Salida (registro)
Conversio
n
Complete
Start Conversion
Conversión Analógica-Digital (CAD)
Los MCU pueden tener de 4 a 16 o más entradas
(canales) y un solo CAD, de 8 a 12 bits de precisión.
Se multiplexan los canales (aumentan los tiempos)
Autoincremento: al leer un canal, se pasa al
siguiente y se efectúa un SC automáticamente.
Existe el “modo contínuo” y de disparos sucesivos
mediante el RTC
Una conversión puede “dispararse” por eventos
como un timer, una variación de una entrada
digital o una señal externa.
CAD: Ejemplo de características en
un MCU
Linear successive approximation algorithm with 12 bits resolution.
Up to 28 analog inputs.
Output formatted in 12-, 10- or 8-bit right-justified format.
Single or continuous conversion (automatic return to idle after
single conversion).
Configurable sample time and conversion speed/power.
Conversion complete flag and interrupt.
Input clock selectable from up to four sources.
Operation in wait or stop3 modes for lower noise operation.
Asynchronous clock source for lower noise operation.
Selectable asynchronous hardware conversion trigger.
Automatic compare with interrupt for less-than, or greater-than or
equal-to, programmable value.
CAD: Ejemplo de implementación
en un MCU
Estado,
control
y
configuración
reloj
multiplexor
comparador
CAD: Ejemplo de un registro de
configuración
// Configures ADC peripheral (ADC clock = 6.25MHz)
// Bus clock as clock source, 12-bit conversión and divisor=4
ADCCFG = 0x44;
Conversión Analógica-Digital
Conversión Analógica-Digital
Introducción a los
Microcontroladores
Introducción
Arquitectura
Memoria
I/O
Interrupciones
Timers
Interfaces y Otros Periféricos
Interrupciones
Un programa sin uso de interrupiones (polling):
¿inconvenientes?
Procesar
Producir
salidas
. . .
do_init();
. . .
for (;;) {
do_inputs();
do_some_process();
set_outputs()
}
Inicializa-
ciones
Leer
entradas
Interrupciones
Con interrupciones:
Pueden no existir
Procesar
Producir
salidas
. . .
do_init();
. . .
interrupts_on;
for (;;) {
do_some_process();
set_outputs()
}
Atender
evento 1
Atender
evento 2
Atender
evento n
. . .
Inicializa-
ciones
Interrupciones
Las interrupciones se generan
cuando cuando cambia un “estado”.
Permiten la reacción ante eventos
Restricciones de tiempo real
Polling vs. Interrupts
Interrupt Service Routine (ISR)
REPASO
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
interrupcion 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)
REPASO
Interrupciones: IVT
En el Atmega128 (Atmel):
M
C
9
S
0
8
Q
G
8
(
F
r
e
e
s
c
a
le
)
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.Se termina la instrucción en curso o si el MCU
está en estado “sleep”, se despierta.
3.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
KBI1P2
El controlador de interrupciones 1 (KBI1)
tiene 8 entradas conectadas a determinados
puertos
Ejemplo:
Interrupciones
Registros de control (ubicación en la
memoria)
Son 3
dirección mnemónicos de funcion de cada bit
Interrupciones
Calificador: dice que la función es
una subrutina de interrupción
Número de vector que
debe atender esta rutina
Alternativa:
Se le puede definir al linker (archivo .prm)
que guarde la direccion de la funcion
directamente:
VECTOR ADDRESS 0xFFDA KBIx-ISR
Y entonces la sintaxis queda:
interrupt void KBIx_ISR(void) { ...
Interrupciones
En el main:
Interrupciones
Interrupciones
Polling vs. Interrupts
Siempre hay que analizar la situación puntual,
pero en general, usar interrupciones cuando:
Los eventos son infrecuentes
Hay mucho tiempo entre eventos
El cambio de estado es importante
Quiero detectar impulsos cortos
Hay eventos generados por hardware (no hay
rebotes o picos)
Hay muy poco para hacer así que conviene estar
en modo sleep
Interrupciones
Conviene “polear” cuando:
El operador es humano
No se requiere una temporización precisa
El estado es mas importante que el cambio
Los “impulsos” duran mucho
Hay ruido en la señal
Hay cosas para hacer en el main (pero no
demasiado)
Introducción a los
Microcontroladores
Introducción
Arquitectura
Memoria
I/O
Interrupciones
Timers
Interfaces y Otros Periféricos
Timers
Son contadores que suben o bajan
con cada pulso de reloj.
El valor actual se lee de un registro o
se setea en el mismo.
Cuidado al acceder a timers con
longitud de registro mayor a la
palabra del MCU
Timers
Los timers generalmente generan una
interrupción cuando hacen overflow
Esto sirve para generar señales o
eventos peródicos (con acotada
precisión)
Pueden tener una señal de clock
independiente del MCU. Con ella se
incrementa la cuenta.
Timers
Prescaler
Es otro contador (de 8 o 10 bits) que trabaja
contra el clock y produce una salida que es la
que entra al timer.
Se logra una extension de tiempos a medir por
la division del prescaler. Ejemplo:
8 bit timer, clock de 1 Mhz -> cuenta máxima 255 uS
con una resolución de 1 uS
8 bit timer, clock de 1 Mhz, prescaler en 1024 ->
cuenta máxima 260 ms con una resolución de 1 ms.
Timers
Otras fuentes de cuenta:
Pulsos externos
Cristal externo: generlamente de 32.768 KHz que
implementa otro RTC independiente en el MCU
Timestamp (input capture)
Puede setearse un evento para que automáticamente
se copie el valor del contador en un registro de captura.
Ejemplo: cuando un comparador cambia, tomar la
cuenta.
Disparo de salida (output compare)
Se setea el timer una cuenta y cuando se alcanza,
automáticamente se levanta una salida, o similar.
Timers
Ejemplo de registros (un solo timer)
Este timer es muy versátil y trabaja tambien como
PWM
Timers
Timers
Timers
Ejemplo de uso simple:
Clock=BUSclk=>8 Mhz
Introducción a los
Microcontroladores
Introducción
Arquitectura
Memoria
I/O
Interrupciones
Timers
Interfaces y Otros Periféricos
Modulación de Ancho de
Pulso (PWM)
Es un timer que genera una señal
periódica de salida con período y
ciclo de trabajo configurables
Modulación de Ancho de
Pulso (PWM)
Además de su uso como CDA, los
PWM se usan para controlar ABS en
autos, niveles de iluminación en
LCDs, control de motores, etc.
Timers y PWM
Otras características
RTC (Real Time Counters)
Watchdog
Consumo: reduccion de tensión,
frecuencia y modo sleep
Reset, POR y BOR
External, Internal (software) Reset
Keyboard interrupts
Interfaces y Otros Periféricos
SCI (UART)
Provee una (o mas) interface de comunicación
asincrónica serie (UART) por medio de dos hiloas (Tx y
Rx)
Parámetros comunes: full o half duplex, data bits, parity
bits, stop bits, baud rate
Interfaces y Otros Periféricos
SCI (UART)
Generalmente los modulos generan interrupciones (fin
de transmisión, recepción, etc.)
De las SCI del MCU se pueden generar con componentes
externos interfases físicas RS232, RS422, RS485, etc.
USART (sincrónica)
Agrega un hilo para sincronismo, el cual es generado por
una de las partes
Si se usa como UART, el pin se puede usar como I/O
Interfaces y Otros Periféricos
SPI (Serial Peripherical Interface)
Para comunicación serie mediante 4
hilos basada en master-slave:
MOSI: Master Out – Slave In
MISO: Master In – Slave out
SCK: System Clock, generado por el master
SS: Slave select. Si hay mas de una linea, con
un decodificador externo se pueden atender
2
n
slaves.
Interfaces y Otros Periféricos
Interfaces y Otros Periféricos
IIC (I
2
C)
Inter-IC bus, de Phillips, es un bus sincrónico que
opera en modo master-slave con dos hilos SCL y
SDA en modo half duplex, para distancias
cortas, hasta 3.4 Mbps, mediante el
intercambio de tramas.
No hay límites al numero de dispositivos a
conectar (capacidad total en el bus < 400pF)
Cada nodo (uno debe ser master, por lo menos)
tiene una dirección de 7 o 10 bits
Interfaces y Otros Periféricos
IIC (I
2
C)
Interfaces y Otros Periféricos
Ethernet
Implementación de 10/100/1000* Ethernet
MAC con PHY
Para conexiones a redes de area local estándar
CAN (Controller Area Network) de Bosh y
Flexcan
Originalmente diseñado para su uso en
automoviles y ahora extendido a otras areas,
permite la comunicación por bus en 1 Mbps
hasta 40 m. mediante “broadcast”.
Interfaces y Otros Periféricos
Módulos de criptografía
Stack TCP/IP (para módulos ethernet)
IEEE 1149.1 Test Access Port (JTAG)
DMA Timers
QSPI (Queued SPI)
EzPort, para programar la memoria flash
interna desde flash externas en forma directa
LCD controllers
...