You are on page 1of 122

Universidad de Colima

Facultad de Ingeniera Mecnica y Elctrica


Ingeniera en Sistemas Computacionales Academia de Arquitectura de Computadoras

Sistemas Embebidos y Control


Septimo Semestre

Microcontroladores Programables M.C. Andrs Gerardo Fuentes Covarrubias

1.1. Conceptos bsicos sobre microcontroladores

Que es un procesador?

M.C. Andrs Gerardo Fuentes Covarrubias

Donde estan los procesadores?

M.C. Andrs Gerardo Fuentes Covarrubias

Que es un microcontrolador?

M.C. Andrs Gerardo Fuentes Covarrubias

Microprocesadores vs Microcontroladores

M.C. Andrs Gerardo Fuentes Covarrubias

Hardware

M.C. Andrs Gerardo Fuentes Covarrubias

Aplicaciones

M.C. Andrs Gerardo Fuentes Covarrubias

Repertorio de instruccin

M.C. Andrs Gerardo Fuentes Covarrubias

Hardware

M.C. Andrs Gerardo Fuentes Covarrubias

Hadware de un microcontrolador

M.C. Andrs Gerardo Fuentes Covarrubias

10

Unidad central de proceso

M.C. Andrs Gerardo Fuentes Covarrubias

11

CPU (Esquema)

M.C. Andrs Gerardo Fuentes Covarrubias

12

Tareas de un CPU

M.C. Andrs Gerardo Fuentes Covarrubias

13

Tareas del CPU cont

M.C. Andrs Gerardo Fuentes Covarrubias

14

Tareas de

M.C. Andrs Gerardo Fuentes Covarrubias

15

Tipos de CPU

M.C. Andrs Gerardo Fuentes Covarrubias

16

Sistema de memoria

M.C. Andrs Gerardo Fuentes Covarrubias

17

Sistema de memoria

M.C. Andrs Gerardo Fuentes Covarrubias

18

Los microcontroladores

M.C. Andrs Gerardo Fuentes Covarrubias

19

Aplicaciones

M.C. Andrs Gerardo Fuentes Covarrubias

20

1.2. Los microcontroladores PIC y Atmel


Microcontroladores comunes

M.C. Andrs Gerardo Fuentes Covarrubias

21

Escalabilidad en Microchip

M.C. Andrs Gerardo Fuentes Covarrubias

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. Andrs Gerardo Fuentes Covarrubias 23

Usos

M.C. Andrs Gerardo Fuentes Covarrubias

24

M.C. Andrs Gerardo Fuentes Covarrubias

25

M.C. Andrs Gerardo Fuentes Covarrubias

26

Ciclo de vida de un programa para sistema embebido:

M.C. Andrs Gerardo Fuentes Covarrubias

27

1.3. El entorno de desarrollo para Microcontroladores Microchip


Modelo de programacin del uC PIC18F4550 Modelado de programas en Mplab Simulacin de programas en Proteus VSM

Modelo de programacin con el microcontrolador 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 caractersticas fundamentales de este microcontrolador y de sus antecesores los PIC18F2455/2550/4455.

M.C. Andrs Gerardo Fuentes Covarrubias

29

M.C. Andrs Gerardo Fuentes Covarrubias

30

Organizacin 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/leda mediante un programador externo o durante la ejecucin programa mediante unos punteros. Memoria RAM de datos: memoria SRAM interna de 2048 bytes en la que estn incluidos los registros de funcin especial. Almacena datos de forma temporal durante la ejecucin del programa Puede ser escrita/leda en tiempo de ejecucin mediante diversas instrucciones. Memoria EEPROM de datos: memoria no voltil de 256 bytes. Almacena datos que se deben conservar aun en ausencia de tensin de alimentacin Puede ser escrita/leda en tiempo de ejecucin a travs de registros. Pila: bloque de 31 palabras de 21 bits. Almacena la direccin de la instruccin que debe ser ejecutada despus de una interrupcin o subrutina.

M.C. Andrs Gerardo Fuentes Covarrubias

31

Organizacin de la memoria
Memoria de configuracin: memoria en la que se incluyen los bits de configuracin (12 bytes de memoria flash) y los registros de identificacin (2 bytes de memoria de solo lectura). Se trata de un bloque de memoria situado a partir de la posicin 30000H de memoria de programa (ms all de la zona de memoria de programa de usuario). En esta memoria de configuracin se incluyen: Bits de configuracin: contenidos en 12 bytes de memoria flash permiten la configuracin de algunas opciones del uC como: Opciones del oscilador. Opciones de reset. Opciones del watchdog. Opciones de la circuitera de depuracin y programacin. Opciones de proteccin contra lectura de memoria de programa y memoria EEPROM de datos.

Estos bits se configuran generalmente durante la programacin del uC, aunque tambin pueden ser ledos y modificados durante la ejecucin del programa. Registros de identificacin: se trata de dos registros situados en las direcciones 3FFFFEH y 3FFFFFH que contienen informacin del modelo y revisin del dispositivo. Son registros de solo lectura y no pueden ser modificados por el usuario.
M.C. Andrs Gerardo Fuentes Covarrubias 32

Mapa de memoria

M.C. Andrs Gerardo Fuentes Covarrubias

33

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 lneas de direccin - 16/8 lneas de datos (16 lneas para instrucciones/8 lneas para datos) Bus de la memoria de datos: - 12 lneas de direccin - 8 lneas de datos Esto permite acceder simultneamente a la memoria de programa y a la memoria de datos. Es decir se puede ejecutar una instruccin (lo que por lo general requiere acceso a memoria de datos) mientras se lee de la memoria de programa la siguiente instruccin (proceso pipeline).

Por tanto la ejecucin completa de 1 instruccin (lectura instruccin +ejecucin) se hace en un 1 ciclo de instruccin (4 Tosc). EXCEPCIN: las instrucciones que modifican el contenido del PC requieren 2 ciclos de instruccin.
M.C. Andrs Gerardo Fuentes Covarrubias 34

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 estan escritos en ensablador Compilarlos si estan escritos en un lenguaje de alto nivel Depurarlos con el MPLAB Sim
M.C. Andrs Gerardo Fuentes Covarrubias 35

Simulacin de programas con Proteus VSM


Como una funcionalidad adicional, MPLAB permite invocar al Proteus desde el entorno de desarrollo para efectuar la depuracin directamente en el esquemtico de la aplicacin Hardware.

M.C. Andrs Gerardo Fuentes Covarrubias

36

1.4. Diseo de aplicaciones con PIC


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

;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

M.C. Andrs Gerardo Fuentes Covarrubias

38

Formato de un programa en ensamblador Pic18F4550(2)


CBLOCK 0x000 ;Aqui va la declaracion de variables ENDC ORG 0xf00000 ;DE "Test Data",0,1,2,3,4,5 ORG 0x0000 goto main ORG 0X0008 goto main ORG 0X0018 goto main main: ;Variables en la ACCESS RAM (Banco 0) max 96 bytes

;Area de definicion de variables de la EEPROM

;vector de interrupcion del reset

;vector de interrupcion de baja prioridad

;vector de interrupcion de alta prioridad

;Programa principal

fin: goto fin end


M.C. Andrs Gerardo Fuentes Covarrubias 39

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. Andrs Gerardo Fuentes Covarrubias 40

Operaciones orientadas al Byte

M.C. Andrs Gerardo Fuentes Covarrubias

41

Operaciones orientadas al Bit

M.C. Andrs Gerardo Fuentes Covarrubias

42

Operaciones de control

M.C. Andrs Gerardo Fuentes Covarrubias

43

Operaciones con literales

M.C. Andrs Gerardo Fuentes Covarrubias

44

Temporizadores, Puertos de Entrada/Salida y Manejo de datos


El uC PIC18F4550 dispone 5 puertos de E/S que incluyen un total de 35 lneas digitales de E/S:

Todas las lneas digitales de E/S disponen de al menos una funcin alternativa asociada a alguna circuitera especifica del uC. Cuando una lnea trabaja en el modo alternativo no puede ser utilizada como lnea digital de E/S estndar.
M.C. Andrs Gerardo Fuentes Covarrubias 45

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 lneas 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. Andrs Gerardo Fuentes Covarrubias

46

Puertos de Entrada/Salida

M.C. Andrs Gerardo Fuentes Covarrubias

47

Puerto A

Dispone de 7 lneas de E/S. Las funciones alternativas son: RAO: entrada analgica (ANO)/ entrada de comparacin (C1IN-) RA: entrada analgica (AN1)/ entrada de comparacin (C2IN-) RA2: entrada analgica (AN2)/ entrada de comparacin (C2IN+) RA3: entrada analgica (AN3)/ entrada de comparacin (C1IN+) RA4: entrada de reloj del Temporizador 0 (TOCKI)/salida de comparacin (C1OUT)

RA5: entrada analgica (AN4)/ salida de comparacin (C2OUT)/HLVDIN entrada de deteccin de tensin alta/baja RA6: entrada del oscilador principal (OSC2)/salida de seal de reloj (CLKO)

En el reset las lneas RAO, RA, RA2, RA3 y RA5 se configuran como lneas de entrada analgicas. Para poder utilizarlas como lneas digitales de E/S hay que desactivar la funcin analgica: MOVLW 0FH ; Se desactiva la funcin de entrada analgica MOVWF ADCON1 ; para las lneas RAO, RA1, RA2, RA3 y RA4 MOVLW 07H ; Configura los comparadores para entrada digital. MOVWF CMCON ;para las lneas 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. Andrs Gerardo Fuentes Covarrubias

48

Registro ADCON1
VCFG1: Bit de configuracin de la tensin de referencia VREF-: VCFG1=0: VREF- se conecta a VSS VCFG1=1: VREF- se conecta a la lnea fsica RA2 VCFG0: Bit de configuracin de la tensin de referencia VREF+: VCFG1=0: VREF+ se conecta a VDD VCFG1=1: VREF+ se conecta a la lnea fsica RA2 PCFG3..PCFG0: Bits configuracin de los puertos de conversin A/D. Mediante estos bits se establecen que lneas fsicas (RA5..RA0, RB4..RB0, RE1 y RE0) van a trabajar como entradas del convertidor A/D (Ver Tabla de configuracin de lneas de conversin A/D).

M.C. Andrs Gerardo Fuentes Covarrubias

49

Registro ADCON1

M.C. Andrs Gerardo Fuentes Covarrubias

50

Puerto B
Dispone de 8 lneas de E/S. Las funciones alternativas son: RBO: entrada analgica (AN12)/ interrupcin externa 0 (INTO)/entrada de fallo del ECCP (FLTO)/entrada de datos del SPI (SDI)/lnea de datos del PC (SDA) RB1: entrada analgica (AN10)/ interrupcin externa 1 (INTl)/lnea de reloj del SPI (SDI)/lnea de reloj del PC (SDA) RB2: entrada analgica (AN8)/ interrupcin externa 2 (INT2)/salida de datos del USB (VCMO) RB3: entrada analgica (AN9)/ lnea de E/S del CCP2 (CCP2)/salida de datos del USB (VPO) RB4: entrada analgica (AN11)/ interrupcin por cambio en pin (KBIO)/ salida de CS del SSP (CSSP) RB5: interrupcin por cambio en pin (KBI1)/ lnea de programacin (PGM) RB6: interrupcin por cambio en pin (KBI2)/ lnea de programacin (PGC) RB7: interrupcin por cambio en pin (KBI3)/ lnea de programacin (PGD)

M.C. Andrs Gerardo Fuentes Covarrubias

51

Puerto B
Resistencias de pull.up: Todas las lneas del puerto B disponen de resistencias de pull-up internas que pueden ser activadas poniendo el bit RBPU del registro INTCON2 a '0' (RPBU=T despus de un reset). Si una lnea del puerto B se configura como salida la resistencia de pull-up correspondiente se desactiva automticamente. Por defecto, en el reset las lneas RB4..RB0 estn programadas como entradas analgicas. Existen dos formas de configurar RB4..RB0 como lneas de E/S digitales: Poniendo a '0' el bit PBADEN del registro de configuracin CONFIG3H=> en el reset RB4..RB0 se configuran como lneas de E/S digitales Si PBADEN='l' (valor por defecto) se pueden configurar RB4..RB0 como lneas el E/S digitales desactivando la funcin analgica: MOVLW 0x07 MOVWF ADCON1 MOVLW 0xF0 MOVWF TRISB ; Se desactiva la funcin de entrada analgica ; para las lneas RBO, RB1, RB2, RB3 y RB4 ; Se configuran RB7, RB6, RB5 y RB4 como entradas ; y RB3, RB2, RB1 y RBO como salidas

M.C. Andrs Gerardo Fuentes Covarrubias

52

Puerto C
Dispone de 5 lneas de E/S (RCO, RCl, RC2, RC6 y RC7) y 2 lneas 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)/ lnea de E/S del CCP2 (CCP2)/ salida OE del transceiver del USB (UOE) RC2: lnea de E/S del CCP1 (CCP1)/ salida PWM del ECCP1 (PA) RC4: lnea menos del bus USB (D-) / lnea de entrada del USB (VM) RC5: lnea ms del bus USB (D-) / lnea de entrada del USB (VP) RC6: salida de transmisin del EUSART (TX)/ lnea de reloj del EUSART (CK)

RC7: entrada de recepcin del EUSART (RX)/ lnea de datos sncrona del EUSART (DT)/ salida de datos del SPI (SDO) En el reset todas las lneas del puerto C quedan configuradas como entradas digitales
M.C. Andrs Gerardo Fuentes Covarrubias 53

Puerto D
Dispone de 8 lneas de E/S. Las funciones alternativas son: RDO: lnea de datos del SPP (SPPO) RD1: lnea de datos del SPP (SPP1) RD2: lnea de datos del SPP (SPP2) RD3: lnea de datos del SPP (SPP3) RD4: lnea de datos del SPP (SPP4) RD5: lnea de datos del SPP (SPP5) / salida PWM del ECCP1 (P1B) RD6: lnea de datos del SPP (SPP6) / salida PWM del ECCP1 (P1C) RD7: lnea de datos del SPP (SPP7) / salida PWM del ECCP1 (P1D)

Resistencias de pull.up: Todas las lneas 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' despus de un reset). Si una lnea del puerto D se configura como salida la resistencia de pull-up correspondiente se desactiva automticamente.

M.C. Andrs Gerardo Fuentes Covarrubias

54

Puerto E
Dispone de 3 lneas de E/S (REO, RE1 y RE2) y 1 lnea de solo entrada (RE3). Las funciones alternativas son: REO: entrada analgica (AN5)/ salida de reloj 1 del SPP (CK1SPP) RE1: entrada analgica (AN6)/ salida de reloj 2 del SPP (CK2SPP) RE2: entrada analgica (AN7)/ salida de habilitacin del SPP (OESPP) RE3: Lnea de reset externo (MCLR) / lnea de programacin (VPP)

En el reset todas las lneas RE2..RE0 se configuran como entradas analgicas. Para poder utilizarlas como lneas digitales de E/S hay que desactivar la funcin analgica: MOVLW 0FH MOVWF ADCON1 MOVLW 06H MOVWF TRISE ; Se desactiva la funcin de entrada analgica ; para las lneas REO, RE1 y RE2 ; Se configuran RE2 y RE1 como entradas ; y RE0 como salida

La lnea RE3 por defecto tiene la funcin de Reset del uC. Si se desea desactivar la funcin de Reset y utilizar RE3 como lnea de entrada digital hay que poner a '0' el bit MCLRE del registro de configuracin CONFIG3H.
M.C. Andrs Gerardo Fuentes Covarrubias 55

Oscilador
El PIC18F4550, tiene un oscilador interno de 32 KHZ. Este PIC ejecuta una instruccin en un ciclo de mquina (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 cermicos entre 15 a 33 pF.

M.C. Andrs Gerardo Fuentes Covarrubias

56

Reset
Es la accin 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 operacin normal este pin debe encontrarse a un nivel alto.

M.C. Andrs Gerardo Fuentes Covarrubias

57

Armado del Sistema Mnimo

M.C. Andrs Gerardo Fuentes Covarrubias

58

El sistema mnimo en PCB

M.C. Andrs Gerardo Fuentes Covarrubias

59

Qu es un Bootloader?
El termino bootloader hace referencia a un pequeo programa que se realiza para determinado microcontrolador, ya sea PIC, Freescale, Atmel, etc. Este cdigo 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. Andrs Gerardo Fuentes Covarrubias

60

Qu es un Bootloader?
Es necesario tener un programador para usarlo solo una vez y as grabarle el programa residente en memoria FLASH. Ya despus 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 aplicacin real del micro. No es mucha la que quita, pero hay que tener eso claro. Por ningn motivo se puede sobrescribir las posiciones de memoria FLASH en la que se encentra el programa residente Bootloader. Si se borra por algn 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 versin PIC16F628A que si lo deja y adems tiene mejores prestaciones.
M.C. Andrs Gerardo Fuentes Covarrubias 61

Configuracin 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 cdigo Relocalizar los vectores de interrupcin para que no toquen los vectores originales.

M.C. Andrs Gerardo Fuentes Covarrubias

62

HIDBootloader
El diagrama del sistema mnimo incluye la circuitera para sostener el HIDBootloader Para entrar en modo Bootloader, se debe presionar el botn conectado en RB4, mantenindolo presionado, despus 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 botn, el PIC entra en modo Bootloader y si no ejecuta el cdigo normal que le grabamos al PIC. El led conectado en el puerto RD1 se enciende y apaga cuando entra en modo Bootloader.

M.C. Andrs Gerardo Fuentes Covarrubias

63

HIDBootloader software

M.C. Andrs Gerardo Fuentes Covarrubias

64

Formato de los fuses en Ensamblador


;-------------------------------------------------------------------------------------;Bits de configuracin ;---------------------------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 proteccin ****************** 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. Andrs Gerardo Fuentes Covarrubias 65

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. Andrs Gerardo Fuentes Covarrubias

66

El lenguaje de programacin C para microcontroladores

Repertorio de instrucciones Diseo de aplicaciones bsicas en lenguaje C Puertos de E/S, temporizadores y manejo de datos Interrupciones

M.C. Andrs Gerardo Fuentes Covarrubias

67

El compilador CCS
Si queremos realizar la programacin 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-hexadedimal, que es el necesario para programar (utilizando un programador de PIC) un microcontrolador de 6, 8, 18 40 patillas.

M.C. Andrs Gerardo Fuentes Covarrubias

68

El compilador CCS
Mas productividad Permite codificado en lnea de ASM Soporta compilado en lnea con MPLAB Portabilidad de cdigo en lenguaje C Soporta recursividad de funciones Amplia gama de microcontroladores Capacidad de relocalizacin de cdigo y vectores de interrupcin
M.C. Andrs Gerardo Fuentes Covarrubias 69

Formato de programa (1)


#include "18f4550.h" #device adc=10 //Resolucion del ADC 8/10 bits //---------------------------------------------------------------------------------------------------//Bits de configuracin #fuses HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5, CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB,CPB //---------------------------------------------------------------------------------------------------//USES de configuracion de perifericos //Configuracin del oscilador del CPU #use delay(clock=48000000) //Configuracion de la USART1 #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N) //---------------------------------------------------------------------------------------------------//Redireccionamiento de los vectores de interrupcin para adaptarlos al HidBootloader #build(reset=0x1000,interrupt=0x1008) #org 0x0000,0x0FFF {} //---------------------------------------------------------------------------------------------------//Definicin de simbolos #define LED PIN_B1
M.C. Andrs Gerardo Fuentes Covarrubias 70

Formato de programa (2)


//---------------------------------------------------------------------------------------------------//Programa principal void main(void) { //-----------------------------------------------------------------------------------------------//Variables y constantes del programa //-----------------------------------------------------------------------------------------------//Inicializacin del microcontrolador //----------------------------------disable_interrupts(global); disable_interrupts(int_timer1); disable_interrupts(int_rda); disable_interrupts(int_ext); disable_interrupts(int_ext1); disable_interrupts(int_ext2); setup_spi(FALSE); setup_psp(PSP_DISABLED); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); port_b_pullups(FALSE); setup_adc_ports( AN0 || VSS_VDD ); setup_adc(ADC_CLOCK_DIV_64 || ADC_ACQT_2TAD ); set_adc_channel(0);
M.C. Andrs Gerardo Fuentes Covarrubias 71

Formato de programa (3)


//-----------------------------------------------------------------------------------------------//Rutina principal //------------------while(1) // Ciclo infinito { /* Programa principal */ } }

M.C. Andrs Gerardo Fuentes Covarrubias

72

Operadores
Asignacin:

M.C. Andrs Gerardo Fuentes Covarrubias

73

Operadores
Aritmticos

M.C. Andrs Gerardo Fuentes Covarrubias

74

Operadores
Relacionales

M.C. Andrs Gerardo Fuentes Covarrubias

75

Operadores
Lgicos

De manejo de bits

M.C. Andrs Gerardo Fuentes Covarrubias

76

Operadores
Incremento, decremento y desplazamiento de bits

M.C. Andrs Gerardo Fuentes Covarrubias

77

Operadores
Direccin e Indireccin

Ejemplos:
p = &contador; /* p apunta a la direccin de contador */
El operador de indireccin *, nos da el valor o contenido de la variable cuya direccin est apuntada por el puntero. p = &contador; a = *p; /* p apunta a la direccin de contador */ /* guarda en a el contenido de la var. apuntada por p */
M.C. Andrs Gerardo Fuentes Covarrubias 78

Expresiones

M.C. Andrs Gerardo Fuentes Covarrubias

79

Manejo de datos
Tipos: El lenguaje C proporciona cinco tipos bsico de datos, con cuatro modificadores posibles. Podemos utilizar variables de cualquiera de esos tipos. La tabla siguiente muestra los tipos disponibles:

CCS 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. Andrs Gerardo Fuentes Covarrubias

80

Declaracin de variables
Las variables deben ser declaradas antes de ser utilizadas en el programa. El proceso de declaracin de variables le dice a CCS de que tipo son y como se llaman. Al igual que las demas instrucciones de CCS, deben terminar con ;. La forma en que se declara una variable es la siguiente: 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; char nombre = 'juan perez';

M.C. Andrs Gerardo Fuentes Covarrubias

81

Conversiones entre tipos


CCS nos permite mezclar diferentes tipos de variables dentro de una misma expresin. Y existen un conjunto de reglas que nos permiten saber de que tipo ser el resultado de la misma. El CCS convertir a int cualquier expresin que contenga variables char, short o int. Esta conversin solo tiene efecto mientras se realizan los clculos. Las variables en s mismas no cambian su tipo.
Las reglas de conversin de tipos hacen que el resultado de una operacin sea siempre el mismo que el de la variable ms larga que intervenga en ella. Sin embargo, podemos forzar a que el resultado sea de un tipo en particular, de la siguiente forma: (tipo) valor
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;

M.C. Andrs Gerardo Fuentes Covarrubias

82

Ejemplo 1
Hola Mundo con un simple led

M.C. Andrs Gerardo Fuentes Covarrubias

83

Esquemtico en Proteus VSM:

M.C. Andrs Gerardo Fuentes Covarrubias

84

Podemos definir un puerto en CCS


1. 2. 3.

Por medio de su direccin fsica Por medio de una referencia simblica Por medio de comandos del CCS

M.C. Andrs Gerardo Fuentes Covarrubias

85

Mapa de registro de funciones especiales.

M.C. Andrs Gerardo Fuentes Covarrubias

86

Por medio de la direccin fsica


Se declaran los registros TRISx y PORTx definiendo su posicin en la memoria RAM como variables de programa. Se accesan de manera individual asignndoles el valor correspondiente Se pueden definir tambin bits individuales de los puertos siguiendo el mismo procedimiento.
M.C. Andrs Gerardo Fuentes Covarrubias 87

Por medio de la direccin fsica


Ejemplo:
#BYTE TRISB=0xf93; #BYTE TRISC=0xf94; #BYTE PORTB=0xf81; #BYTE PORTC=0xf82; Bits individuales: #BIT TB1=TRISB.1; #BIT RB1=PORTB.1; Hgase referencia en el programa a los puertos o bits individuales previamente definidos como si fuesen estos variables de programa.

M.C. Andrs Gerardo Fuentes Covarrubias

88

Por medio de comandos CCS


Siempre puede definirse un bit: #define <simbolo> PIN_<PORT>#pin Despus ponerlo a un nivel: output_bit(<simbolo>,[0|1]) Obtener el nivel: input(<simbolo>)==[1|0]
Nunca olvidar definir como va a usarse cada bit: set_tris_<port>(<estado de los bits>);
M.C. Andrs Gerardo Fuentes Covarrubias 89

Programas ejemplo:(Ens y CCS)


Programa hola mundo Corrimientos a la derecha y a la izquierda Rotacin de bits a la derecha y a la izquierda Contador binario de 8 bits(0-255) Pausas en milisegundos Deteccin de nivel con pushboton

M.C. Andrs Gerardo Fuentes Covarrubias

90

Temporizadores
Los temporizadores son contadores que al activarlos empiezan una cuenta y cuando esta cuenta se acaba se activa el flanco de interrupcin por el temporizador, entrando el micro en la rutina de interrupcin del temporizador. El PIC18F4550 tiene 4 temporizadores, de los cuales 1 de ellos es de 8 bits y el resto de una precisin de 16 bits.

M.C. Andrs Gerardo Fuentes Covarrubias

91

Timer 0

Existe la posibilidad de activar un preescaler en los temporizadores de forma que se pueda alargar la duracin del temporizador, dependiendo del temporizador puede ser de 2,4,8 e incluso 16.
M.C. Andrs Gerardo Fuentes Covarrubias 92

Timer 1
Resolucin 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. Andrs Gerardo Fuentes Covarrubias

93

Interrupciones
Las interrupciones son tareas programas que el micro realiza cuando el flanco de interrupcin 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 interrupcin, donde una vez acabada la rutina de interrupcin, se baja el flanco de interrupcin que lo ha provocado y el micro continua el programa principal donde lo haba dejado antes de ir a la rutina de interrupcin.

M.C. Andrs Gerardo Fuentes Covarrubias

94

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 CAD. Interrupciones por perifricos externos.

M.C. Andrs Gerardo Fuentes Covarrubias

95

Interrupciones
El micro puede tener varias interrupciones programadas a la vez, pero hay que tener en cuenta que una vez que el cdigo entra en una rutina de interrupcin, el micro no puede acceder a otra interrupcin hasta que la rutina de interrupcin que se est ejecutando finalice. En el caso de que saltasen a la vez 2 o ms interrupciones, el micro accedera aleatoriamente a una de ellas, es por ello que suele darse prioridad a las interrupciones si tenemos alguna rutina de interrupcin ms importantes que otras.

M.C. Andrs Gerardo Fuentes Covarrubias

96

Interrupciones
El Pic18F4550 cuenta con tres vectores de interrupcion, mismo que apuntan a las rutinas de servicio correspondientes:
Reset (0000h) Usuario alta prioridad (0008h) Usuario baja prioridad (0018h)

M.C. Andrs Gerardo Fuentes Covarrubias

97

Interrupciones
Como se codifican las interrupciones?
;-------------------------------------------------------------------------;vector de interrupcin del reset ;-------------------------------ORG 0x0000 goto main ;Etiqueta donde inicia la ISR ;-------------------------------------------------------------------------;vector de interrupcin de alta prioridad ;---------------------------------------ORG 0X0008 goto main ;Etiqueta donde inicia la ISR ;-------------------------------------------------------------------------;vector de interrupcin de baja prioridad ;---------------------------------------ORG 0X0018 goto main ;Etiqueta donde inicia la ISR

Las instrucciones GOTO <label>, transfieren el control a una parte de nuestro programa donde reside la ISR ISR significa Interrupt Service Routine, es decir rutina de servicio a interrupcin y en pocas palabras y lenguaje coloquial no es otra cosa que el cdigo que deber ejecutar el microcontrolador cuando ocurra el estmulo hardware que desencadena la interrupcin, por ejemplo presionar el botn de RESET.

M.C. Andrs Gerardo Fuentes Covarrubias

98

1.5. Interconexin de perifricos


Botones y Leds Teclado de matriz Display led, alfanumrico y grfico

M.C. Andrs Gerardo Fuentes Covarrubias

99

Manejo de botones y leds


Botones, usados para la introduccin de estimulos como teclados Pueden mantener una resistencia de pull-up para dar valores reales Detectarse cambios de nivel por medio de programa Pueden manejarse como arreglos mediante un solo nibble de registro con estructuras switch. Puede declararse una entrada en cualquier momento: //Definicin de simbolos #define LED PIN_B7 #define Boton PIN_B6 Tambin definir si es entrada o salida: set_tris_b(0x40); //0b0100 0000 Finalmente usar el botn: if(input(Boton)==0) { delay_ms(100); while(input(Boton)==0) output_bit(LED,0); lcd_putc('\f'); a=0; }
M.C. Andrs Gerardo Fuentes Covarrubias 100

LCD 16x2
El LCD cuenta en sus seales de control de patillas para gobernar el intercambio de datos y comandos entre el microcontrolador y el LCD. Bsicamente: E (Enable): Despus de enviar un dato o comando al LCD un impulso positivo no menor de 450nS valida el bus de datos y hace que el LCD tome en consideracin lo que este presente en el. R/W (Lectura/Escritura): Si esta en nivel 1 pone el bus de datos en modo de lectura, si es 0 lo pone en modo de escritura, por lo general esta seal permanentemente se hace 0, a menos que el programador vaya a efectuar operaciones de lectura a la memoria del LCD. RS (Seleccin de Registro): Por medio de esta seal, el LCD discrimina si lo que esta presente en el bus de datos es un Comando (RS=0) o un cdigo ASCII para desplegar en el display. (RS=1).

M.C. Andrs Gerardo Fuentes Covarrubias

101

LCD 16x2
Juego de seales

M.C. Andrs Gerardo Fuentes Covarrubias

102

INTERCONEXIN CON EL SISTEMA MINIMO

M.C. Andrs Gerardo Fuentes Covarrubias

103

Inicializacin del LCD


El comando init_lcd() ejecuta el proceso de inicializacin del LCD La instruccin lcd_putc() enva datos hacia el LCD Se puede redirigir la salida de consola por medio de printf reenviandola al LCD mediante printf(lcd_putc,)

M.C. Andrs Gerardo Fuentes Covarrubias

104

Ejemplo 2
Hola mundo con LCD 16x2 alfanumrico

M.C. Andrs Gerardo Fuentes Covarrubias

105

1.6. Convertidores de datos y operaciones bsicas


El Convertidor Analgico Digital y medicin de temperaturas El DAC con resistencias Interconexin de un MC1408-0 y control de potencia en DC
M.C. Andrs Gerardo Fuentes Covarrubias 106

Convertidor analgico-digital
Microchip PIC18F4550 contiene 13 convertidores analgicos digitales, los cuales pueden ser seleccionados en modos de resolucin de 8 10 bits, para ello antes habr que configurar las entradas en modo CAD.

M.C. Andrs Gerardo Fuentes Covarrubias

107

Convertidor analgico-digital

M.C. Andrs Gerardo Fuentes Covarrubias

108

Convertidor analgico-digital
Otra de sus caractersticas es que tiene dos patillas de referencia donde podemos dar la tensin de referencia para todas o algunas de las entradas del CAD. Otra posibilidad es configurar el tiempo de adquisicin de datos, pues tiene un registro habilitado especialmente pare ello ya que en algunas ocasiones hay que esperar al interruptor de muestreo que se cierre y que el condensador (Chold) se descargue para poder hacer otra adquisicin.
M.C. Andrs Gerardo Fuentes Covarrubias 109

Convertidor analgico-digital

Se recomienda que la mxima resistencia de entrada (Rs) sea de 2.5K, pues sino la conversin no sera del todo fiable, por lo que habra que hacer una adaptacin de impedancias entre las partes.
M.C. Andrs Gerardo Fuentes Covarrubias 110

Modelo de conversin
El multiplexor.- El ADC es un convertidor de aproximaciones sucesivas de 10 bits, el cual puede realizar la conversin de una de las 8 entradas (o canales) analgicas AN0,...,AN7 multiplexadas por la lgica interna que utiliza como lneas de seleccin del canal los bits CHS2:CHS0, en donde se coloca el nmero en binario del canal a convertir. Voltajes de Referencia.- Todo convertidor ADC requiere voltajes de referencia que determinan el valor de mnima escala (VREF-) y el de plena escala (VREF+), de manera que la conversin de un valor de voltaje analgico Vin en el rango de VREF- a VREF+ producir un valor equivalente binario D en el rango de 0 a 2n, donde n es la resolucin del convertidor (n = 10).
M.C. Andrs Gerardo Fuentes Covarrubias 111

M.C. Andrs Gerardo Fuentes Covarrubias

112

Inicializacin del ADC


Encabezado
#include "18f4550.h" #device adc=10 //Resolucion del ADC 8/10 bits

Inicializacin del ADC y el canal a muestrear


int ADC_ACQT_2TAD=0x1;

setup_adc_ports( AN0 || VSS_VDD ); setup_adc(ADC_CLOCK_DIV_64 || ADC_ACQT_2TAD );

Muestreo
set_adc_channel(0); a= read_adc(); delay_us(10);
M.C. Andrs Gerardo Fuentes Covarrubias 113

M.C. Andrs Gerardo Fuentes Covarrubias

114

Aplicacin prctica
Medicin de temperatura Sensor LM35 grados centgrados Sensor lineal Necesidad de un Circuito Acondicionador de Seal (CAS) Regulacin de la velocidad de muestreo Tipos de variables en control anlogo Acciones de control segn la variable controlada.

M.C. Andrs Gerardo Fuentes Covarrubias

115

El sensor de temperatra LM35Z


Sensor en grados centgrados Escala de medicin 10mV/ C Salida lineal Fuente de alimentacin unipolar positiva

M.C. Andrs Gerardo Fuentes Covarrubias

116

Comportamiento lineal
Solo temperaturas positivas Resistencia nica de linealizacin Polarizacin totalmente positiva Sin CAS Interfaz directa con el microcontrolador, entrada analgica

M.C. Andrs Gerardo Fuentes Covarrubias

117

Porqu usar un CAS?


En la aplicacin tpica con una fuente unipolar, la salida de voltaje esta autoelevada para permitir la lectura de temperaturas positivas y negativas. Rango de medicin de (-55) a (+150C) Se usa una resistencia de calibracin de 18k La salida es la diferencia de tensin entre las terminales de salida del sensor.
M.C. Andrs Gerardo Fuentes Covarrubias 118

Circuito de Acondicionamiento de Seal


LM35Z
Comparador de Ganancia unitaria

Salida

U1
U1(VOUT) LM358 2 10k

V1
5V

24.0 VOUT 8

U2:A
1

U2:A(OP)

R2 R1

3 10k 2 4

LM35

D1
1N4148

R4
10k

R5
10k

R3
18k

R1(1)

D2
1N4148

M.C. Andrs Gerardo Fuentes Covarrubias

119

El amplificador operacional
LM358, OpAmp cuadruple unipolar Usado para CAS para uC unipolares Baja seal y bajo voltaje de conversin

M.C. Andrs Gerardo Fuentes Covarrubias

120

Acondicionamiento Lineal de Seales El amplificador diferencial


(V+) se obtiene de la divisin de voltajes: (V+) = [R2/(R2 + R1)]V2 Las corrientes IA e IB se calculan usando la ley de Ohm. IA = IB y (V+) = (V-) Vo se obtiene de una substitucin sencilla.

M.C. Andrs Gerardo Fuentes Covarrubias

121

Dudas y preguntas:
fuentesg@ucol.mx fuentesg85@hotmail.com fuentesg@gmail.com FACEBOOK: /Andres.FuentesCovarrubias

M.C. Andrs Gerardo Fuentes Covarrubias

122

You might also like