Microcontroladores Ciscx

Post on 25-May-2015

3.146 views 14 download

description

Presentacion utilizada para el taller "Programacion de microcontroladores con lenguaje c" del decimo Congreso Internacional de Sistemas Computacionales (CISC X)

Transcript of Microcontroladores Ciscx

Este taller presenta una introducción al panorama actual tecnológico en referencia a los microcontroladores; arquitecturas, aplicaciones, modos de programación, etc. La parte practica se enfoca en la programación de microcontroladores de 8 bits utilizando el lenguaje de programación C (brevemente se presentan otras opciones de programación). Se utilizaran microcontroladores y herramientas de Freescale.

¿Qué son los microcontroladores?

› Características de los microcontroladores

uC vs uP.

Clasificacion de arquitecturas.

› Tipos de microcontroladores (y similares).

8, 16, 32 bits.

DSPs.

Programando microcontroladores.› Formas de programar un micro controlador

Lenguaje ensamblador.

Lenguajes de nivel medio a alto.

Software corriendo sobre OS embebido.

› Conociendo el HCS08AC

› Practicas:

Practica 1: GPIO.

Practica 2: ADC.

Practica 3: Timers.

Practica 4: Puerto serial (SCI).

Objetivos:

Describir la función de un

microcontrolador.

Características generales de

arquitectura.

Diferentes tipos de microcontroladores.

También llamados:

SoC, controlador embebido, micro

computadora, etc...

Electrodomesticos.› Microondas, Lavadoras, Refrigeradores.

Entretenimiento.› Dispositivos portátiles multimedia.

› Televisores, Blue-Ray, Equipos de sonido, etc.

Automotriz.› Monitoreo y control de subsistemas.

› Infotainment.

Industrial.› Control de procesos.

Un solo chip (hardware necesario para

funcionar minimo).

Utilizados para control.

Sus componentes son:

› Memoria.

› I/O.

› Nucleo de procesamiento.

› Perifericos.

ROM:

› Programa, Constantes.

RAM

› Programa en ejecución, Variables.

Algunos de los periféricos mas comunes

en un microcontrolador son los

siguientes:

› Timer, GPIO, A/D, D/A, Comparador, PWM

› Controladores:

LCD, Touchscreen, Teclado, comunicación

serial.

Conexión entre los periféricos y el

exterior.

Pueden tener múltiples funciones de

manera que se debe configurar cual

será la función de cada pin del chip.

Lee y almacena datos.

Realiza operaciones matemáticas básicas.

Realiza operaciones lógicas (AND, OR, etc).

Controla el flujo del programa. Conjunto de Instrucciones especifico.

Modelo de programación especifico:› Bits de status.

› Registros.

› Program Counter.

› Stack pointer.

Núcleos propios (PPC, S12, XGATE,) o con licencia (ARM, 8051).

MPU.

Uso general.

Mas potentes.

• MCU.

• Uso especifico.

• Todo en un chip.

• Módulos “ayudan”

al nucleo.

Por tamaño del bus de datos:

› 4, 8, 16, 32 bits.

Por el conjunto de instrucciones:

› CISC, RISC.

Por el acceso a memoria:

› Harvard

› Von Neumann

4-32 bits.

Típicamente el tamaño del bus de datos

es también el tamaño de las

operaciones.

El tamaño del bus de datos también es

relevante por que en combinación con

el modelo de programación nos dirá

cuanta memoria se puede accesar.

CISC (Complex Instruction Set Computer).› Instrucciones mas complejas.

› Instrucciones de tamaño variable.

› Se necesitan convertir primero a micro instrucciones.

› Mayor numero de ciclos por instrucción.

› Programas cortos.

RISC (Reduced Instruction Set Computer).› Instrucciones mas sencillas.

› Menos instrucciones.

› Idealmente un ciclo por instrucción.

› Pocos formatos de instrucciones con tamaño fijo.

› Programas largos.

Harvard:

Von Neumann

Instruction

memory CPUData

memory

CPU Data and

instruction

memory

Bajo consumo de potencia.

Mayor integracion.

Grandes cantidades de memoria Flash.

Mayor tamaño de bus.

Multiples nucleos (Cortex A9, XGATE).

Aplicaciones con baja demanda de

procesamiento.

Ejemplo: Freescale HCS08ac60

› 40 MHz.

› Ahorro de potencia: wait mode, stop mode.

› 60KB Flash.

› 2KB RAM.

Aplicaciones mas demandantes:

Automotriz, Industrial.

Mayor gama de protocolos de

comunicación:

› CAN, FlexRay, etc.

Ejemplo: Freescale HCS12XEP100.

S12X max frequency 50 Mhz

Prioridad de interrupciones

programable.

XGATE operando al doble de la

frecuencia del bus (hasta 100Mhz).

1MB Flash.

64KB RAM.

Aplicaciones altamente demandantes.

› Power train (automotriz).

› Voice recognition.

› Networking.

› Multimedia.

› PDA.

Ejemplo: OMAP44xx

› Full HD.

› 1 Ghz.

Se estima que en el 2012 los dispositivos

con nucleos ARM desplazaran a intel del

mercado de las netbooks.

http://www.youtube.com/watch?v=lrLa

1qTVf34

Procesador digital de señales.

Se puede definir como un

microcontrolador cuyo modelo de

programacion esta optimizado para

realizar un alto numero de MACs

(Multiply and Accumulate)

Ejemplo:

› Texas Instruments TMS320C6472-700.

6 megamodulos los cuales cuentan con:› 32 Kbytes de cache L1 para datos.

› 32 Kbytes de cache L1 para programa.

› 608 Kbytes de cache L2 (unificado para datos y programa).

› Un núcleo de DSP de alto rendimiento C64x+.

› DMA interno.

64 canales de EDMA.

Un controlador de memoria DDR2.

768 Kbytes de RAM interna.

33600 MMACS (Mega MAC por segundo)!!!!!!!!!

Freescale.

Texas Instruments.

Microchip.

Atmel.

Samsung.

Renesas.

Infineon.

• Zilog

• ST microelectronics.

• NEC.

• Fujitsu.

• NXP.

• Toshiba.

• Analog Devices.

Periféricos e interfaces disponibles.

Roadmap.

Caracterizticas del microcontrolador:

› Consumo de potencia.

› Capacidades de procesamiento.

› Memorias.

Lenguaje ensamblador.

Lenguaje de alto nivel.

Cargando un SO y programando sobre

este.

El lenguaje ensamblador es un lenguaje de bajo nivel por que hay una relación directa entre las instrucciones en ensamblador y opcodes del lenguaje maquina.

Cada núcleo tiene su propio conjunto de instrucciones y modelo de programacion.

Se recomienda utilizar lenguaje ensamblador cuando:› Se quiere tener una relación directa entre software y hardware.

› Se tiene memoria de programa muy limitada.

› Aplicaciones criticas.

Desventajas: curva de aprendizaje pronunciada, dificil de comprender, dificil de portar.

Código sencillo de comprender y

codificar aun cuando no se ha

trabajado con el microcontrolador.

Sencillo de migrar (si se codifica

adecuadamente).

Se puede combinar con ensamblador (si

el compilador lo permite).

Desventajas: Entre mayor sea el nivel del

lenguaje mayor sera el overhead.

Se recomienda cuando se tienen aplicaciones demasiado grandes o cuya administración es complicada.

Se programa como si se estuviera programando una PC.

Se utiliza el toolchain especifico de la plataforma para compilar las aplicaciones (cross-compile).

Se puede utilizar un NFS (Network File System) para facilitar el debugeo.

Algunos ejemplos: WinCE, Linux (varias distribuciones), Android, ChromeOS, sistemas operativos en tiempo real.

Desventaja: El sistema operativo consume recursos adicionales, se necesita contar con una version del sistema operativo compatible con la plataforma (o adaptarlo de otra).

C es el lenguaje por excelencia para programación de sistemas embebidos.

Es un lenguaje de nivel medio-alto.

Existen recomendaciones a seguir para programar sistemas embebidos, es decir se recomienda solo usar un subconjunto del lenguaje C.

Ventajas:› Al compilarse no dará un overhead demasiado grande.

› Soportado por la mayoría de las plataformas y compiladores.

› Es mas fácil programar código eficiente en c (que se convierta en código eficiente en ensamblador) que ensamblador eficiente.

› Altamente conocido.

Desventajas:› Los estándares del lenguaje (ANSI C, ISO 9899) no especifican

algunos detalles, estos pueden traer problemas.

El codigo en C es compilado para

generar un codigo objeto.

Todos los codigos objeto que se

compilan junto con un proyecto se

“acomodan” en memoria de acuerdo a

la informacion del Linker.

Se debe evitar usar tamaños de datos

mayores al tamaño del bus de datos.

Procurar usar unsigned.

El punto flotante se debe utilizar solo

cuando sea estrictamente necesario.

Los tamaños de datos NO están

completamente estandarizados se

recomienda definir nuevos tipos de

datos.

Las variables volátiles (volatile) son aquellas que se pueden modificar fuera de la ejecución normal del programa como es el caso de los registros.

Las variables volatile no son suceptiblesa las optimizaciones del compilador, se debe tener en cuenta cuando se realizan operaciones que no tienen efecto sobre ninguna parte del programa.

Las herramientas a usarse en

este taller son:

Development kit

DEMO9S08AC60

IDE

Code warrior

Evaluation kit

Development kit

Reference Design kit

VirtuaLab

Editor

Compilador

Ensamblador

Linker

Simulador

Debugger

Descargar la siguiente hoja de datos:

http://www.freescale.com/files/microcontr

ollers/doc/data_sheet/MC9S08AC60.pdf

?fpsp=1

Revisar el overview ubicado al principio.

Analizar el mapa de memoria.

Descargue la siguiente guía de usuario:

http://www.freescale.com/files/microcontr

ollers/doc/user_guide/DEMO9S08AC60E_

UG.pdf?fpsp=1

Ubicar donde están las conexiones de

los leds los push buttons y los switches.

1. Desactivar el watchdog.

2. Configurar los pins donde están

conectados los LEDs como salidas.

3. Configurar los switches y los push

buttons como entradas.

4. Programar que los LED prendan cuando

se presionen los switches y/o push

button.

Existen dos métodos para esperar a que externamente se modifique el valor de un registro:› Polling: se pone una condicion en espera hasta

que el valor monitoreado cambie:

while (flag); /*cuando la bandera cambie a 1 continuara la ejecucion */

› Interrupciones: Se configura el sistema de manera que cuando haya suceda el evento esperado se llame la interrupción que le corresponda a dicho evento. Cuando el evento esperado sucede se guarda el

contexto y se carga la dirección del vector de interrupciones correspondiente en el PC.

Configurar el ADC para que trabaje con

el potenciometro de la tarjeta y que

modifique el valor que se muestra en los

LEDs (toda la barra de LEDs).

Configurar el clk para que trabaje a

20Mhz.

Configurar los timer para que trabajen

con un tiempo de aproximadamente 1

micro segundo (primero manejar por

polling y después por interrupciones).

Utilizando el timer configurado hacer

que un LED parpadee cada segundo.

Configurar un canal del timer para

trabajar como PWM conectado a un

LED.

Modificar la intensidad de la iluminación

del LED de acuerdo a la posición del

potenciómetro.

Configurar el SCI para un baud rate de

9600.

Configurar las interrupciones de manera

que cuando se reciba un dato se envie

y cada que se envie dicho dato se

prenda o apague un LED.

Conectar el puerto serial del

microcontrolador al puerto serial de la

computadora.