SISTEMAS EMBEBIDOS Y CONTROL POR: M.C. ANDRÉS GERARDO FUENTES COVARRUBIAS
UNIDAD 1. Microcontroladores Programables
1.1. Conceptos básicos sobre microcontroladores ¿QUE ES UN PROCESADOR?
M.C. ANDRÉS GERARDO FUENTES
2
1.1. Conceptos básicos sobre microcontroladores ¿QUE ES UN PROCESADOR?
M.C. ANDRÉS GERARDO FUENTES
2
¿DONDE ESTÁN LOS PROCESADORES?
M.C. ANDRÉS GERARDO FUENTES
3
¿QUE ES UN MICROCONTROLADOR?
M.C. ANDRÉS GERARDO FUENTES
4
MICROPROCESADORES VS MICROCONTROLADORES
M.C. ANDRÉS GERARDO FUENTES
5
HARDWARE
M.C. ANDRÉS GERARDO FUENTES
6
APLICACIONES
M.C. ANDRÉS GERARDO FUENTES
7
REPERTORIO DE INSTRUCCIÓN
M.C. ANDRÉS GERARDO FUENTES
8
HARDWARE
M.C. ANDRÉS GERARDO FUENTES
9
HARDWARE DE UN MICROCONTROLADOR
M.C. ANDRÉS GERARDO FUENTES
10
UNIDAD CENTRAL DE PROCESO
M.C. ANDRÉS GERARDO FUENTES
11
CPU (ESQUEMA)
M.C. ANDRÉS GERARDO FUENTES
12
TAREAS DE UN CPU
M.C. ANDRÉS GERARDO FUENTES
13
TAREAS DEL CPU CONT…
M.C. ANDRÉS GERARDO FUENTES
14
TAREAS DE …
M.C. ANDRÉS GERARDO FUENTES
15
TIPOS DE CPU
M.C. ANDRÉS GERARDO FUENTES
16
SISTEMA DE MEMORIA
M.C. ANDRÉS GERARDO FUENTES
17
SISTEMA DE MEMORIA
M.C. ANDRÉS GERARDO FUENTES
18
LOS MICROCONTROLADORES
M.C. ANDRÉS GERARDO FUENTES
19
APLICACIONES
M.C. ANDRÉS GERARDO FUENTES
20
1.2. Los microcontroladores PIC y Atmel MICROCONTROLADORES COMUNES
M.C. ANDRÉS GERARDO FUENTES
21
ESCALABILIDAD EN MICROCHIP
M.C. ANDRÉS GERARDO FUENTES
22
Concepto Circuito integrado que incluye en su interior las tres unidades funcionales de un ordenador: CPU, Memoria y Unidades de E/S, es decir, se trata de un computador completo en un solo circuito integrado.
M.C. ANDRÉS GERARDO FUENTES
23
Ciclo de vida de un software embebido
M.C. ANDRÉS GERARDO FUENTES
24
Técnica de desarrollo del software embebido
M.C. ANDRÉS GERARDO FUENTES
25
1.3. EL ENTORNO DE DESARROLLO PARA MICROCHIP
Modelo de programación del uC PIC18F4550 • Modelado de programas en Mplab • Simulación de programas en Proteus VSM •
MODELO DE PROGRAMACIÓN CON EL PIC18F4550 •
El PIC18F4550, pertenece a los microcontroladores PIC18 de gama alta. Posee una arquitectura RISC (reduced instruction set computer) de 16 bits longitud de instrucciones y 8 bits de datos. La tabla muestra en resumen las características fundamentales de este microcontrolador y de sus antecesores los PIC18F2455/2550/4455.
M.C. ANDRÉS GERARDO FUENTES
27
M.C. ANDRÉS GERARDO FUENTES
28
ORGANIZACIÓN DE LA MEMORIA EL UC PIC18F4550 DISPONE DE LAS SIGUIENTES MEMORIAS:
•
Memoria de programa : memoria flash interna de 32.768 bytes. Almacena instrucciones y constantes/datos. Puede ser escrita/leída mediante un programador externo o durante la ejecución programa mediante unos punteros.
•
Memoria RAM de datos : memoria SRAM interna de 2048 bytes en la que están incluidos los registros de función especial. Almacena datos de forma temporal durante la ejecución del programa Puede ser escrita/leída en tiempo de ejecución mediante diversas instrucciones.
•
Memoria EEPROM de datos : memoria no volátil de 256 bytes. Almacena datos que se deben conservar aun en ausencia de tensión de alimentación Puede ser escrita/leída en tiempo de ejecución a través de registros.
•
Pila: bloque de 31 palabras de 21 bits. Almacena la dirección de la instrucción que debe ser ejecutada después de una interrupción o subrutina. M.C. ANDRÉS GERARDO FUENTES
29
ORGANIZACIÓN DE LA MEMORIA •
Memoria de configuración: memoria en la que se incluyen los bits de configuración (12 bytes de memoria flash) y los registros de identificación (2 bytes de memoria de solo lectura). Se trata de un bloque de memoria situado a partir de la posición 30000H de memoria de programa (más allá de la zona de memoria de programa de usuario). En esta memoria de configuración se incluyen: Bits de configuración: contenidos en 12 bytes de memoria flash permiten la configuración de algunas opciones del uC como: -
Opciones del oscilador. Opciones de reset. Opciones del watchdog. Opciones de la circuitería de depuración y programación. Opciones de protección contra lectura de memoria de programa y memoria EEPROM de datos.
Estos bits se configuran generalmente durante la programación del uC, aunque también pueden ser leídos y modificados durante la ejecución del programa. •
Registros de identificación : se trata de dos registros situados en las direcciones 3FFFFEH y 3FFFFFH que contienen información del modelo y revisión del dispositivo. Son registros de solo lectura y no pueden ser modificados por el usuario.
M.C. ANDRÉS GERARDO FUENTES
30
MAPA DE MEMORIA
M.C. ANDRÉS GERARDO FUENTES
31
ARQUITECTURA HARVARD El uC PIC18F4550 dispone buses diferentes para el acceso a memoria de programa y memoria de datos (arquitectura Harvard): •
Bus de la memoria de programa : - 21 líneas de dirección - 16/8 líneas de datos (16 líneas para instrucciones/8 líneas para datos)
•
Bus de la memoria de datos : - 12 líneas de dirección - 8 líneas de datos Esto permite acceder simultáneamente a la memoria de programa y a la memoria de datos. Es decir se puede ejecutar una instrucción (lo que por lo general requiere acceso a memoria de datos) mientras se lee de la memoria de programa la siguiente instrucción (proceso pipeline).
Por tanto la ejecución completa de 1 instrucción (lectura instrucción +ejecución) se hace en un 1 ciclo de instrucción (4 Tosc). EXCEPCIÓN: las instrucciones que modifican el contenido del PC requieren 2 ciclos de instrucción.
M.C. ANDRÉS GERARDO FUENTES
32
MODELADO DE PROGRAMAS EN MPLAB Microchip provee una buena herramienta para el desarrollo de aplicaciones con microcontroladores PIC, esta es el MPLAB • Con MPLAB se puede: • Editar programas • Ensamblarlos si están escritos en ensablador • Compilarlos si están escritos en un lenguaje de alto nivel • Depurarlos con el MPLAB Sim •
M.C. ANDRÉS GERARDO FUENTES
33
SIMULACIÓN DE PROGRAMAS CON PROTEUS VSM Como una funcionalidad adicional, MPLAB permite invocar al Proteus desde el entorno de desarrollo para efectuar la depuración directamente en el esquemático de la aplicación Hardware.
M.C. ANDRÉS GERARDO FUENTES
34
1.4. DISEÑO DE APLICACIONES CON PIC (LENGUAJE ENSAMBLADOR)
• Repertorio
de instrucciones
• Temporizadores, Puertos de E/S y manejo de datos • Interrupciones
FORMATO DE UN PROGRAMA EN ENSAMBLADOR PIC18F4550(1) LIST P=18F4550 ;Directiva para definir el procesador #include "P18F4550.INC" ;******** Bits de configuracion ********** CONFIG PWRT = ON CONFIG WDT = OFF CONFIG MCLRE = ON CONFIG PBADEN = OFF CONFIG DEBUG = OFF CONFIG LVP = OFF CONFIG FOSC = HSPLL_HS ;********* Bits de proteccion ****************** CONFIG CP0 = OFF CONFIG CP1 = OFF CONFIG CP2 = OFF CONFIG CP3 = OFF CONFIG CPB = OFF CONFIG CPD = OFF
M.C. ANDRÉS GERARDO FUENTES
;PWRT habilitado ;Watchdog deshabilitado ;MCLR como entrada ;Todos los pines del puerto B como entradas analogicas ;Deshabilitar modo DEBUG ;Deshabilitacion del modo programacion de bajo nivel ;Oscilador de alta velocidad con PLL habilitado ;los bloques del codigo de programa ;no estan protegidos ;Sector Boot no esta protegido ;La EEPROM no esta protegida
36
FORMATO DE UN PROGRAMA PIC18F4550(2) CBLOCK 0x000 ;Aqui va la declaracion de variables ENDC
;Variables en la ACCESS RAM (Banco 0) max 96 bytes
ORG 0xf00000 ;DE "Test Data",0,1,2,3,4,5
;Area de definicion de variables de la EEPROM
ORG 0x0000 goto main
;vector de interrupcion del reset
ORG 0X0008 goto main
;vector de interrupcion de baja prioridad
ORG 0X0018 goto main
;vector de interrupcion de alta prioridad
main:
;Programa principal
fin: goto fin end
M.C. ANDRÉS GERARDO FUENTES
37
REPERTORIO DE INSTRUCCIONES El juego de instrucciones es altamente ortogonal y esta dividido en 4 grupos: •
Operaciones orientadas al Byte
•
Operaciones orientadas al Bit
•
Operaciones con literales
•
Operaciones de control
M.C. ANDRÉS GERARDO FUENTES
38
OPERACIONES ORIENTADAS AL BYTE
M.C. ANDRÉS GERARDO FUENTES
39
OPERACIONES ORIENTADAS AL BIT
M.C. ANDRÉS GERARDO FUENTES
40
OPERACIONES DE CONTROL
M.C. ANDRÉS GERARDO FUENTES
41
OPERACIONES CON LITERALES
M.C. ANDRÉS GERARDO FUENTES
42
TEMPORIZADORES, PUERTOS DE ENTRADA/SALIDA Y MANEJO DE DATOS Los temporizadores son segmentos de código que permiten introducir retardos de tiempo entre la ocurrencia de eventos o la ejecución cíclica de segmentos de código. A saber, su implementación es de alguna de las dos siguientes naturalezas: • Temporizadores de retardo con ciclos anidados
Se construyen por medio de una estructura de ciclos anidados calculando el tiempo que tarda en ejecutarse una instrucción “ nop” (1 periodo de maquina o 4Tw) y ejecutando esta hasta conseguir el tiempo requerido. • Temporizadores con Timer en hardware
Se temporiza por medio del desbordamiento de alguno de los timers de hardware con que cuenta el uC. M.C. ANDRÉS GERARDO FUENTES
43
TEMPORIZADORES DE RETARDO CÍCLICO •
Sea la velocidad de reloj de 20Mhz, con un cristal de cuarzo HS conectado a las patillas OSC1/OSC2:
Tw = 1/20mHz = 50nS La instrucción “ nop ” tarda en ejecutarse
un ciclo de reloj que son 4TW Nop = 4 Tw = 0.2 uS Para lograr un retardo de 500 mS, por ejemplo, tendríamos que saber cuantas veces habría que ejecutar la instrucción “ nop ”. Retardo
= 500mS / 0.2 uS = 0.500 / 0.0000002 = 2,500,000 veces la ejecución de nop
44
TEMPORIZADORES HARDWARE • Los temporizadores son contadores que al activarlos empiezan
una cuenta y cuando esta cuenta se acaba se activa el flanco de interrupción por el temporizador, entrando el micro en la rutina de interrupción del temporizador.
• El PIC18F4550 tiene 4 temporizadores, de los cuales 1 de ellos
es de 8 bits y el resto de una precisión de 16 bits.
M.C. ANDRÉS GERARDO FUENTES
45
TIMER 0
Existe la posibilidad de activar un preescaler en los temporizadores de forma que se pueda “alargar” la duración del temporizador, dependiendo del
temporizador puede ser de 2,4,8 e incluso 16.
M.C. ANDRÉS GERARDO FUENTES
46
TIMER 1 Resolución de los temporizadores:
Timer0 -> Temporizador configurable de 8 ó 16 bits. Timer1 -> Temporizador de 16 bits. Timer2 -> Temporizador de 8 bits. Timer3 -> Temporizador de 16 bits.
M.C. ANDRÉS GERARDO FUENTES
47
RETARDOS CON EL TIMER0 Un retardo con un Timmer ofrece la posibilidad de operación independiente de la frecuencia de reloj, ya que un Timmer hardware se basa en un conteo de un registro contador, lo cual da robustez e independencia al software.
Proceso de Inicialización y uso del timmer0 como retardador sin interrupciones: 1. Calcule el contador del timmer según la relación:
El uC PIC18F4550 dispone 5 puertos de E/S que incluyen un total de 35 líneas digitales de E/S:
Todas las líneas digitales de E/S disponen de al menos una función alternativa asociada a alguna circuitería especifica del uC. Cuando una línea trabaja en el modo alternativo no puede ser utilizada como línea digital de E/S estándar. M.C. ANDRÉS GERARDO FUENTES
49
PUERTOS DE ENTRADA/SALIDA • REGISTROS DE UN PUERTO DE E/S: Cada puerto de E/S
tiene asociado 3 registros:
• Registro TRIS: mediante este registro se configuran cada una
de las líneas de E/S del puerto como ENTRADA (bit correspondiente a '1') o como SALIDA (bit correspondiente a '0'). • Registro PORT: mediante este registro se puede leer el nivel de pin de E/S y se puede establecer el valor del latch de salida. • Registro LAT: mediante este registro se puede leer o establecer el valor del latch de salida.
M.C. ANDRÉS GERARDO FUENTES
50
PUERTOS DE ENTRADA/SALIDA
M.C. ANDRÉS GERARDO FUENTES
51
PUERTO A •
Dispone de 7 líneas de E/S. Las funciones alternativas son: ■ ■ ■ ■ ■
RAO: entrada analógica (ANO)/ entrada de comparación (C1IN-) RAÍ: entrada analógica (AN1)/ entrada de comparación (C2IN-) RA2: entrada analógica (AN2)/ entrada de comparación (C2IN+) RA3: entrada analógica (AN3)/ entrada de comparación (C1IN+) RA4: entrada de reloj del Temporizador 0 (TOCKI)/salida de comparación (C1OUT)
RA5: entrada analógica (AN4)/ salida de comparación (C2OUT)/HLVDIN entrada de detección de tensión alta/baja ■ ■
RA6: entrada del oscilador principal (OSC2)/salida de señal de reloj (CLKO)
En el reset las líneas RAO, RAÍ, RA2, RA3 y RA5 se configuran como líneas de entrada analógicas. Para poder utilizarlas como líneas digitales de E/S hay que desactivar la función analógica: MOVLW 0FH ; Se desactiva la función de entrada analógica MOVWF ADCON1 ; para las líneas RAO, RA1, RA2, RA3 y RA4 MOVLW 07H ; Configura los comparadores para entrada digital. MOVWF CMCON ;para las líneas RAO, RA1, RA2 y RA3 MOVLW 3CH ; Se configuran RA5, RA4, RA3 y RA2 como entradas MOVWF TRISA ; y RA1 y RAO como salidas
M.C. ANDRÉS GERARDO FUENTES
52
REGISTRO ADCON1
– VCFG1: Bit de configuración de la tensión de referencia VREF-: VCFG1=‘0’: VREF - se conecta a VSS VCFG1=‘1’: VREF - se conecta a la línea física RA2 – VCFG0: Bit de configuración de la tensión de referencia VREF+: VCFG1=‘0’: VREF+ se conecta a VDD VCFG1=‘1’: VREF+ se conecta a la línea física RA2 – PCFG3..PCFG0: Bits configuración de los puertos de conversión
A/D. Mediante estos bits se establecen que líneas físicas (RA5..RA0, RB4..RB0, RE1 y RE0) van a trabajar como entradas del convertidor A/D (Ver Tabla de configuración de líneas de conversión A/D).
M.C. ANDRÉS GERARDO FUENTES
53
REGISTRO ADCON1
M.C. ANDRÉS GERARDO FUENTES
54
PUERTO B •
Dispone de 8 líneas de E/S. Las funciones alternativas son: RBO: entrada analógica (AN12)/ interrupción externa 0 (INTO)/entrada de fallo del ECCP (FLTO)/entrada de datos del SPI (SDI)/línea de datos del PC (SDA) ■ RB1: entrada analógica (AN10)/ interrupción externa 1 (INTl)/línea de reloj del SPI (SDI)/línea de reloj del PC (SDA) ■
RB2: entrada analógica (AN8)/ interrupción externa 2 (INT2)/salida de datos del USB (VCMO) ■
RB3: entrada analógica (AN9)/ línea de E/S del CCP2 (CCP2)/salida de datos del USB (VPO) ■
RB4: entrada analógica (AN11)/ interrupción por cambio en pin (KBIO)/ salida de CS del SSP (CSSP) ■
RB5: interrupción por cambio en pin (KBI1)/ línea de programación (PGM) ■ RB6: interrupción por cambio en pin (KBI2)/ línea de programación (PGC) ■ RB7: interrupción por cambio en pin (KBI3)/ línea de programación (PGD) ■
M.C. ANDRÉS GERARDO FUENTES
55
PUERTO B •
Resistencias de pull.up: Todas las líneas del puerto B disponen de resistencias de pullup internas que pueden ser activadas poniendo el bit RBPU del registro INTCON2 a '0' (RPBU=T después de un reset). Si una línea del puerto B se configura como salida la resistencia de pull-up correspondiente se desactiva automáticamente. Por defecto, en el reset las líneas RB4..RB0 están programadas como entradas analógicas. Existen dos formas de configurar RB4..RB0 como líneas de E/S digitales: Poniendo a '0' el bit PBADEN del registro de configuración CONFIG3H=> en el reset RB4..RB0 se configuran como líneas de E/S digitales ■
Si PBADEN='l' (valor por defecto) se pueden configurar RB4..RB0 como líneas el E/S digitales desactivando la función analógica: ■
MOVLW 0x07 ; Se desactiva la función de entrada analógica MOVWF ADCON1 ; para las líneas RBO, RB1, RB2, RB3 y RB4 MOVLW 0xF0 ; Se configuran RB7, RB6, RB5 y RB4 como entradas MOVWF TRISB ; y RB3, RB2, RB1 y RBO como salidas
M.C. ANDRÉS GERARDO FUENTES
56
PUERTO C •
Dispone de 5 líneas de E/S (RCO, RCl, RC2, RC6 y RC7) y 2 líneas de solo entrada (RC4 y RC5). Las funciones alternativas son:
RCO: salida del oscilador del Temp. 1 (T1OSO)/ entrada de contador de los temporizadores 1 y 3 (T13CKI) ■
RCl: entrada del oscilador del Temporizador 1 (TIOSI)/ línea de E/S del CCP2 (CCP2)/ salida OE del transceiver del USB (UOE) ■
RC2: línea de E/S del CCP1 (CCP1)/ salida PWM del ECCP1 (PÍA) RC4: línea menos del bus USB (D-) / línea de entrada del USB (VM) RC5: línea más del bus USB (D-) / línea de entrada del USB (VP) RC6: salida de transmisión del EUSART (TX)/ línea de reloj del EUSART (CK) RC7: entrada de recepción del EUSART (RX)/ línea de datos síncrona del EUSART (DT)/ salida de datos del SPI (SDO) ■ ■ ■ ■ ■
En el reset todas las líneas del puerto C quedan configuradas como entradas digitales
M.C. ANDRÉS GERARDO FUENTES
57
PUERTO D •
Dispone de 8 líneas de E/S. Las funciones alternativas son: ■ ■ ■ ■ ■ ■ ■ ■
•
RDO: línea de datos del SPP (SPPO) RD1: línea de datos del SPP (SPP1) RD2: línea de datos del SPP (SPP2) RD3: línea de datos del SPP (SPP3) RD4: línea de datos del SPP (SPP4) RD5: línea de datos del SPP (SPP5) / salida PWM del ECCP1 (P1B) RD6: línea de datos del SPP (SPP6) / salida PWM del ECCP1 (P1C) RD7: línea de datos del SPP (SPP7) / salida PWM del ECCP1 (P1D)
Resistencias de pull.up: Todas las líneas del puerto D disponen de resistencias de pull-up internas que pueden ser activadas poniendo el bit RDPU del registro PORTE a T (RPDU='O' después de un reset). Si una línea del puerto D se configura como salida la resistencia de pull-up correspondiente se desactiva automáticamente.
M.C. ANDRÉS GERARDO FUENTES
58
PUERTO E •
Dispone de 3 líneas de E/S (REO, RE1 y RE2) y 1 línea de solo entrada (RE3). Las funciones alternativas son: REO: entrada analógica (AN5)/ salida de reloj 1 del SPP (CK1SPP) ■ RE1: entrada analógica (AN6)/ salida de reloj 2 del SPP (CK2SPP) ■ RE2: entrada analógica (AN7)/ salida de habilitación del SPP (OESPP) ■ RE3: Línea de reset externo (MCLR) / línea de programación (VPP) En el reset todas las líneas RE2..RE0 se configuran como entradas analógicas. Para poder utilizarlas como líneas digitales de E/S hay que desactivar la función analógica: ■
•
•
MOVLW 0FH MOVWF ADCON1 MOVLW 06H MOVWF TRISE
; Se desactiva la función de entrada analógica ; para las líneas REO, RE1 y RE2 ; Se configuran RE2 y RE1 como entradas ; y RE0 como salida
La línea RE3 por defecto tiene la función de Reset del uC. Si se desea desactivar la función de Reset y utilizar RE3 como línea de entrada digital hay que poner a '0' el bit MCLRE del registro de configuración CONFIG3H.
M.C. ANDRÉS GERARDO FUENTES
59
OSCILADOR •
El PIC18F4550, tiene un oscilador interno de 32 KHZ. Este PIC ejecuta una instrucción en un ciclo de máquina (4 periodos de reloj).
•
Cuando se requiere aumentar la velocidad de procesamiento se debe conectar un oscilador externo con frecuencias de osciladores de 8, 10, 12, 16, 20, 32, 40 y 48 MHz.
•
Los capacitores cerámicos entre 15 a 33 pF.
M.C. ANDRÉS GERARDO FUENTES
60
RESET •
Es la acción con la cual inicia el trabajo del uC.
•
Existe el pin 1 MCLR (masterclear) que puede ser configurado como RESET.
•
Cuando se conecta a un nivel bajo este pin, en el uC se produce un reset. Para operación normal este pin debe encontrarse a un nivel alto.
M.C. ANDRÉS GERARDO FUENTES
61
ARMADO DEL SISTEMA MÍNIMO
M.C. ANDRÉS GERARDO FUENTES
62
¿QUÉ ES UN BOOTLOADER? • El termino bootloader hace referencia a un pequeño programa
que se realiza para determinado microcontrolador, ya sea PIC, Freescale, Atmel, etc. Este código lo que hace es tomar los datos que se le enviaran por puerto serial (UART), USB, Ethernet, el que sea que pueda enviar una cadena de Bytes al microcontrolador. El microcontrolador va tomando esos datos que le van llegando y los va "Programando" en su propia memoria Flash.
M.C. ANDRÉS GERARDO FUENTES
63
¿QUÉ ES UN BOOTLOADER? •
Es necesario tener un programador para usarlo solo una vez y así grabarle el programa residente en memoria FLASH. Ya después de esto se usa el Bootloader para grabar la flash del micro.
•
El programa residente ocupa memoria flash y por ende tienes un poco menos de memoria para la aplicación real del micro. No es mucha la que quita, pero hay que tener eso claro.
•
Por ningún motivo se puede sobrescribir las posiciones de memoria FLASH en la que se encentra el programa residente Bootloader. Si se borra por algún error, pierdes el bootloader y toca nuevamente programarlo con un grabador externo.
•
No todos los micros pueden soportar Bootloder, esto se limita a aquellos que tienen la capacidad de autograbar su memoria FlLASH. Por ejemplo el 16F84 no lo permite, por eso sacaron la versión PIC16F628A que si lo deja y además tiene mejores prestaciones.
M.C. ANDRÉS GERARDO FUENTES
64
CONFIGURACIÓN DEL HIDBOOTLOADER • Microchip provee un Bootloader para agilizar el tiempo
de desarrollo de aplicaciones para Pic que cuentan con interfaz USB • Tan solo es necesario cargar el microcontrolador con el firmware y proteger el área de booteo • Adicionar los fuses convenientes en el código • Relocalizar los vectores de interrupción para que no toquen los vectores originales. M.C. ANDRÉS GERARDO FUENTES
65
RELOCALIZACIÓN DE VECTORES DE INTERRUPCIÓN •
Los vectores originales situados en la parte baja de la memoria son asignados al BootLoader
•
Los vectores relocalizados se asignan al uso del programa de usuario
•
Es necesario escribir un script para el linker (mplink) para que el ensamblador “sepa” donde fueron
localizados los nuevos vectores y donde se asigno el espacio de memoria de programa para el programa de usuario.
M.C. ANDRÉS GERARDO FUENTES
66
ESQUEMA DE ÁRBOL DE PROYECTO PARA USO CON BOOTLOADER
M.C. ANDRÉS GERARDO FUENTES
•
Programa principal con vectores relocalizados
•
Script para el linker (MPLink)
67
FORMATO DEL LINKER SCRIPT
M.C. ANDRÉS GERARDO FUENTES
68
HIDBOOTLOADER • El diagrama del sistema mínimo incluye la circuitería para sostener
el HIDBootloader
• Para entrar en modo Bootloader, se debe presionar el botón
conectado en RB4, manteniéndolo presionado, después se debe dar RESET al pic con otro pulsador en el pin MCLR. Al resetear el PIC, lo primero que hace el PIC es preguntar por el estado del PIN RB4 donde esta el pulsador. De estar presionado este botón, el PIC entra en modo Bootloader y si no ejecuta el código normal que le grabamos al PIC.
• El led conectado en el puerto RD1 se enciende y apaga cuando
entra en modo Bootloader.
M.C. ANDRÉS GERARDO FUENTES
69
HIDBOOTLOADER SOFTWARE
M.C. ANDRÉS GERARDO FUENTES
70
FORMATO DE LOS FUSES EN ENSAMBLADOR ;-------------------------------------------------------------------------------------;Bits de configuración ;---------------------------CONFIG PWRT = ON ;PWRT habilitado CONFIG WDT = OFF ;Watchdog deshabilitado CONFIG MCLRE = ON ;MCLR como entrada CONFIG PBADEN = OFF ;Todos los pines del puerto B como entradas ;analogicas CONFIG DEBUG = OFF ;Deshabilitar modo DEBUG CONFIG LVP = OFF ;Deshabilitacion del modo programacion de bajo nivel CONFIG FOSC = HSPLL_HS ;Oscilador de alta velocidad con PLL habilitado CONFIG BOR = OFF CONFIG USBDIV =1 CONFIG PLLDIV =5 CONFIG CPUDIV = OSC1_PLL2 CONFIG VREGEN = ON ;********* Bits de protección ****************** CONFIG WRTB = ON ;bit de proteccion del area de booteo CONFIG CP0 = OFF ;los bloques del codigo de programa CONFIG CP1 = OFF ;no estan protegidos CONFIG CP2 = OFF CONFIG CP3 = OFF CONFIG CPB = ON ;Sector Boot esta protegido CONFIG CPD = ON ;La EEPROM esta protegida M.C. ANDRÉS GERARDO FUENTES
71
FORMATO DE LLAMADAS EN ENSAMBLADOR ;-----------------------------------------------------------------------------------;vector de interrupcion del reset ;-------------------------------ORG 0x1000 goto main ;----------------------------------------------------------------------------------;vector de interrupcion de alta prioridad ;---------------------------------------ORG 0X1008 goto main ;----------------------------------------------------------------------------------;vector de interrupcion de baja prioridad ;---------------------------------------ORG 0X1018 goto main
M.C. ANDRÉS GERARDO FUENTES
72
1.4. DISEÑO DE APLICACIONES CON PIC (LENGUAJE C, C18) • Repertorio de instrucciones • Diseño de aplicaciones básicas en lenguaje C • Puertos de E/S, temporizadores y manejo de datos • Interrupciones
M.C. ANDRÉS GERARDO FUENTES
73
EL COMPILADOR MC18 • Si queremos realizar la programación de los microcontroladores PIC en un lenguaje como el C, es preciso utilizar un compilador de C . • Dicho compilador nos genera ficheros en formato Intel-
hexadecimal, que es el necesario para programar (utilizando un programador de PIC) un microcontrolador de 6, 8, 18 ó 40 patillas.
M.C. ANDRÉS GERARDO FUENTES
74
EL COMPILADOR MC18 • • • • • • •
Mas productividad Permite codificado en línea de ASM Soporta compilado en línea con MPLAB Portabilidad de código en lenguaje C Soporta recursividad de funciones Amplia gama de microcontroladores Capacidad de relocalización de código y vectores de interrupción
M.C. ANDRÉS GERARDO FUENTES
75
#include #include
FORMATO DE PROGRAMA (1)
//Bits de configuracion //-------------------------------------------------------------------#pragma config PWRT = ON //PWRT habilitado #pragma config WDT = OFF //Watchdog deshabilitado #pragma config MCLRE = ON //MCLR como entrada #pragma config PBADEN = OFF //Todos los pines del puerto B como entradas digitales #pragma config DEBUG = OFF //Deshabilitar modo DEBUG #pragma config LVP = OFF //Deshabilitacion del modo programacion de bajo nivel #pragma config FOSC = HSPLL_HS //Oscilador de alta velocidad con PLL habilitado #pragma config BOR = OFF //Brown out Voltage desactivado #pragma config USBDIV =1 //Divisor de FOSC para el puerto USB activado #pragma config PLLDIV =5 //Factor de division para el generador de señal de reloj (cristal de 20Mhz) #pragma config CPUDIV = OSC1_PLL2 #pragma config VREGEN = ON //Bits de proteccion //------------------------------------------------------------------#pragma config WRTB = ON #pragma config CP0 = OFF #pragma config CP1 = OFF #pragma config CP2 = OFF #pragma config CP3 = OFF #pragma config CPB = ON #pragma config CPD = ON M.C. ANDRÉS GERARDO FUENTES
//bit de proteccion del area de booteo //los bloques del codigo de programa //no estan protegidos
//Sector Boot esta protegido //La EEPROM esta protegida 76
FORMATO DE PROGRAMA (3) /** CODIGO DE LA FUNCION PRINCIPAL ***************************/ #pragma code void main(void) { TRISD = 0; //TODOS LOS PINES DEL PUERTO B COMO SALIDA LATD = 0; //TODOS LOS PINES DEL PUERTO B EN CERO while(1) { LATDbits.LATD7 = !LATDbits.LATD7; Delay10KTCYx(250); } }//end main()
M.C. ANDRÉS GERARDO FUENTES
78
OPERADORES •
Asignación:
M.C. ANDRÉS GERARDO FUENTES
79
OPERADORES •
Aritméticos
M.C. ANDRÉS GERARDO FUENTES
80
OPERADORES •
Relacionales
M.C. ANDRÉS GERARDO FUENTES
81
OPERADORES • Lógicos
• De manejo de bits
M.C. ANDRÉS GERARDO FUENTES
82
OPERADORES • Incremento, decremento y desplazamiento de bits
M.C. ANDRÉS GERARDO FUENTES
83
OPERADORES • Dirección e Indirección
• Ejemplos: • •
• •
p = &contador;
/* p apunta a la dirección de contador */
El operador de indirección *, nos da el valor o contenido de la variable cuya dirección está apuntada por el puntero. /* p apunta a la dirección de contador */ /* guarda en a el contenido de la var. apuntada por p */
p = &contador; a = *p;
M.C. ANDRÉS GERARDO FUENTES
84
EXPRESIONES
M.C. ANDRÉS GERARDO FUENTES
85
MANEJO DE DATOS •
Tipos: El lenguaje C proporciona cinco tipos básico de datos, con cuatro modificadores posibles. Podemos utilizar variables de cualquiera de esos tipos.
•
La tabla siguiente muestra los tipos disponibles:
•
C18 permite una "forma corta" para escribir algunos de los tipos. Concretamente, podemos utilizar unsigned , short , o long en lugar de unsigned int , short int , o long int .
M.C. ANDRÉS GERARDO FUENTES
86
DECLARACIÓN DE VARIABLES •
Las variables deben ser declaradas antes de ser utilizadas en el programa. El proceso de declaración de variables le dice a C18 de que tipo son y como se llaman. Al igual que las demás instrucciones de C18 , deben terminar con “;” .
tipo nombre_de_la_variable; Donde: tipo es alguno de los enumerados en la tabla anterior.
Unos ejemplo son: int temperatura; int a = 0; signed long a = 125, b, c = -10;
•
La forma en que se declara una variable es la siguiente:
M.C. ANDRÉS GERARDO FUENTES
char nombre = 'juan perez';
87
CONVERSIONES ENTRE TIPOS •
C18 nos permite mezclar diferentes tipos de variables dentro de una misma expresión. Y existen un conjunto de reglas que nos permiten saber de que tipo será el resultado de la misma.
•
Las reglas de conversión de tipos hacen que el resultado de una operación sea siempre el mismo que el de la variable más larga que intervenga en ella. Sin embargo, podemos forzar a que el resultado sea de un tipo en particular, de la siguiente forma:
•
El C18 convertirá a int cualquier expresión que contenga variables char, short o int. Esta conversión solo tiene efecto mientras se realizan los cálculos. Las variables en sí mismas no cambian su tipo.
•
(tipo) valor
M.C. ANDRÉS GERARDO FUENTES
donde tipo es el tipo al que queremos que pertenezca valor . El siguiente ejemplo nos aclarará todo esto: int a = 250, b = 10; long c; c = a * b;
88
EJEMPLO 1 •
“Hola Mundo” con un simple led
M.C. ANDRÉS GERARDO FUENTES
89
M.C. ANDRÉS GERARDO FUENTES
90
PODEMOS DEFINIR UN PUERTO EN C18 1.
Por medio de una referencia simbólica
2.
Por medio de comandos del C18
M.C. ANDRÉS GERARDO FUENTES
91
MAPA DE E/S DEL PIC18F4550
M.C. ANDRÉS GERARDO FUENTES
92
POR MEDIO DE UNA REFERENCIA SIMBÓLICA •
Siempre puede definirse un bit: #define bits.#pin • Ejemplo: #define Led PORTBbits.PORTB0 •
•
Después ponerlo a un nivel: =[0|1] • Ejemplo: Led=0; •
•
Obtener el nivel: )==[1|0] • If(Led==0) •
Nunca olvidar definir como va a usarse cada bit: TRIS();
M.C. ANDRÉS GERARDO FUENTES
93
POR MEDIO DE COMANDOS C18 •
Configuración de los pines de E/S Cada puerto tiene vinculados determinados pines agrupados en forma
de un “Puerto”, los pines deben configurarse individualmente, los registros de
configuración siguen el estandar del Ensamblador. TRIS configura los bits vinculados con un puerto en particular un bit en [1] define una entrada un bit en [0] define una salida
M.C. ANDRÉS GERARDO FUENTES
94
PROGRAMAS EJEMPLO: •
Programa “hola mundo”
•
Corrimientos a la derecha y a la izquierda
•
Rotación de bits a la derecha y a la izquierda
•
Contador binario de 8 bits(0-255)
•
Pausas en milisegundos
•
Detección de nivel con pushboton
M.C. ANDRÉS GERARDO FUENTES
95
INTERRUPCIONES • Las interrupciones son tareas programas que el micro
realiza cuando el flanco de interrupción se activa, con lo que el micro deja el programa principal y accede a una parte reservada de la memoria que se llama rutina de interrupción, donde una vez acabada la rutina de interrupción, se baja el flanco de interrupción que lo ha provocado y el micro continua el programa principal donde lo había dejado antes de ir a la rutina de interrupción. M.C. ANDRÉS GERARDO FUENTES
96
INTERRUPCIONES • Las interrupciones en el micro pueden darse de varios
tipos:
• Interrupciones externas. • Interrupciones por desbordamiento del contador. • Interrupciones de EUSART. • Interrupciones USB. • Interrupciones del ADC. • Interrupciones por periféricos externos.
M.C. ANDRÉS GERARDO FUENTES
97
INTERRUPCIONES • El micro puede tener varias interrupciones programadas a
la vez, pero hay que tener en cuenta que una vez que el código entra en una rutina de interrupción, el micro no puede acceder a otra interrupción hasta que la rutina de interrupción que se está ejecutando finalice.
• En el caso de que saltasen a la vez 2 o más interrupciones,
el micro accedería aleatoriamente a una de ellas, es por ello que suele darse prioridad a las interrupciones si tenemos alguna rutina de interrupción más importantes que otras.
M.C. ANDRÉS GERARDO FUENTES
98
INTERRUPCIONES •
El Pic18F4550 cuenta con tres vectores de interrupcion, mismo que apuntan a las rutinas de servicio correspondientes: •