Laboratorio de Sistemas Embebidos - um.es

Post on 16-Oct-2021

10 views 0 download

Transcript of Laboratorio de Sistemas Embebidos - um.es

Laboratorio de Sistemas Embebidos

Conceptos generales

(2009)

Índice

  Introducción a los PIC   Conceptos generales sobre el dsPIC30F   Reloj del sistema   Entrada/salida con puertos paralelos   Timers   Interrupciones   La placa dsPICDEM 1.1   El compilador C30

Introducción a los PIC (1)

  PIC   Microchip no usa PIC como un acrónimo, pero

son conocidos como Peripheral Interface Controllers

  Familia de microcontroladores con arquitectura Harvard

  Amplia funcionalidad de I/O   Populares por su bajo coste, amplia disponibilidad

y uso, y gran cantidad de recursos sobre ellos   Usado en una amplia gama de dispositivos (ej.

PlayStation)

Introducción a los PIC (2)

  Familia PIC

  PICs de gama baja   Memoria de código

direccionable por 12 bits   Pila de llamada de dos

niveles   Programación por

acumulador   PIC10, PIC12, y algunos

PIC16

Introducción a los PIC (3)

  Familia PIC

  PICs de gama media   Memoria de código

direccionable por 14 bits   Pila de llamada de 8

niveles   Leve modificación del

conjunto de instrucciones

  Mayoritariamente PIC12 y PIC16

Introducción a los PIC (4)

  Familia PIC

  PIC17   Nunca llegó a ser popular   Fue absorbido por el PIC18   Mayor cantidad de

instrucciones   Pila de 16 niveles   Movimiento de datos

registro a registro   Opción de memoria externa   Multiplicador

Introducción a los PIC (5)

  Familia PIC

  PIC18   El más popular de toda

la gama   Hereda las nuevas

funcionalidades del PIC17

  Pila de 31 niveles   Mejora del

direccionamiento

Introducción a los PIC (6)

  Familia PIC

  PIC24   Mejora significativa de la

arquitectura   Mayor frecuencia de

reloj   Capacidades DSP   Primeros PIC de 16 bits

reales (direccionamiento y registros de 16 bits)

  Multiplicación mejorada   División

Introducción a los PIC (7)

  Familia PIC

  dsPIC30   Arquitectura

prácticamente equivalente a PIC24

  El dsPIC30 fue anterior a los PIC24

  Incluye capacidades como procesador de señales digitales

  Canales A/D: 16 canales de 10 bits y 16 canales de 12 bits

Introducción a los PIC (8)

  Familia PIC

  dsPIC33   Incremento del número

de interrupciones disponibles

  Mayor número de timers   Incremento en el número

de líneas de captura de señales de entrada

  Incremento del número de líneas para señales de salida

Introducción a los PIC (9)

  PIC18 -> PIC24   Salto cualitativo en la arquitectura   Paso de tamaño de instrucción de 16 a 24 bits   Frecuencia de reloj doblada   16 registros de trabajo, frente a un único registro

en PIC18   De un registro de estado a dos   La pila pasa a ser software   El multiplicador pasa de 8x8 a 17x17   Inclusión de un divisor

Introducción a los PIC (10)   Resumen comparativo de la familia PIC

Precio ($)

CPU (MIPS)

Flash (KB)

RAM (KB)

EEPROM (KB)

Puertos I/

O

ADC (cha) Input Capture

(cha)

Output Compare (cha)

Motor Control

(cha)

Timers UART SPI I2C CAN

PIC10F222 0.47 0.002 0.75 0.02 0 4 2 8-bit 0 0 0 1 8-bit 1 WDT

0 0 0 0

PIC12HV615 0.71 0.005 1.75 0.0625 0 6 4 10-bit 1 1 0 2 8-bit 2 16-bit 1 WDT

0 0 0 0

PIC14000 5.49 0.005 7 (OTP)

0.1875 0 20 8 8-bit 1 1 0 1 8-bit 1 16-bit 1 WDT

0 0 0 0

PIC16HV785 1.18 0.005 3.5 0.125 0.25 18 12 10-bit 1 1 0 2 8-bit 1 16-bit 1 WDT

0 0 0 0

PIC18F8722 7.41 10 0.125 3.84 1 70 16 10-bit 5 5 0 2 8-bit 3 16-bit 1 WDT

2 1 2 0

PIC24FJ128GA010 5.05 16 128 8 0 86 16 10-bit 5 5 0 5 16-bit 2 2 2 0

PIC24HJ64GP510 4.90 40 64 8 0 85 32 10-bit 32 12-bit

8 8 0 9 16-bit 4 32-bit

2 2 2 1

dsPIC30F6010A 8.31 30 144 8 4 68 16 10-bit 8 8 8 5 16-bit 2 32-bit

2 2 1 2

dsPIC33FJ64MC710 5.82 40 64 16 0 85 24 12-bit 24 10-bit

8 8 8 9 16-bit 4 32-bit

2 2 2 2

Índice

  Introducción a los PIC   Conceptos generales sobre el dsPIC30F   Reloj del sistema   Entrada/salida con puertos paralelos   Timers   Interrupciones   La placa dsPICDEM 1.1   El compilador C30

Conceptos generales sobre el dsPIC30F (1)

  Arquitectura optimizada para programación en alto nivel

  144 KB de memoria de programa   12 KB de memoria de datos (8 KB SRAM y 4

KB EEPROM)   Hasta 30 MIPS   Capacidades DSP, comunicación, conversión

analógica. (No trataremos estas características en las prácticas)

Conceptos generales sobre el dsPIC30F (2)

  Modelo de programación   16 registros de trabajo   Pila implementada en

software   W15 -> Puntero a pila   SPLIM -> Límite pila   Pila en espacio de datos

  Registro de estado   Todos los registros están

mapeados en memoria de datos, salvo los que contienen la configuración inicial

Conceptos generales sobre el dsPIC30F (3)

  Memoria de código   Dirección para empezar a ejecutar código

(Reset-GOTO Instruction)   Tabla de vectores de interrupción (normal

y alternativa)   Memoria flasheable de instrucciones   EEPROM que amplia los 8 KB de

memoria de datos   Registros de configuración

Conceptos generales sobre el dsPIC30F (4)

  Memoria de datos   Espacio para los

registros del PIC (Special Function Registers)

  8 KB para datos de programa.

  Direccionamiento opcional hacia memoria en el espacio de código (EEPROM)

Conceptos generales sobre el dsPIC30F (5)

  Primeros registros del PIC y su mapeo en memoria

Índice

  Introducción a los PIC   Conceptos generales sobre el dsPIC30F   Reloj del sistema   Entrada/salida con puertos paralelos   Timers   Interrupciones   La placa dsPICDEM 1.1   El compilador C30

Reloj del sistema (1)

  El reloj del sistema viene dado por la selección de una fuente de oscilación y una configuración de la señal dada por éste.

  Tipos de osciladores:   Interno: Disponible en el propio PIC.   Externo: Generalmente instalado en la placa en donde se inserta

el PIC.   Tratamientos posibles a la señal dada por el oscilador:

  Phase Locked Loop (PLL): Multiplica una señal de reloj (aumenta la frecuencia).

  Programmable Clock Divider: Divide una señal de reloj (disminuye la frecuencia).

  La selección del reloj y sus propiedades se guardan en los registros de configuración del sistema (memoria de código).

Reloj del sistema (2)

  Posibles configuraciones de reloj

Reloj del sistema (3)

  Esquema general de funcionamiento del reloj del sistema

Reloj del sistema (4)

  La frecuencia a la que funciona el PIC (Fcy), es decir, a la que se ejecutan las instrucciones, se calcularía según la siguiente expresión:

Fcy = (Fosc*PLL)/Post/4, , donde:

  Fosc: Frecuencia del oscilador usado.   PLL: Multiplicador que implica el preescaler.   Post: Divisor que implica el   4: Indica los ciclos necesarios para completar una

instrucción (considerar que no existe pipeline)

Índice

  Introducción a los PIC   Conceptos generales sobre el dsPIC30F   Reloj del sistema   Entrada/salida con puertos paralelos   Timers   Interrupciones   La placa dsPICDEM 1.1   El compilador C30

Entrada/salida con puertos paralelos (1)

  La E/S del PIC permite conectar éste a diversos dispositivos.   Aunque los PIC suelen diponer de otros tipos de comunicación

(RS232, SPI, I2C, CAN, etc), los puertos de comunicación paralelos, o Parallel I/O (PIO) Ports, son los más comunes.

  La mayoría de las pines (patillas) de un PIC pueden usarse como líneas de E/S, aunque también pueden tener un uso específico en su conexión con diversos periféricos.

  Las líneas de E/S se organizan en puertos para facilitar su identificación.

  El dsPIC30F6014 dispone de 68 líneas PIO, divididas en 6 puertos.

Entrada/salida con puertos paralelos (2)

  Cada puerto tiene tres registros para su operación   TRISx: Indica la dirección de los datos (1 entrada y 0

salida)   PORTx: Lee el nivel lógico de la línea en cuestión.   LATx: Lee el valor del latch del puerto.

  Accediendo a los bits individuales de estos registros se puede acceder a una línea concreta de I/O.

  Por ejemplo, el bit 15 del registro LATA permite leer el valor de la línea 15 del puerto A.

Índice

  Introducción a los PIC   Conceptos generales sobre el dsPIC30F   Reloj del sistema   Entrada/salida con puertos paralelos   Timers   Interrupciones   La placa dsPICDEM 1.1   El compilador C30

Timers (1)

  Un timer es un reloj que periódicamente emite una señal.

  Los timers en el PIC están implementados como contadores que se incrementan con el reloj del sistema (generalmente).

  Útiles para programar tareas periódicas o basadas en control temporal.

  El dsPIC30F6014 dispone de 5 timers de 16 bits: Timer1, Timer2/3 y Timer 4/5. Los cuatro últimos pueden agruparse para formar timers de 32 bits.

Timers (2)

  Esquema general   Registros:

  TMRx: Valor actual del timer.

  PRx: Periodo del timer.   TxCON: Configuración

del timer   Cuando TMRx=PRx se

habilita la bandera asociada al timer.

  En timers de 32 bits el esquema variaría ligeramente

Timers (3)

  El registro asociado TxCON establece:   La habilitación del timer.   El funcionamiento en diversos estados de ejecución (bajo

consumo, etc).   El preescaler usado. El reloj del sistema (o reloj externo)

funciona demasiado rápido para un timer. Preescaler disponibles: 1:1, 1:8, 1:64 y 1:256.

  El periodo de un timer viene dado por: P= (Fcy / PRx) / Pre ,donde Pre es el divisor de frecuencia que implica el

preescaler.

Índice

  Introducción a los PIC   Conceptos generales sobre el dsPIC30F   Reloj del sistema   Entrada/salida con puertos paralelos   Timers   Interrupciones   La placa dsPICDEM 1.1   El compilador C30

Interrupciones (1)

  Las interrupciones sirven para controlar de forma asíncrona el flujo del software y para que el PIC informe de determinados eventos.

  Existen dos tipos de interrupciones:   Interrupciones controladas por el usuario. Son configuradas

por el usuario y sirven para gestionar el funcionamiento del hardware y actuar ante determinados eventos.   Interrupciones internas. Son las más comunes, y están

relacionadas con los interfaces de comunicación, los timers, etc.   Interrupciones externas. Están conectadas a líneas externas

(pines), y son activadas cuando éstas reciben un valor lógico alto.   Excepciones del procesador (traps). Las genera el PIC ante

situaciones anómalas. Pueden ser tratadas, pero no desactivadas.

  El dsPIC30F6014 dispone de 41 interrupciones de usuario (4 de ellas externas) y 4 traps.

Interrupciones (2)

  La parte del código que debe ejecutarse ante una interrupción se direcciona a partir de la Tabla de Vectores de Interrupción, o Interrupt Vector Table (IVT).

  Dicha dirección equivale al comienzo de la Rutina de Servicio a la Interrupción, o Interrupt Service Routine (ISR).

  Se incluye, además, una tabla alternativa (AIVT) que se usa en situaciones de depuración o pruebas.

Interrupciones (3)

  Control de las interrupciones   28 registros de control

  INTCON1: Contiene los bits de bandera (flags) para los traps.   INTCON2: Configura el comportamiento de las interrupciones

externas y el uso de la AIVT.   IFS0-4: Contienen los bits de estado o flags para todas las

interrupciones de usuario.   IEC0-4: Bits de habilitación de las interrupciones de usuario.

  Los bits usados para cada interrupción de usuario en los registros IFS e IEC están asignados en el mismo orden en el que se encuentran en la IVT.

  Por ejemplo, la primer interrupción de la IVT (INT0), está en el bit 0 de los registros IFS0 y del IEC0..

Interrupciones (4)

  Prioridad de las interrupciones (1)   La prioridad es útil para establecer un

orden de preferencia ante la ocurrencia de dos o más interrupciones simultáneas.

  Por defecto, la estrategia seguida sigue el orden natural de las prioridades, que no es más que el orden en la IVT.

  Adicionalmente existe un sistema de asignación de prioridades

Interrupciones (5)   Prioridad de las interrupciones (y 2)

  Registros usados:   IPC0-10: Indican el valor de prioridad asignado a una interrupción,

desde 0 hasta 7 (la mayor prioridad).   CORCON: Contiene los bits menos significativos, y asignables por el

usuario, del valor de Nivel de Prioridad de las Interrupciones, o Interrupt Priority Level (IPL). Desde 0 hasta 7.

  STATUS: Contiene el bit más significativo del valor de IPL, que permite establecer un valor de IPL mayor a 7. Este bit solamente puede establecerlo el núcleo.

  De esta manera, una interrupción será tratada si IPC>IPL. Si saltasen dos interrupciones con mismo valor de IPC, se seguirá la prioridad natural.

  Si se asigna un valor de IPL=7 se deshabilitarían todas las interrupciones de usuario.

  Cuando salta un trap el valor de IPL es siempre >=8.

Índice

  Introducción a los PIC   Conceptos generales sobre el dsPIC30F   Reloj del sistema   Entrada/salida con puertos paralelos   Timers   Interrupciones   La placa dsPICDEM 1.1   El compilador C30

La placa dsPICDEM 1.1 (1)

  La placa dsPICDEM 1.1 dispone de diverso hardware que permite la creación de software de evaluación con los dsPIC30f:   Interfaz para programación/

depuración del PIC   Puertos de comunicación

RS232 y CAN   Codec de sonido   Osciladores   Pulsadores y LEDs   Pantalla LCD   Área de prototipado

La placa dsPICDEM 1.1 (2)

Índice

  Introducción a los PIC   Conceptos generales sobre el dsPIC30F   Reloj del sistema   Entrada/salida con puertos paralelos   Timers   Interrupciones   La placa dsPICDEM 1.1   El compilador C30

El compilador C30 (1)

  El compilador C30 usa un lenguaje de programación prácticamente equivalente al C de ANSI.

  Diversas librerías facilitan la programación del PIC y abstraen (en lo posible) al programador de los detalles del microcontrolador usado.

  Existe un conjunto de estructuras que permite la asignación de valores a los registros, tal y como aparecen en el data sheet del fabricante.

  Un conjunto de macros facilita el establecimiento de la configuración inicial del PIC

  Las ISR pueden declararse fácilmente.

El compilador C30 (2)   Estructura general de un programa en C30

// Fichero de cabecera del PIC #include <p24fj128ga010.h>

// Configuración del PIC (las macros disponibles dependen del .h del PIC) _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2) _CONFIG2( FCKSM_CSDCMD & POSCMOD_XT & FNOSC_PRIPLL )

// Prototipos de funciones void configButtons(); //…

// Rutina principal del programa int main(void) {

//…

// Operaciones a realizar continuamente while (1) { //… } }

// Rutinas de tratamiento de interrupción (ISR) void _ISR _T1Interrupt(void) { //… }

// Resto de funciones void configButtons() {

// Habilitar los pulsadores como entradas TRISDbits.TRISD6 = 1; // S3 TRISDbits.TRISD13 = 1; // S4 TRISAbits.TRISA7 = 1; // S5 TRISDbits.TRISD7 = 1; // S6 } //… Nota: El ejemplo es para el PIC24F128GA010

El compilador C30 (3)

  El .h asociado al PIC incluye el conjunto necesario de definiciones para acceder a los registros, usar macros y realizar declaracion de ISR.

  La configuración del PIC es necesaria para establecer los parámetros de funcionamiento iniciales del PIC.

  Las ISR se pueden declarar de forma fácil siguiendo la nomenglatura:

void _ISR _<nombre_int>Interrupt(void) { , donde nombre_int correspondería al nombre de la

interrupción a tratar, que puede extraerse directamente de la IVT del data sheet expuesta anteriormente.

El compilador C30 (4)

  El acceso a los registros del PIC se puede realizar mediante dos métodos:   <nombre_reg>   <nombre_reg>bits.<nombre_bit>

  En el primero de los casos se asignaría directamente un valor (16 bits) al registro completo (ej. IFS0=0x0001 ó IFS=1)

  En el segundo caso se podría acceder al valor para un bit concreto (ej. IFS0bits.INT0IF=1).

  En algunas ocasiones el uso de máscaras puede ser tedioso, y el acceso por bit es muy útil.