Download Introducción a los Microcontroladores
Document related concepts
no text concepts found
Transcript
Introducción a los
Microcontroladores
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
REPASO
Arquitectura: Procesador
Arquitectura
Von Neuman vs. Hardvard
CISC vs. RISC
Tamaño/variedad de las instrucciones
Velocidad: clock; 8/16/32 bits
REPASO
Arquitectura
de las instrucciones
Por stack
Por acumulador
Dos direcciones
Tres direcciones
REPASO
Arquitectura
Modos de direccionamiento
Memoria
Registros (memoria de corto plazo):
Memoria de datos
Pequeña (relativamente)
Almacenamiento temporario p/CPU
Relativamente Grande
Almacena datos mientras el MCU funciona
Memoria de programa
Relativamente Grande
De preferencia, mantiene el programa incluso con
el MCU apagado.
REPASO
Memoria: Tipo físicos
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
Ejemplo:
bit 7
bit 0
1 0 0
0
0 0
0 0PTB7 as output
PTBDD = 0x80; // initialize
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 Schmitttrigger.
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
REPASO
Conversión DIGITAL a ANALOGICA:
Por redes del tipo R-2R. Para r bits sería:
Conversión Analógica-Digital (CAD)
Comparador: determina si V1 >V2 y
arroja 1, ó 0 en caso contrario.
REPASO
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
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”.
REPASO
Conversión Analógica-Digital (CAD)
Seguidor (tracking): muy lenta (2r bit
times) y variable; barata.
REPASO
Conversión Analógica-Digital (CAD)
Aproximaciones sucesivas: velocidad media y
fija en r+1
Este es el modo mas utilizado
Conversión Analógica-Digital (CAD)
Control del CAD
Tensión de
Referencia
Entrada
Start Conversion
Habilitación
Salida (registro)
Conversion
Complete
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
0 1 0
0
0 1
// Configures ADC peripheral (ADC clock = 6.25MHz)
0 0
// 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):
Inicializaciones
Leer
entradas
Procesar
Producir
salidas
...
do_init();
...
for (;;) {
do_inputs();
do_some_process();
set_outputs()
}
¿inconvenientes?
Interrupciones
Con interrupciones:
Inicializaciones
Pueden no existir
Procesar
Producir
salidas
Atender
evento 1
Atender
evento 2
...
do_init();
...
interrupts_on;
for (;;) {
do_some_process();
set_outputs()
}
...
Atender
evento n
REPASO
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)
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
REPASO
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)
Interrupciones: IVT
En el Atmega128 (Atmel):
MC9S08QG8
(Freescale)
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.
2.
3.
4.
MCU setea la IF (esté o no habilitada la
interrupción
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).
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;
KBI1ES_KBEDG2 = 0;
KBI1PE_KBIPE3 = 1;
KBI1PE_KBIPE2 = 1;
KBI1SC_KBIMOD = 0;
KBI1SC_KBACK = 1;
KBI1SC_KBIE = 1;
} //end InitKBI
//
//
//
//
//
//
//
//
Mask KBI1 interrupts
KBI1P3 internal pull-up, falling edge/low level
KBI1P2 internal pull-up, falling edge/low level
Enable KBI1P3 interrupts
Enable KBI1P2 interrupts
Detect edges only
Clear possible false interrupts
Enable KBI1 interrupts
Interrupciones
Atención de la interrupción
Calificador: dice que la función es una
subrutina de interrupción
Interrupciones
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 2n
slaves.
Interfaces y Otros Periféricos
Interfaces y Otros Periféricos
IIC (I2C)
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 (I2C)
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
...
Interfaces y Otros Periféricos
Arquitectura
MC9S08LC60
MCF52235