Vous êtes sur la page 1sur 25

Versin 1.0 1.0 1.0 1.

Fecha 24/02/2012 07/03/2012 14/03/2012 18/03/2012

Autor Llus Olivet Cos Llus Olivet Cos Llus Olivet Cos Llus Olivet Cos

Descripcin Creacin del documento Ampliacin con el apartado de interrupciones. Ampliacin con el apartado del Timer _0. Revisin y publicacin.

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos Recursos del microcontrolador........................................................................................................ 2 EL reloj ........................................................................................................................................... 4 Modos de trabajo del modulo de reloj.......................................................................................... 5 Uso del oscilador en modo XT ................................................................................................. 6 Uso del oscilador en modo HS................................................................................................. 7 Uso del oscilador en modo EC................................................................................................. 7 Uso del oscilador en modo INT ................................................................................................ 8 Control del oscilador.................................................................................................................... 8 Registro OSCCON................................................................................................................... 8 Registro OSCTUNE ............................................................................................................... 10 Registros CONFIG1L y CONFIG1H....................................................................................... 11 Las interrupciones......................................................................................................................... 13 Operatividad de las interrupciones ............................................................................................ 14 Interrupciones del perifrico USB .............................................................................................. 16 Los recursos de tiempo................................................................................................................. 18 El temporizador 0 <TIMER_0> .................................................................................................. 19 Funcionamiento de TIMER_0 ................................................................................................ 21 Bibliografa.................................................................................................................................... 24 Web Grafa ................................................................................................................................... 24

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador.

1/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos

RECURSOS DEL MICROCONTROLADOR


El microcontrolador como dispositivo de control programable, integra dentro del mismo encapsulado un conjunto de recursos que le permiten desempear sus funciones. Entendiendo como recursos todas aquellas funciones particulares del microcontroladores que pueden considerarse como un modulo que funciona de forma independiente dentro del microcontrolador. Algunos de estos recursos son completamente necesarios para su funcionamiento, como es el caso del reloj, la gestin de la memoria, la gestin de las interrupciones y la gestin de los puertos. Otros de los recursos que se integran en los microcontroladores, son especficos y dedicados en funcin del microcontrolador, dependiendo de familia, gama, funcionalidad, fabricante, etc. En el caso del microcontrolador PIC18F4550 los recursos que se integran son los siguientes: Procesador (core): modulo principal del microcontrolador, es el encargado de ejecutar las instrucciones (cdigo de programa). Reloj (oscilador): es un recurso necesario para el funcionamiento de cualquier microcontrolador o procesador. El reloj ser el modulo encargado de generar y proporcionar las seales de reloj al resto de mdulos del sistema. Es la fuente de reloj quien sincronizar todos las actividades del microcontrolador. Lectura de la memoria, ejecucin de las instrucciones, El reloj es una de las partes fundamentales para el funcionamiento del microcontrolador, al igual que cualquier sistema digital. Memoria de programa (memoria flash): es uno de los mdulos vistos en el tema_2. Es el modulo encargado de almacenar el cdigo de programa. Memoria de datos: este modulo tambin se ha visto en el tema_2, es el modulo encargado de gestionar la memoria no voltil del microcontrolador, donde se almacenen las variable globales y temporales. Memoria EEPROM: generalmente la mayora de microcontroladores, a dems de la memoria de cdigo (FLASH) y la memoria de datos (DRAM), tambin suelen integrar una memoria de datos no voltil de tipo EEPROM. Esta memoria permite guardar el valor de variables an que el microcontrolador se quede sin alimentacin. A diferencia de las memorias anteriores (FLASH y DRAM), esta memoria no se encuentra conectada directamente al bus de datos y direcciones, de forma que no suele utilizarse para el funcionamiento habitual del procesador. Por lo contrario esta memoria se gestiona como un modulo de memoria independiente, y se utiliza principalmente para guardar el valor de variables o parmetros de configuracin que pueden cambiar en el tiempo, y los cuales deben de guardarse en memoria an que el microcontrolador se quede sin alimentacin. Interrupciones: es uno de los principales recursos para un correcto funcionamiento del microcontrolador. Este modulo se encarga de gestionar todas las fuentes de interrupcin que tiene el microcontrolador. Generalmente la mayora de mdulos o recursos del microcontrolador generan interrupciones (GPIOs, Temportizadores, UART,). Este modulo agrupa las entradas de todas las lneas de interrupcin del procesador y se encarga de gestionar todas y cada una de ellas; permite habilitar o deshabilitar la funcin de interrupcin y tambin permite establecer prioridades de ejecucin entre ellas.

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador.

2/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos Puertos de entrada y salida (GPIO): conocidos como GPIOs, as se denominan los terminales del microcontroladores pines, que permiten leer y generar seales. En la mayora de microcontroladores, casi todos los pines del microcontrolador pueden utilizarse como puertos de entrada o salida: exceptuando los terminales de alimentacin, referencias de tensin y los terminales dedicados al oscilador para el modulo del reloj. El resto de pines, permiten implementar la funcionalidad de entrada o salida digital, a dems de compartir otras funciones. Temporizadores (timer_X): son los recursos que permiten generar bases de tiempo, de forma que el microcontrolador puede ejecutar funciones o controlar perifricos de una forma deterministica. Los mdulos de tiempo suelen utilizar las fuentes de tiempo del reloj o bien seales exteriores. En el caso del PIC18F4550, este microcontrolador integra 4 modulo independientes de tiempo, que van del TIMER_0 al TIMER_3. Modulo PWM y CCP: son recursos especiales que permiten generar seales de salida de frecuencia de tipo PWM y tambin permiten implementar la captura de seales digitales pulsantes. Comunicacin serie EUART: modulo que implementa los recursos necesarios para implementar una comunicacin de tipo UART (Universal Asincron Reciver Transmiter), como puede ser un bus de tipo RS-232. Este modulo permite que el micro implementar este tipo de comunicacin de una forma rpida y sencilla; el modulo dispone de los recursos lgicos que permiten gestionar las seales fsicas de forma que el microcontrolador solo deba de encargarse de configurar el modulo y a partir de aqu enviar y recibir datos. El resto de protocolo necesario para la comunicacin de los datos a nivel de seales fsicas, ira a cargo del modulo. Comunicacin Serie Sincrona (SPI): modulo que dispone de todos lo recursos necesarios para implementar una comunicacin del tipo SPI; comunicacin que permite comunicar informacin entre 2 dispositivos digitales a nivel de placa. Igualmente que en el caso de la UART, el modulo SPI integra todos los recursos lgicos y de control a bajo nivel, de forma que el cdigo de programa del microcontrolador solo debe de encargarse de configurar el modulo y a partir de este punto deber de encargarse de escribir y leer. Comunicacin USB: modulo integrado en el microcontrolador que permite al microcontrolador conectarse a un dispositivo host, utilizando el bus de comunicacin USB. Este modulo permite interconectar directamente el microcontrolador PIC con otros dispositivos que dispongan de este misma tecnologa de comunicacin (como puede ser un ordenador). Modulo de entradas analgicas (ADC): internamente este microcontrolador integra un conversor analgico - digital que le permite leer el valor de seales analgicas, entre los valores (Vref+ y Vref-). Otros recursos de funciones especiales: a dems de los recursos descritos hasta el momento el microcontrolador PIC18F4550, tambin implementa otros recursos de funciones mas especiales como son: o o o Comparacin de seales analgicas. Modulo de deteccin de alto y bajo nivel de tensin de alimentacin (HLVD). Sistema de comunicacin de perifricos de tipo paralelo sncrono (SSP)

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador.

3/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos

EL RELOJ
Todo microcontrolador requiere de un circuito que le indique la velocidad en que debe de procesar la informacin (ejecucin de una instruccin, lectura de las memorias, etc), son operaciones que necesitan de una base de tiempo que sincronice las operaciones, al igual que cualquier otro sistema digital. El modulo de reloj (o tambin conocido como oscilador), es el encargado de genera las seales internas del microcontrolador que establecern la velocidad de la mayora de sistemas y recursos internos del microcontrolador; siendo unos de los mdulos con la funcin ms importante para el buen funcionamiento del microcontrolador. Este modulo se encargar de proporcionar la seales de referencia de tiempo, para el funcionamiento de los siguientes mdulos : Buses internos de comunicacin. Velocidad de ejecucin de las instrucciones del procesador (core). Base de tiempo para la mayora de recursos perifricos1: UART, SPI, USB, Temporizadores,

En el caso de los dispositivos PIC18F4550, estos pueden trabajar en diez modalidades diferentes de reloj. Lo que incluye que algunas de ellas sean combinacin de modalidades bsicas. Esta gran variedad de configuraciones se debe a la implementacin del recursos del modulo USB, el cual requiere de una fuente de reloj rpida y estable que pueda trabajar hasta 48 Mhz (para el caso de la implantacin del USB de alta velocidad).
USB clock Cristal o Resonador primario OSC2 OSC1
CONFIG1L CONFIG1H OSCCON OSCTUNE

CPU clock Perifericos Fuente de reloj para otros mdulos WDT / PWRT / FSCM
Modulo de RELOJ

Cristal o Resonador secundario

T1OSO T1OSI

Figura 1: bloque descriptivo del modulo de reloj.

A nivel de sistema2, el modulo de reloj dispone de 2 entradas externas para poder conectar un cristal o resonador que proporcione la seal de referencia del reloj. Tras procesar la seal de reloj externa o bien tomando una seal de reloj interna, el modulo generar 4 seales de reloj distintas. Estas cuatro seales de reloj servirn como: 1) USB clock: fuente de reloj independiente para el modulo que controla el puerto USB, integrado en el microcontrolador.

Aunque algunos de estos recursos perifricos puedan dispone de una base de tiempo exterior independiente. Para ms informacin sobre la arquitectura interna del modulo de reloj consultar la pgina 24 del datasheet del PIC18f4550 (ref: DS39632E).

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador.

4/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos 2) CPU: clock;: fuente de reloj independiente para el control de la CPU y los buses internos de comunicacin (memorias, ALU, etc). La frecuencia de este reloj nos determinar el tiempo de ciclo que tarda la CPU en ejecutar una instruccin. 3) Perifricos: fuente de reloj bsica que utilizaran la mayora de perifricos para ejecutar sus funciones. Este el caso de los mdulos de la UART o SPI, mdulos que utilizarn este reloj como referencia para su operacin. 4) Fuente de reloj para otros mdulos: fuente de reloj alternativa que podrn utilizar casi todos los mdulos de periferia del microcontrolador, exceptuando: USB y CPU. Este fuente de reloj permite generar una segunda base de tiempo, de forma que no todos los mdulos deban de utilizar la misma base de timepo. 5) WDT, PWRT, FSCM: fuente de reloj dedicada para proporcionar una base de tiempo a recursos especficos que controlan la operatividad del microcontrolador; como es el caso de: a. WDT (Watch Dog Timer): recurso encargado de controlar el tiempo de ciclo del microprocesador. En el caso de que el tiempo de ciclo de programa, sea superior al tiempo configurado en el WDT, el WDT generar una seal de reset que forzar el microcontrolador a reiniciar su operatividad; de esta forma puede evitarse que el programa del microcontrolador se quede en un bucle sin salida. b. PWRT (Power Up Timer): recurso encargado de mantener el microcontrolador en el estado de reset tras su alimentacin ( Power-Up, es la accin de pasar del estado de <no alimentacin>, al estado de <alimentacin>). El PWRT permite mantener el microcontrolador en el estado de RESET tras un accin de POWER-UP, de esta forma puede establecerse un tiempo de demora en el arranque del microcontrolador, para asegurar que la fuente de reloj y la alimentacin son estables. c. FSCM (Fail Safe Clock Monitor): recurso del microcontrolador que controla el estado de las seales de reloj externas. Este recurso permite cambiar la fuente del reloj de referencia de una seal externa a una interna en el caso de que la externa fallase. La seal de reloj interna, es generada directamente por el microcontrolador a partir de de oscilacin RC interno. La configuracin del funcionamiento del modulo de reloj, as como la seleccin de las frecuencias de oscilacin para cada una de las fuentes internas, se llevar a termino mediante la configuracin de los registros: CONFIG1L, CONFIG1H, OSCCON, OSCTUNE). MODOS DE TRABAJO DEL MODULO DE RELOJ El modulo de reloj implementado en los microcontroladores 18F4450, permite que este pueda trabajar en 10 modalidades destintas de reloj, su seleccin deber de realizarse utilizando los bits <FOSC[3:1]> que se encuentran en el registro <CONFIG1H>. Las 10 modalidades de trabajo son las siguientes:

TIPO XT HS HSPLL

DESCRIPCIN Seleccin de fuente de reloj externa provinente de un cristal o resonador. Seleccin de fuente de reloj externa provinente de un cristal o resonador de alta frecuencia. Seleccin de fuente de reloj externa provinente de un cristal o resonador de alta frecuencia, con habilitacin del PLL. 5/25

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador.

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos
EC ECIO ECPLL ECPIO INTHS INTIO Fuente de reloj externa con frecuencia de oscilacin a la salida = Fosc/4. Fuente de reloj externa con frecuencia de oscilacin a la salida = Fosc/4 y con salida de una seal de reloj de referencia en el terminal PA6. Fuente de reloj externa con frecuencia de oscilacin a la salida = Fosc/4, con uso del PLL y salida de una seal de reloj de referencia en el terminal PA6. Combinacin de los modos: ECIO & HSPLL. Uso del oscilador interno para todos los mdulos del microcontrolador, exceptuando el USB el cual utilizar el tipo HS. Uso del oscilador interno para todos los mdulos del microcontrolador, exceptuando el USB el cual utilizar el tipo EC y con salida de seal de reloj de referencia en el terminal RA6. Uso del oscilador interno para todos los mdulos del microcontrolador, exceptuando el USB el cual utilizar el tipo EC y con salida de seal de reloj de referencia = Fosc/4 en el terminal RA6. Tabla 1: Modos de reloj para el PIC18F4550.

INTCKO

Bsicamente existen tres fuentes de reloj que pueden utilizarse para generar las seales del reloj de referencia; estas tres fuentes son: Oscilador o resonador: uso de un oscilador o un resonador externo como fuente de reloj base para el modulo del reloj. El oscilador o resonador deber conectase entre los terminales <OSC1> y <OSC2> del microcontrolador. En esta configuracin el microcontrolador habilitar una etapa para la alimentacin y el control del oscilador. Esta etapa estar internamente conectada entre los terminales <OSC1> y <OSC2> del microcontrolador. El uso de un oscilador o resonador como fuente de reloj, requerir de un tiempo de inicializacin del oscilador o resonador, tras los estados de: Reset, Power-On, o tras la recuperacin del estado de Sleep. Seal de reloj externa: se proporcionar al microcontrolador una seal de reloj provinente de una fuente activa. En este caso solo deber de conectarse la seal de reloj en la entrada OSC1 del microcontrolador, y la entrada OSC2 se dejar libre. Reloj de referencia interno: no es necesario proporcionar una fuente de reloj externa para el funcionamiento normal del microcontrolador. An as ser necesario conectar un oscilador / resonador o una fuente de reloj externa, en el caso de querer utilizar las funciones de USB.

Adicionalmente a las fuentes de reloj anteriores, los microcontroladores PIC18F4550 tambin disponen de una fuente de oscilacin secundaria a partir del recurso del temporizado n1 (Timer1). Para su uso, deberan de utilizarse los terminales de conexin <T1OSO> y <T1OSI>; igualmente como la fuente primaria de reloj, en estos terminales podrn conectarse un oscilador, un resonador, o bien una seal de reloj activa. Generalmente esta fuente de reloj se utiliza como base de tiempo para recursos como el RTC (Real Time Clock). Uso del oscilador en modo XT Es el modo de oscilacin ms utilizado en la mayora de aplicaciones de microcontroladores. Su implementacin se basa en la utilizacin de un cristal o resonador cermico que se conecta entre los terminales <OSC1> y <OSC2> del microcontrolador, como se muestra en la figura siguiente.

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador.

6/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos

Figura 2: ejemplo del uso de un cristal como fuente de reloj (modo XT).

Seleccionaremos este modo de funcionamiento cuando, en el hardware del sistema tengamos implementado un cristal o un resonador, que oscilen a una frecuencia mxima de 4Mhz. La implementacin de cualquier cristal o resonador superior a los 4Mhz, requerir del uso del modo HC. Uso del oscilador en modo HS Seleccionaremos el modo de trabajo HS, en los casos siguientes: Cuando a nivel de hardware tenemos implementado un cristal o resonador de frecuencia superior a 4 Mhz. Los microcontroladores de la familia PIC18Fxxxx, permiten la conexin de cristales y relojes de frecuentas hasta los 20 Mhz. Cunado a nivel de hardware tenemos implementado otro sistema digital que nos genera una seal cuadrada. Este sea puede ser generada por algun otro sistema digital o bien por un reloj activo. En este caso la configuracin que tendremos a la entrada del reloj ser como la que se muestra en la figura siguiente.

Figura 3: ejemplo del uso de un cristal como fuente de reloj (modo HS).

Debemos de tomar en consideracin que el uso de una seal digital activa, solo requiere de la conexin de seal en uno de los terminales de conexin del microcontrolador. En esta configuracin se conectar la seal de reloj en el terminal <OSC1>, dejando el terminal <OSC2> sin funcionalidad. Uso del oscilador en modo EC Seleccionaremos el modo de trabajo EC, solo cuando el modulo del oscilador este alimentado por una seal de reloj activa, conectada en el terminal de entrada <OSC1> y cuando queramos utilizar terminal de <OSC2> como salida, en el cual tendremos la frecuencia de entrada dividida por 4.

Figura 4: ejemplo del uso de un cristal como fuente de reloj (modo HS).

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador.

7/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos Uso del oscilador en modo INT Esta modalidad la seleccionaremos cuando no tengamos ninguna fuente de reloj exterior externa y utilicemos el sistema RC interno como seal del reloj. CONTROL DEL OSCILADOR El funcionamiento del modulo de reloj del microcontrolador se lleva a cabo utilizando los registros siguientes: CONFIG1L y CONFIG1H: usaremos este registro para configurar el modo de funcionamiento del microcontrolador. Tambin nos servir para seleccionar los valores de los divisores de la seal del reloj que nos permitir configurar la frecuencia de reloj del USB. Este registro deber de configurarse durante la programacin del microcontrolador y mantendr su valor hasta que vuelva a reprogramarse. OSCCON: principalmente usaremos este registros para seleccionar el modo activo de funcionamiento del modulo de reloj. Tambin se utiliza par controlar los cambios entre modos de funcionamiento del reloj. OSCTUNE: solo se utiliza para calibrar la frecuencia del microcontrolador cuando se utiliza el oscilador interno.

Registro OSCCON El registro OSCCON, controla la mayor parte de las caractersticas de funcionamiento del reloj, tanto en modo de operacin normal como en alguno de los modos de gestin de energa. En este registro encontraremos los bits <SCS1> y <SCS0> que se utilizarn para seleccionar la fuente de reloj principal que utilizar el microcontrolador. Las fuentes de reloj de que dispone el microcontrolador para seleccionar sern: La fuente de reloj <FOSC3:FOSC0>. primaria que se seleccionar mediante los registros

La fuente de reloj secundaria provinente del temporizador n1. Fuente de oscilador interna.

El cambio de seleccin de la fuente del reloj ser casi inmediata tras la escritura de los bits <SCS1> y <SCS0>; estos bits sern reseteados a su valor inicial tras cualquier accin que provoque un reset en el microcontrolador. Los bits <IRCF2:IRCF0>, se utilizan para seleccionar la frecuencia de salida del oscilador interno; por defecto el oscilador interno genera una seal de reloj de frecuencia 8Mhz (velocidad mxima que puede seleccionarse utilizando el oscilador interno). El uso de los bits <IRCF2:IRCF0>, nos permitir reducir la frecuencia de esta seal de reloj, ofreciendo un rango de 8 frecuencias comprendidas entre los 31Khz y los 8Mhz. En el caso de utilizar el oscilador interno como seal de reloj para el procesador del microcontrolador, el cambio en la seleccin de la frecuencia, tendr cambio inmediato. Tras un estado de reset, el microcontrolador estar configurado para trabajar con el oscilador interno, configurado a 1Mhz. En el caso de seleccionar la frecuencia interna de 31 khz, el bit <INTSRC>, permite seleccionar una frecuencia adicional de 31.25 Khz, como fuente de reloj para el procesador del microcontrolador. La seleccin de este valor de reloj adicional (32.15 khz), se realizar mediante la siguiente configuracin: bits <IRCF2:IRCF0> = b111 y el bit INTSRC = 1. En el caso de los bits
Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador.

8/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos <IRCF2:IRCF0> = b111 y el bit INTSRC = 1, la frecuencia del oscilador interno ser de 31 Khz. INTRC es la fuente de reloj interna procedente de un sistema RC interno del microcontrolador, e independientemente del valor del bit INTSRC, esta es la fuente de reloj que utilizan los recursos del WDT y el FSCM. Podremos consultar la fuente de reloj que alimenta al procesador, consultando el estado de los bits <OSTS>, <IOFS> y T1RUN. El bit <OSTS> servir para indicarnos que el tiempo de inicializacin del reloj interno ha expirado y que el reloj interno es la fuente de reloj seleccionada como base de tiempo para el procesador. El bit <IOFS> servir para indicarnos que el oscilador interno es estable. Finalmente consultaremos el estado del bit <T1RUN>, para saber cuando el procesador esta utilizando la salida del temporizador n 1 como base de tiempo; el bit <T1RUN> est ubicado en el bit 6 del registro <T1CON> (registro perteneciente a los registros del temporizador 1). Cuando el procesador esta trabajando en alguno de los modos especiales de gestin de energa, solo uno de los bits anteriores puede estar seleccionado a la vez. Estos 3 bits solo podrn estar los tres con el valor 0, bajo alguna de las siguientes circunstancias: en el caso de que el oscilador interno este inicindose (start-up time), o bien cunado el oscilador interno RC esta en modo de (31.25 Khz). Finalmente el bit <IDLEN>, servir para seleccionar el estado a que pasar el microcontrolador tras la ejecucin de la instruccin SLEEP. Los dos modos posibles son: - Modo Idle: modo donde el procesador del microcontrolador esta parado, pero el resto de los perifricos continan funcionando normalmente (si estn habilitados). - Modo Sleep: modo donde todos los recursos del microcontrolador (procesador y perifricos), pasan a estar parados. En detalle, los bits pertenecientes al registro OSCCON y sus funciones resumidas se detallan a continuacin:
Operacin Nombre Estado tras reset bit 7 R/W IDLEN 0 bit 6 R/W IRCF2 1 bit 5 R/W IRCF1 0 bit 4 R/W IRCF0 0 bit 3 R OSTS bit 2 R IOFS 0 bit 1 R/W SCS1 0 bit 0 R/W SCS0 0

- IDLEN: Habilita el estado de IDLE. 1 = El dispositivo entrar en modo IDLE tras la ejecucin de la instruccin SLEEP 0 = El dispositivo pasar al estado de SLEEP, tras la ejecucin de la instruccin. - IRCF2:IRCF0: bits para la seleccin de la frecuencia interna. 111 = 8 MHz 110 = 4 MHz 101 = 2 MHz 100 = 1 MHz 011 = 500 kHz 010 = 250 kHz 001 = 125 kHz 000 = 31 kHz (o bien 31.25 Khz con la seleccin del bit INTRC3)

INTRC es un bit perteneciente al registro OSCTUNE.

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador.

9/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos - OSTS: indica el estado de time-out del oscilador interno. 1 = El tiempo de time-out ha finalizado y el oscilador primario esta funcionando. 0 = El tiempo de inicializacin del oscilador an no ha finalizado, el oscilador primario an no esta a punto. - IOFS: indica el estado del oscilador interno 1 = Frecuencia estable. 0 = Frecuencia no estable. - SCS1:SCS0: sirven para seleccionar la fuente de reloj del sistema. 1X = oscilador interno. 01 = Temporizador n 1. 00 = oscilador primario. Registro OSCTUNE El oscilador interno del microcontrolador, esta formado por un circuito RC integrado en el microcontrolador. Este circuito es calibrado durante la fabricacin del microcontrolador, este ajuste se realiza para que este genere una seal de reloj con una frecuencia de 8.0 Mhz; an as su valor podr ser ajustado mediante el registro OSCTUNE, lo que nos permitir afinar su frecuencia en los momentos que este produzca una desviacin de los 8.0 Mhz. Tras la modificacin de este registro, el reloj adoptar su nuevo valor en el intervalo de 1ms, durante este intervalo de tiempo el cdigo de aplicacin seguir ejecutndose, pero no habr ninguna indicacin que nos indique el momento en que se produce el cambio. Las funciones implementadas en el registro OSCTUNE, son las siguientes:
Operacin Nombre Estado tras reset bit 7 R/W INTSRC 0 bit 6 bit 5 bit 4 R/W TUN4 0 bit 3 R TUN3 0 bit 2 R TUN2 0 bit 1 R/W TUN1 0 bit 0 R/W TUN0 0

- INTSRC: bit de seleccin de la fuente de reloj interna de 31.25Khz. 1 = El dispositivo entrar en modo IDLE tras la ejecucin de la instruccin SLEEP 0 = El dispositivo pasar al estado de SLEEP, tras la ejecucin de la instruccin. - Bit 6 y 5: no tienen ninguna funcin. - TUN4:TUN0: bits para la calibracin de la frecuencia interna. 01111b = Frecuencia mxima de calibracin. 00000b = Centro de la frecuencia interna calibrada. 10000b = Frecuencia mnima de calibracin. Ser necesario calibrar el oscilador interno debido a desviaciones que puedan producirse debido a derivas de temperatura o bien derivas en la tensin de alimentacin; justamente se compensaran estos efectos ajustando su calibracin mediante los bits TUN4:TUN0. Para ello en el cdigo de aplicacin debern de implementarse las funciones que permitan reconocer la deriva de la frecuencia en el oscilador interno. La implementacin de estas funciones podrn realizarse de varias formas, como puede ser utilizando los temporizadores como valores de tiempo de
Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 10/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos referencia, utilizando el recursos de Capture Compare o bien utilizando los errores que puedan generarse en la EUSART (para ms informacin sobre como implementar estas funciones, puede consultarse el punto 2.2.5.4 Compensating for INTOSC drift- del documento DS3962E, datasheet del microcontrolador PIC18F4550). Registros CONFIG1L y CONFIG1H CONFIG1L
Operacin Nombre Estado tras reset bit 7 bit 6 bit 5 R/P USBDIV bit 4 R/P CPUDIV1 0 bit 3 R/P CPUDIV0 0 bit 2 R/P PLLDIV2 0 bit 1 R/P PLLDIV1 0 bit 0 R/P PLLDIV0 0

- Bit 7 y 6: no tienen ninguna funcin. - USBDIV: permite seleccionar la fuente de reloj para el modulo USB (este bit solo tiene sentido utilizarlo cuando se selecciona el USB para que trabaje a alta velocidad FullSpeed: bit FSEN del registro UCFG). 1= 0= el reloj del modulo USB viene de la salida de 96Mhz del recurso PLL, y esta divido por 2. el reloj del USB viene directamente del oscilador primario sin estar escalado.

- CPUDIV1:CPUDIV0: permiten escalar la fuente de reloj que alimentan el procesador; la funcin de estos bits, depender del modo de trabajo en que este configurado el modulo del reloj. a) Si el modulo de reloj esta configurado para trabajar en modo: XT, HS, EC o ECIO. 11b = el reloj del procesador ser igual al valor del oscilador primario dividido por 4. 10b = el reloj del procesador ser igual al valor del oscilador primario dividido por 3. 01b = el reloj del procesador ser igual al valor del oscilador primario dividido por 2. 00b = el reloj del procesador ser igual al valor del oscilador (sin divisin). b) Si el modulo de reloj esta configurado para trabajar en modo: XTPLL, HSPLL, ECPLL o ECIO. 11b = el reloj del procesador ser igual a 96 Mhz del PLL, dividido por 6. 10b = el reloj del procesador ser igual a 96 Mhz del PLL, dividido por 4. 01b = el reloj del procesador ser igual a 96 Mhz del PLL, dividido por 3. 00b = el reloj del procesador ser igual a 96 Mhz del PLL, dividido por 2. - PLLDIV2:PLLDIV0: permite escalar la entrada de la fuente de reloj que alimentan el PLL. 111b = divide la entrada por 12 (la entrada del oscilador debe de ser de 48Mhz). 110b = divide la entrada por 10 (la entrada del oscilador debe de ser de 40Mhz). 101b = divide la entrada por 6 (la entrada del oscilador debe de ser de 24Mhz). 100b = divide la entrada por 5 (la entrada del oscilador debe de ser de 20Mhz). 011b = divide la entrada por 4 (la entrada del oscilador debe de ser de 16Mhz). 010b = divide la entrada por 3 (la entrada del oscilador debe de ser de 12Mhz). 001b = divide la entrada por 2 (la entrada del oscilador debe de ser de 8Mhz). 000b = divide la entrada por 0 (la entrada del oscilador debe de ser de 4Mhz).
Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 11/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos CONFIG1H
Operacin Nombre Estado tras reset bit 7 IESO bit 6 FCMEN bit 5 R/P bit 4 R/P 0 bit 3 R/P FOSC3 0 bit 2 R/P FOSC2 0 bit 1 R/P FOSC1 0 bit 0 R/P FOSC0 0

- INTSRC: permite habilitar el cambio de la fuente de reloj al oscilador interno en el caso de que el modulo de reloj detecte fallo en la fuente de reloj externa. 1 = habilita el procesador para que cambie la fuente de reloj 0 = deshabilita la funcin de cambio de fuente de reloj. - FCMEN: permite habilitar la funcin de supervisn de fallo en la fuente de reloj externa. - Bit 5 y 4: no tienen ninguna funcin. - FOSC3:FOSC0: permite seleccionar la fuente que utilizar el modulo del reloj 111xb = selecciona el uso del oscilador HS y habilita el PLL. 110xb = selecciona el uso del oscilador HS. 1011b = selecciona el uso del oscilador interno como fuente de reloj para el sistema y el oscilador HS para el USB. 1010b = selecciona el uso del oscilador interno como fuente de reloj para el sistema y el oscilador XT para el USB. 1001b = selecciona el uso del oscilador interno como fuente de reloj para el sistema y el oscilador EC para el USB. El valor del reloj del sistema estar presente en el terminal RA6 del microcontrolador. 1000b = selecciona el uso del oscilador interno como fuente de reloj para el sistema y el oscilador EC para el USB. 0111b = selecciona el uso del oscilador EC, habilita el PLL y activa la salida del reloj en el Terminal RA6. 0110b = selecciona el uso del oscilador EC y habilita el PLL. 0101b = selecciona el uso del oscilador EC y activa la salida del reloj en el Terminal RA6. 0100b = selecciona el uso del oscilador EC (sin PLL ni salida en el RA6). 001xb = selecciona el uso del oscilador XT y habilita el PLL. 000xb = selecciona el uso del oscilador XT. Los registros <CONFIG1H> y <CONFIG1L> se encuentran ubicados en la zona de memoria 0x300000 y 0x300001, y su programacin solo podr realizarse durante la programacin del microcontrolador y no ser posible realizarla en tiempo de ejecucin. Configuraremos su valor utilizando la directiva <#pragma> y declarndolos como una constante de tipo <rom>.
// Configuracin de los registros CONFIG #pragma romdata config=0x300000 rom const char CONFIG1L = 0x00; rom const char CONFIG1H = 0x80; #pragma default Figura 5: Ejemplo para la configuracin de los registros CONFIG.

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 12/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos

LAS INTERRUPCIONES
Las interrupciones son otro de los recursos bsicos e indispensables para el funcionamiento del microcontrolador. La funcin de una interrupcin es: interrumpir al cdigo de programa que se este ejecutado para atender a un evento que valoramos como prioritario. El microcontrolador dispone de mltiples fuentes de interrupcin: temporizadores, todos los perifricos (UART, SPI, GPIO,). El microcontrolador PIC18F4550 dispone de varias fuentes de interrupcin, y tambin permite establecer prioridades en su ejecucin. Establecer prioridades en las interrupciones permite que unas interrupciones tengan o no, la capacidad de interrumpir a otros interrupciones cuando estas ultimas se estn atendiendo. En el caso de los microcontroladores de microchip, existen dos niveles para dar mayor o menor prioridad a las interrupciones. Estos dos niveles se denominan: High Priority level (nivel de mayor prioridad). Low Priority level (nivel de menor prioridad).

Las interrupciones que se asignen al nivel de mayor prioridad, tendrn la capacidad de interrumpir la ejecucin de las interrupciones que menor prioridad, en el caso de que cuando se active una interrupcin de alta prioridad, otra interrupcin de menor prioridad se estuviese ejecutando. Para controlar el funcionamiento de las interrupciones el microcontrolador PIC18F4550 dispone de los siguientes 10 registros:
REGISTRO RCON FUNCIN Contiene las marcas de interrupcin por: RESET, WDT, Power-Down, Power-On y Brown-out. Permite habilitar de forma general los dos niveles de prioridad para las interrupciones. Permite habilitar y deshabilitar caractersticas generales de las interrupciones, as como controla la habilitacin de las interrupciones: temporizador_0, interrupcin externa 0 y interrupcin del puerto B. En el mismo registro tambin se encentran las marcas de suceso que nos indican cuando entra una de las tres interrupciones anteriores. Permite configurar el tipo de interrupcin y su prioridad, para las interrupciones de: temporizador_0, interrupcin externa (0, 1 y 2) y del puerto B. Controla la habilitacin, nivel de prioridad y contiene la marca para las interrupciones externas 1 y 2. Contienen les marques de interrupcin para cada uno de los perifricos que disponen de interrupcin. Estos registros contienen los bits que permiten habilitar cada una de las interrupciones de los perifricos de forma individual. Permiten configurar la prioridad (alta / baja), para cada una de las interrupciones de los perifricos. Estos registros solo tendrn funcin en el caso de que el bit IPEN del registro RCON este habilitado.

INTCON

INTCON2 INTCON3 PRI1 PRI2 PIE1 PIE2 IPR1 IPR2

Tabla 2: Conjunto de registros que controlan las interrupciones en el PIC18F4550.

Las marcas de interrupcin nos indican cuando ha sucedi una interrupcin, generalmente la esta marca corresponde a un bit en alguno de los registros descritos anteriormente. Los bits de marca se ponen a nivel alto (1 lgico) para indicar el suceso de la fuente de interrupcin a que corresponden. En el caso el valor de estos bits siempre tienen nivel bajo (0 lgico). Cada una de las fuentes de interrupcin dispone de 3 bits para su control, estos bits son: Bit de marca (conocido como flan): nos indica que la interrupcin ha sucedido. Bit de habilitacin: este bit habilita la funcin para que al suceder la interrupcin el cdigo de programa interrumpa su ejecucin y pase a atender las interrupciones. Bit de seleccin de la prioridad de la interrupcin: Alta o Baja.

Las fuentes de interrupcin que dispone el microcontrolador PIC18F4550 son las siguientes:
Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 13/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos
ACRNIMO TMR0 TMR1 TMR2 TMR3 RB INT0 INT1 INT2 SPP AD RC TX SSP CCP1 CCP2 OSCF CM USB EE BCL HLVD FUNCIN Interrupcin por desbordamiento del temporizador n 0. Interrupcin por desbordamiento del temporizador n 1. Interrupcin por alcanzar el valor de tiempo pre-fijado. Interrupcin por desbordamiento del temporizador n 3. Interrupcin por cambio de valor en alguna de las entradas del puerto B (RB4 ~ RB7) Interrupcin externa n0. Coincide con uno de los terminales del MCU. Interrupcin externa n1 Coincide con uno de los terminales del MCU. Interrupcin externa n2. Coincide con uno de los terminales del MCU. Interrupcin por lectura o escritura del puerto parallelo. Interrupcin por fin de conversin en el conversor Analogico-Digital. Interrupcin por la recepcin de un byte en el puerto serie UART. Interrupcin por fin de transmisin del ultimo byte en el puerto serie UART. Interrupcin por finalizacin de una accin de lectura o escritura en el puerto SPI. Interrupcin del modulo de captura y comparacin 1. En funcin de la configuracin del mdulo CCP1, est flan tendr uno o otra funcin. Interrupcin del modulo de captura y comparacin 1. En funcin de la configuracin del mdulo CCP1, est flan tendr uno o otra funcin. Interrupcin que se genera al detectar fallo en la seal del oscilador externo. Interrupcin del comparador. Interrupcin por sucesin de uno de los eventos del USB. Interrupcin final de escritura de la EEPROM. Interrupcin por colisin en el bus SPI o I2C. Interrupcin por deteccin de baja tensin de alimentacin. Tabla 3: Listado de interrupciones del PIC18F4550.

OPERATIVIDAD DE LAS INTERRUPCIONES Para habilitar la funcionalidad de priorizar las interrupciones en dos niveles, deber de realizarse mediante el bit <IPEN> del registro <RCON.7>. En el momento que habilitamos la priorizacin de las interrupciones, existirn dos bits (<GIEH> y <GIEL>), que permitirn habilitaran las interrupciones de forma general. Utilizando el bit <GIEH> del registro <INTCON.7>, podremos habilitar de forma global todas las interrupciones que tienen el bit de prioridad activado (lgico 1). Igualmente utilizando el bit <GIEL> del registro <INTCON.6>, podremos habilitar todas las interrupciones que tienen el bit de prioridad desactivado. Igualmente podremos deshabilitar cada una de las interrupciones de forma global actuando en su bit de habilitacin. Al generarse un evento de interrupcin, si su accin est activa (mediante los correspondientes bits de interrupcin), el cdigo de programa se parar y el procesador pasar a ejecutar el cdigo ubicado en las posiciones de memoria 0x000008 o 0x000018. En funcin de la prioridad configurada por el evento que ha generado la interrupcin, el cdigo de programa pasar a ejecutar las instrucciones de una u otra zona de memoria. En el caso de que la interrupcin que genere el evento este configurada de prioridad alta, se pasar a ejecutar el cdigo de la direccin de memoria 0x000008, en el caso contrario si la interrupcin esta configurada como de baja prioridad, el procesador pasar a ejecutar el cdigo de programa de la posicin de memoria 0x000018. En el caso de que no queramos disponer de priorizacin en la ejecucin de las interrupciones, podemos deshabilitar el bit <PIEN> del registro <INTCON.7> En este caso debemos de tener en cuenta que cambia la funcin de los bits <GIEH - INTCON.7> y del <GIEL - INTCON.6>. En este caso la funcin de estos bits ser: <GIEH - INTCON.7> habilitar o deshabilitar todos las interrupcin. <GIEL - INTCON.6> habilitar o deshabilitar todos las fuentes de interrupcin procedentes de los perifricos. En este caso al no disponer de prioridad en las interrupciones, el programa pasar siempre a ejecutar el cdigo de programa de la zona de memoria 0x000008.

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 14/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos En el momento que salta una interrupcin el procesador deshabilita los registros correspondientes de forma que no pueda producirse generarse otra interrupcin, mientras se esta atendiendo a esta. En el caso de que la prioridad de interrupciones no este habilitada <IPEN = 0>, se deshabilitar el bit <GIE>, de forma que quedarn todas la interrupciones deshabilitadas. En el caso de que la prioridad de interrupciones esta habilitada, s el evento de interrupcin es de baja prioridad el bit <GIEL> se deshabilitar automticamente, pero en caso de un evento de interrupcin de alta prioridad pasara a ejecutar la interrupcin de mayor prioridad. En el caso de que la interrupcin sea de alta prioridad esta deshabilitar el bit <GIEH> y al mismo tiempo no se permitir una interrupcin de baja prioridad. El proceso que sigue a un evento de interrupcin deber de ser el siguiente:

Cdigo de programa

INTERRUPCIN

Guarda la posicin actual en la PILA

IPEN = 1 ?

Int. de alta prioridad ?

Salta a la posicin de memoria 0x000018

Salta a la posicin de memoria 0x000008

Consulta por POLLING de la fuente de la Int.

Ejecucin del cdigo de interrupcin.

Retorno de la Interrupcin

Figura 6: Diagrama de operatividad de las interrupciones.

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 15/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos El retorno del cdigo de interrupcin, se realiza mediante la instruccin RETFIE; la ejecucin de esta instruccin recupera el valor de posicin de la memoria que ser guardaba en la PILA y vuelve a ejecutar el cdigo a partir de esta posicin de memoria. Igualmente la ejecucin de la instruccin RETFIE habilita de nuevo las interrupciones de forma automtica. La instruccin RETFIE, es una instruccin del ensamblador que podemos ahorrar en el caso de gestionar las interrupciones en C. Para la declaracin de las interrupciones en C, utilizamos la directiva <#pragma>. Utilizando esta directiva declararemos: 1ero) Una zona de cdigo que ubicaremos en la posicin de memoria 0x00008 y donde utilizando las instrucciones de ensamblador llamaremos a las funciones de interrupcin. 2ndo) Una zona de memoria que declararemos como interrupcin y donde ubicaremos la funcin encargada de gestionar las interrupciones. Utilizando este modelo de declaracin la funcin declarada como interrupcin, ya se encarga de incluir la instruccin RETFIE, y simplemente debemos de incluir las instrucciones que mediante polling comprueben las marcas de interrupcin para conocer la fuente que ha generado la interrupcin.
// Cdigo de interrupcin ubicado en la zona #pragma code InterruptVectorHigh = 0x000008 void InterruptVectorHigh(void) { _asm goto InterruptHandlerHigh _endasm } #pragma code // Rutina que Gestiona las interrupciones #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh(void) { if(INTCONbits.TMR0IF){ // TIMER0 . . . // Cdigo INTCONbits.TMR0IF = 0; } If(PIR1bits.TMR1IF){ // TIMER1 . . . // Cdigo PIR1bits.TMR0IF = 0; } } de memoria 0x000008 // Ubicacin del cdigo de interrupcin // en la zona de memoria de las int.

//jump to interrupt routines

por polling

overflow interrupt de interrupcin del TIMER_0

overflow interrupt de interrupcin del TIMER_1

Figura 7: Ejemplo de lectura y escritura del los registros del acumulador del TIMER_0.

INTERRUPCIONES DEL PERIFRICO USB Igual que el resto de perifricos del microcontrolador el mdulo de USB es capaz de generar varias fuentes de interrupcin diferentes. Para la correcta gestin de las comunicaciones USB, es necesario controlar varias Fuentes de interrupcin de este mdulo (estado de las comunicaciones, eventos, errores,), para ello se ha implementado un modulo lgico independiente que controla las interrupciones del USB de forma individual. An as para alterar al microcontrolador del evento de interrupcin del USB y para poder entenderlas se ha asignado un bit general que se encuentra en el registro <PIR2 bit 5>, de forma que cualquiera de los eventos del USB termina habilitando este bit general y generar una interrupcin que nos permitir antever los eventos del USB.
Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 16/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos El modulo de lgica independiente que implemente al mdulos USB, permite habilitar de forma independiente cada uno de los eventos que pueden generar interrupcin, igualmente para cada uno de estos eventos existe un bit que actua como marca indicativa del evento que produce la interrupcin. Para mayor informacin sobre los eventos de interrupcin del USB puede consultarse la seccin 17.5 USB Interrupts del datasheet del microcontrolador PIC18F4550.

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 17/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos

LOS RECURSOS DE TIEMPO


El microcontrolador PIC18F4450, incluye 4 mdulos de temporizacin independientes que permiten controlar funciones del microcontrolador, o bien procesos del cdigo de aplicacin que requieren de un control determinstico. Tres de los cuatro mdulos de temporizacin permiten trabajar en los dos modos bsicos de: Temporizador o Contador. A modo de resumen las principales funciones y caractersticas para cada uno de los mdulos se describe a continuacin:
Temporizador FUNCIN Y CARACTERSTICAS DESTACABLES - Puede trabajar como temporizador o cantador. - Configurable para trabajar en modo 8 / 16 bits. - Las seales de excitacin del contador / temporizador pueden ser: a) Seal externa (conectada al terminal T0CKL). b) Seal del oscilador divida por 4 (Fosc/4). - La interrupcin se produce por desbordamiento del registro de contaje: a) Al pasar de 0xFF > si trabaja en modo 8 bits b) Al pasar de 0xFFFF > si trabaja en modo 16 bits. - Puede trabajar como temporizador o cantador. - Trabaja en 16 bits. - Dispone de una interfaz hacia el exterior para controlar un oscilador, de forma que la seal de este oscilador sea la fuente de tiempo del modulo (cristal / resonador que puede conectarse entre los terminales (T1OSO y T1OSI). - Sus caractersticas permiten que pueda trabajar como RTC (Real Time Clock) o generador de eventos del modulo CCP (Capture Copare) - Las seales de excitacin del contador / temporizador pueden ser: a) Seal externa conectad al terminal T13CKL. b) Seal del oscilador conectado entre los terminales (T1OSO y T1OSI) c) Frecuencia del reloj interno dividido por 4. - La interrupcin se produce por desbordamiento del registro de contaje, al pasar de 0xFFFF. Solo puede trabajar en modo temporizador. La seal de excitacin viene de la frecuencia del oscilador dividida por 4 (Fosc/4). Genera interrupcin al llegar un valor prefijado. Fuente de tiempo para el control PWM. La interrupcin se produce cuando el registro del temporizador alcanza el valor prefijado en registro de comparacin.

TIMER_0

TIMER_1

TIMER_2

TIMER_3

- Tiene las mismas caractersticas que el temporizador <TIMER_1>, comparten la etapa de entrada de seal del oscilador o de la seal externa. - La funcionalidad es independiente del <TIMER_1>, dispone de registros de control e interrupcin propia. - La interrupcin se produce por desbordamiento del registro de contaje, al pasar de 0xFFFF. Tabla 4: resumen de las principales caractersticas de los mdulos de temporizacin del PIC18F4550

Los temporizadores tienen un gran amplio abanico de posibilidades y son indispensables para las aplicaciones ms habituales de los micrcontroaldores. Entre sus funciones mas destacadas podemos encontrar: Control peridico de funciones o eventos que debe de controlar la aplicacin del microcontrolador, como puede ser: o o o Atender un bus de comunicacin. Ejecutar instrucciones de forma peridica. .

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 18/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos Generacin de seales digitales, como puede ser controles PWM. Controlar la ejecucin del cdigo de programa. Generar rutinas de retardo o de temporizacin. Etc.

La principal funcin de los mdulos de temporizacin es controlar tiempos o contar cambios de estado en las seales de excitacin, para ello internamente los mdulos de temporizacin implementan un conjunto de circuitos digitales que incrementan en 1 unidad el valor de un registro interno del microcontrolador. Cada modulo de temporizacin integra varios registros para su configuracin y control de sus funcionalidades. Uno de estos registros es el acumulador del temporizador. Este acumulador se incrementa en 1 unidad cada vez que el modulo detecta un cambio de estado en la seal de excitacin. Este acumulador puede ser de 8 o 16 bits, permitiendo as alcanzar diferentes valores del contador. Al final, la funcin de temporizador es una funcin inherente del contador; s la seal que excita el modulo del temporizador es una seal continua de frecuencia constante, como puede ser la seal de un reloj (cristal, oscilador, frecuencia interna del microcontrolador,), el acumulador incrementar su valor de forma continua y constante, y de esta forma podremos contar tiempos, lo que termina siendo un contador de tiempos = temporizador. EL TEMPORIZADOR 0 <TIMER_0> El temporizador n 0, denominado TIMER_0 en la documentacin, es un modulo que puede trabajar como temporizador o contador y que puede configurarse para que trabaje en modo de 8 o 16 bits. El modo de trabajo (8 o 16 bits), solo influye en la profundidad del registro que se utiliza como acumulado del temporizador / contador. S trabajamos en modo de 8 bits podremos llegar a valores de contador de hasta 255 unidades, mientras que trabajando en modo de 16 bits podremos alcanzar valores de contador hasta 65565 unidades. Adems el <TIMER_0> permite seleccionar la fuente de la seal de excitacin que producir los incrementos en el registro del acumulador, las dos posibles fuentes de que dispone el TIMER_0 son: Fuente externa: seal de excitacin procedente del terminal T0CLK (conectado en el terminal RA6 del PIC18F4550). Lo que permite conectar una seal de excitacin activa procedente de otra fuente (otro sistema digital, reloj activo,) Fuente interna: seal de excitacin procedente del oscilador del microcontrolador. La frecuencia de esta seal ser igual a la frecuencia del oscilador dividida por 4.

El mdulo TIMER_0, tambin integra un divisor de valor configurable, que permite reducir la frecuencia de la seal de excitacin. As finalmente la funcionalidad del TIMER_0, puede reducirse al diagrama de bloques que se muestra a continuacin:

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 19/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos

Figura 8: Diagrama de operatividad del TIMER_0.

Para la configuracin y el control del temporizacin 0 <TIMER_0>, se dispone de un total de 3 registros dedicados ms 3 bits. Bits y registros la funcionalidad de los cuales se resume a continuacin:

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

TMR0L TMR0H INTCON INTCON2 T0CON

Byte bajo del acumulador. Byte alto del acumulador. GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF RBPU INTEDG0 INTEDG1 INTEDG2 TMR0IP TMR0ON T08BIT T0CS T0SE PSA T0PS2 Tabla 5: Registros que intervienen en el control y configuracin del modulo de temporizacin TIMER_0.

INT0IF T0PS1

RBIF RBIP T0PS0

Los registros <TMR0L> y <TMR0H> son los registros de 1 bytes que conforman el acumulador de 8 o 16 bits de temporizador. La configuracin y control del cual se realiza mediante los bits del registro <T0CON>. Los bits <TMR0IE>, <TMR0IF> y <TMR0IP> de los registros <INTCON> y <INTCON2>, permiten controlar los eventos de interrupcin por desbordamiento del temporizador 0. Los bits del registro <T0CON>, tienen la siguiente funcin: TMR0ON: activa o desactiva el temporizador 1 = Activa el funcionamiento del temporizador. 0 = Deshabilita el funcionamiento. T08BIT: configura su operatividad en modo 8 o 16 bits 1 = Trabaja en modo 8 bits. 0 = Trabaja en modo 16 bits. T0CS: permite seleccionar la fuente de la seal de excitacin. 1 = utiliza la fuente externa conectada al terminal <T0CKL>. Incremente el registro de acumular del TIMER_0 <TMR0L & TMR0L >, en el momento que el modulo del TIMER_0 detecta una transicin en la seal de entrada. 0 = utiliza como fuente el reloj interno del microcontrolador. La frecuencia de esta seal ser, la frecuencia del oscilador dividido por 4. TOSE: permite seleccionar que tipo de transicin en la seal externa producira el incremento del acumulador (flanco de subida o flanco de bajada). Este bit solo tiene sentido en el caso de que <T0CS = 1>. 1 = incrementa por flanco de bajada. 0 = incrementa por flanco de subida.
Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 20/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos PSA: permite seleccionar s queremos utilizar el modulo divisor PRESCALE, para dividir la frecuencia del seal de excitacin. 1 = deshabilita el uso del modulo divisor (cada transicin en la seal de excitacin incrementar el acumulador). 0 = habilita el uso del modulo divisor (el valor de la seal de excitacin estar dividida por el valor que seleccionemos en los registros <T0PS2 : T0PS0>. El valor mnimo es 2).

T0PS2 : T0PS0: permite seleccionar el valor de divisin del modulo divisor (solo tiene sentido su uso si <PSA = 0>. Los valores que puede tomar el divisor son: 111b = 256 110b = 128 101b = 64 001b = 4 000b = 2

Funcionamiento de TIMER_0 El temporizador n 0, puede trabajar independientemente como temporizador o contador; utilizando el bit <T0CS>, podremos seleccionar la fuente de excitacin del modulo temporizador. En el caso que el <T0CS=0>, utilizar la seal del reloj como fuente de excitacin, siendo esta una seal continua y de frecuencia constante diremos que el modula trabajara como temporizador, con un tiempo base igual a la frecuencia del oscilador dividida por 4. Cuando el bit <T0CS=1>, la seal de excitacin proceder del terminal externo <T0CKL>, conectado en el terminal <RA6>, del microcontrolador. En este caso consideraremos que el modulo trabaja en modo contador, porque incrementa el valor de su registro acumulador cada vez que se produzca una transicin en la seal de excitacin. En el caso de que la seal conectada al terminal <T0CKL>, fuese continua y de frecuencia constante, el modulo tambin se comportara como un temporizar utilizando como base de tiempo el percude del seal de excitacin. En el caso de trabajar utilizando una fuente de excitacin externa, tambin podremos seleccionar el tipo de transicin que detecta el modulo, esta podr ser por flanco de bajada (considerar que se ha producido en un cambio de estado en el momento que la seal de excitacin pase de nivel alto nivel bajo), o bien por flanco de subida (considerar que se ha producido en un cambio de estado en el momento que la seal de excitacin pase de nivel alto nivel bajo). En ambos caso deberemos tomar en consideracin los niveles de tensin (alto y bajo) de la seal de excitacin, al igual que la frecuencia del seal, porque el modulo actualizar el valor de su estado en funcin del reloj interno4. El registro acumulador del temporizador <TMR0x>, que podr ser de 8 o 16 bits, incrementar en 1 unidad su valor cada vez que el modulo detecte un cambio de estado en la seal de excitacin, si no tenemos habilitado el mdulo de divisin <PSA = 1>. En el caso de tener el modulo divisor habilitado <PSA = 0>, el registro del acumulador incrementar en 1 unidad su valor cada N

- El uso de cantador / temporizador, para seales ms rpidas que la frecuencia del reloj del sistema, puede utilizarse el temporizador N 3.
Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 21/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos transiciones de la seal de excitacin, donde N ser igual al valor que tengamos seleccionado mediante los bits <T0PS2 : T0PS0>. Por ejemplo en el caso de que <T0PS2 : T0PS0 = 101b>, que corresponde al valor 64 para el modulo divisor. En esta caso el valor del registro acumulador, se incrementar en 1 unidad cada vez que el modulo haya detectado 64 transiciones en la seal de excitacin. Seleccionaremos el modo de trabajo de 8 o 16 bits en funcin del valor del bit <T08BIT>, en el caso de trabajar en modo 8 bits el acumulador podr tomar valores de 0 a 255, mientras que en 16 bits podr tomar valores de 0 a 65535. Trabajando en modo 8 bits solo se utilizar el registro <TMR0L>, ser solo en este registro donde se guardar el valor acumulado, mientras que en 16 bits se utilizarn los registros <TMR0H & TMR0L>, siendo el registro <TMR0H> donde se guarda los 8 bits de mas peso y <TMR0L> donde se guarda los 8 bits de menor peso del valor del acumulador. Deber de tomarse en consideracin el proceso de lectura y escritura del registro <TMR0H>, cuando se trabaje en modo 16 bits. Porque no es posible leer o escribir el registro <TMR0H>, sin haberlo echo en el registro <TMR0L>. Para el proceso de lectura, primero deber de leerse el valor del registro <TMR0L> y posteriormente el registro <TMR0H> (al realizar la operacin de lectura del <TMR0L>, el microcontrolador al mismo tiempo actualiza el valor del registro <TMR0H>, de este forma no puede haber latencia en el valor de lectura). La lectura sola del registro <TMR0H>, no tiene sentido y devolver valores errneos. Para el caso de la escritura, primero deber de escribirse el registro <TMR0H> y posteriormente el registro <TMR0L>, el microcontrolador al realizar la escritura del registro <TMR0L> actualiza de forma automtica los dos registros. Durante la escritura de los registros <TMR0L> y <TMR0H>, debemos de tomar en consideracin que el procesador tardar dos ciclos de programa a realizar esta operacin y en consecuencia el registro no volver a estar operativo hasta pasados los dos ciclos (importante para fijar bien los tiempos trabajando con el reloj interno). Otra consideracin importante en este sentido es que al escribir los registros el valor acumulador en el divisor, tambin se reinicializa a 0.
//Ejemplo de escritura . . TMR0H = 0xFF; // TMR0L = 0x00; // // // . . los registros del acumulador del TIMER_0 <TMR0H> & <TMR0L>

Pasados dos ciclos de programa tras la ejecucin de esta funcin el valor del acumulador pasa al valor 65280, y pasara a incrementar su valor. Igualmente el valor acumulador en el divisor pasa a ser 0.

//Ejemplo de lectura del valor acumulado en los registros del TIMER_0 <TMR0H> & //<TMR0L> . . . TIMER0_VALUE = TMR0L; TIMER0_VALUE += ((short)TMR0H)x256; . . Figura 9: Ejemplo de lectura y escritura del los registros del acumulador del TIMER_0.

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 22/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos El formato ms habitual de utilizar el recurso del TIMER_0, es por medio de su interrupcin. El modulo TIMER_0 genera un evento de interrupcin cada vez que se alcanza el valor mximo del registro del acumulador (255 en modo 8 bits y 65535 en modo 16 bits). Tras el desbordamiento el bit <TMR0IF> pasara al estado Activo, y el registro del acumulador pasara al valor 0, y de nuevo empezar a acumular de nuevo. Al activarse al bit <TMR0IF> si tenemos la interrupciones habilitadas de forma general y la interrupcin del TIMER_0 en particular, el cdigo de programa pasara a ejecutar el cdigo de interrupcin que se encuentra ubicado en las zonas de memoria 0x000008 y 0x000018 (en funcin de la prioridad de la interrupcin y si estas estn habilitadas). La configuracin de la interrupcin debe de realizarse por medio de los bits <TMR0IE>, <TMR0IF> y <TMR0IP> que se encuentran en los registros <INTCON> y <INTCON2>. Habilitaremos la interrupcin utilizando el bit <TMR0IE>, siempre y cuando tengamos la interrupciones habilitadas (utilizado los bits <IPEN> del registro <RCON>, <GIE/GIEH> y <PEIE/GIEL> del registro <INTCON>). Utilizando el bit <TMR0IP>, podremos seleccionar la prioridad de la interrupcin (alta o baja prioridad), siempre que tengamos habilitados la prioridad en de las interrupciones <IPEN = 1>. Los registros <TMR0H & TMR0L>, son registro de lectura y escritura. Es habitual escribir el valor de estos registros para obtener valores de contador o temporizador determinados. Por ejemplo en el caso de querer contar 50 transiciones en la seal de excitacin, podemos habilitar la interrupcin para que nos avise justo al momento que se alcancen las 50 transiciones, justo en el momento que se produce la interrupcin actualizamos el valor de los registros del acumulador a 65468 (en el caso de trabajar con 16 bits) o 255 para el caso de trabajar en modo 8 bits.

#pragma code InterruptVectorHigh = 0x08 void InterruptVectorHigh(void) { _asm goto InterruptHandlerHigh _endasm } #pragma code

// Ubicacin del cdigo de interrupcin // en la zona de memoria de las int.

//jump to interrupt routines

#pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh(void) { if(INTCONbits.TMR0IF) // TIMER0 overflow interrupt { TMR0H = 0XFF; TMR0L = 0xBC; INTCONbits.TMR0IF = 0; } } Figura 10: Ejemplo de gestin del TIMER_0 por interrupcin.

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 23/25

Proyecto PLUMA Teora y diseo de aplicaciones con Microcontroladores de Microchip 18F4550 Llus Olivet Cos

BIBLIOGRAFA
Teora y Diseo con Microcontroladores de Freescale, Mc Graw Hill, Varios Autores, publicacin 2008, ISBN: 978-84-481-7088-2. Microcontrolador PIC16F84 Desarrollo de Proyectos, Ra-Ma, Variso Autores, Publicacin 2003, ISBN: 84-7897-600-0.

WEB GRAFA
8-bit PIC Microcontrollers, Technologies, inc. http://www.microchip.com/en_US/family/8bit/ , Microchip

Documentacin creada y elaborada por Llus Olivet Cos, en el marco del proyecto PLUMA BOT. Queda prohibido su uso o distribucin, por otros fines fuera el proyecto PLUMA BOT, sin previo consentimiento de su creador. 24/25