Académique Documents
Professionnel Documents
Culture Documents
MICROCONTROLADORES
Introducción
Arquitectura
Memoria
I/O Digital
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
INTRODUCCIÓN
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)
OFERTA DE MICROCONTROLADORES
OFERTA DE MICROCONTROLADORES
ADVANCED RISC MACHINES
Fundada en 1990 (Antes ACOM)
“The world's leading semiconductor intellectual property
(IP) supplier”
“best MIPS to Watts - best MIPS to $ - smallest CPU die
size”
Los “socios” (hoy mas de 1000) compran las licencias de IP
y fabrican en base a ellas.
Diseñan procesadores y tecnologías relacionadas con ellos,
por ejemplo:
Procesadores Seguridad (para ARMs)
Kit FRDM-KL46Z
ARQUITECTURA
ARQUITECTURA – EJEMPLO - AVR
ARQUITECTURA
IA
ARQUITECTURA: PROCESADOR
ARQUITECTURA
Arquitectura de Arquitectura
Cortex-M la Memoria ARM
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
ENTRADA/SALIDA DIGITAL
ENTRADA/SALIDA DIGITAL
DIGITAL I/O
PC KL46Z
PRIMER PROGRAMA:
GPIO => USAR LEDS Y PULSADORES DEL KIT
1. Ver esquemático del kit: identificar pines
2. Ver manual de referencia del MCU
1. Identificar pines y puertos conectados con los leds y pulsadores
2. Ver necesidades de inicialización
1. Module Multiplexer (PINOUT - Pin Control Register)
2. System Clock Gating Control
Inicialización
Estado 1
b Evento/señal/
c Condición
a
d
Estado 2 Estado 3
e
MAQUINAS DE ESTADO FINITO EN C/C++
(MEF/FSM)
Formalmente:
Estado 1
〈 S = {1,2,3},
Σ = {a, b, c},
b Evento/señal/ A ={(1,b,2),(2,c,1),(2,d,3),(3,e,2),(3,a,1)},
c Condición
a
sk =1 〉
d
Estado 2 Estado 3
e
MAQUINAS DE ESTADO FINITO EN C/C++
(MEF/FSM)
Uso de :
Polling Interrupciones
Handler
Interrupción
Inspección del Implementación hardware Implementación
hardware (interno u (interno u
externo) de la máquina de externo) de la máquina de
para detectar eventos estados estados
MAQUINAS DE ESTADO FINITO EN C/C++
(MEF/FSM)
Tipos de implementación en C y C++
Con instrucciones “switch” anidadas
Basadas en una matriz estado-transición
Similar a la anterior pero con punteros a funciones
Multi-thread FSM
Uso de estados extendidos
Todas las opciones anteriores orientadas a objeto en
C++
MEF CON SWITCH ANIDADOS
Un nivel de decisión superior (SWITCH externo) referido al estado de
la máquina
Un nivel de decisión inferior (SWITCH interno) referido a las señales,
eventos o condiciones que tienen significancia en ese estado
Con pocas señales el switch interno suele reemplazarse con por IF(s)
A veces se invierte la jerarquía (modelo por eventos => Petri)
Los estados suelen ser enumeraciones
Implementado:
Directamente en el main (totalmente o como una parte de él)
Haciendo uso de una función (“dispatcher”), donde se implementa
MEF CON SWITCH ANIDADOS
Modelo:
Proximo_Estado= Estado_Actual;
switch ( Estado_Actual) {
case EST_1:
//aqui van acciones dentro del estado 1
switch (evento ) { //solo eventos que cambian este estado
case EVEN_1:
Proximo_estado = EST_x;
// aquí pueden ir acciones asociadas al evento para este cambio de estado
break;
case EVEN_4:
Proximo_estado = EST_y;
// aquí pueden ir acciones asociadas el evento para este cambio de estado
break;
...
}
break;
(continua en la siguiente diapositiva)
MEF CON SWITCH ANIDADOS
(viene de la anterior diapositiva)
case EST_n:
//aqui van acciones dentro del estado n
switch (evento ) { //solo eventos que cambian este estado
case EVEN_3:
Proximo_estado = EST_x;
// aquí pueden ir acciones asociadas al evento para este cambio de estado
break;
...
}
break;
}
if (Estado_actual!=Proximo_estado){ // solo en caso de utilidad particular
//aciones para todo cambio de estado
funcion_salida(Estado_actual); // solo en caso de utilidad particular
funcion_entrada(Próximo_estado); // solo en caso de utilidad particular
Estado_actual=Proximo_estado;
}
MEF CON SWITCH ANIDADOS
Simple
Poco uso de RAM
Tiempo de respuesta variable (aumenta con el numero de casos)
Implementación no jerárquica
El código no es reusable
Compleja cuando los estados y las señales aumentan
MEF CON SWITCH ANIDADOS
Una variante (de muchas):
Estado A Accion A(), Estado_Q Accion B(), Estado_A AccionC (), Estado_A
Estado 1
int func_S1(void);
int func_S2(void); b Evento/señal/
int func_S3(void); c Condición
a
d
enum codigo_estados { S1, S2, S3};
enum codigo_eventos {a, b, c, d, e, nada};
Estado 2 Estado 3
struct transicion { e
int (*funcion_estado)(void);
enum codigo_estados proximo;
};
main() {
int (* accion)(void);
for (;;) {
dispatcher(estado_actual,evento_actual);
}
return 0;
}
Inicialización
Leds Apagados
Pulsador
apretado Pulsador
Liberado Pulsador
Liberado
Tiempo X