Вы находитесь на странице: 1из 48

RETARDO , CONTADORES Y

TEMPORIZADORES EN LOS PIC


18F
TIMER DE LA FAMILIA PIC18

Se dividen en dos grupos:


1. Los temporizadores de retardo que son usados cuando inicia el uc, el reset y en las
operaciones de wathdog.
2. Los temporizadores y contadores que son usados en la medicin de periodos de
tiempos y formas de onda
DELAY TIMERS

Microcontroladores PIC18 tienen recursos de hardware que proporcionan una


periodo de tiempo durante un reset. Los temporizadores son asociados con la
accin de restablecimiento
Temporizador de encendido(PWRT)
Temporizador de inicio del oscilador
Temporizador de lazo de bloqueo de fase(PLL)
Watchdog timer
POWER UP TIMER(PWRT)
El temporizador de encendido proporciona un perodo de tiempo de espera fijo
desde el ajuste de encendido PWRT).
El temporizador funciona en una oscillador RC interna para que mantenga el chip en
el estado RESET.
Este retraso permite que la seal Vdd suba a un nivel aceptable. El perodo de
retardo nominal se documenta para tomar 72 ms, pero se dice que varan de chip a
chip, debido a las diferencias en el Vdd y los cambios de temperatura. Se
proporciona un bit de configuracin para Habilitar / desactivar el PWRT, como sigue:
PWRT = ON temporizador de encendido y apagado
PWRT = OFF temporizador de encendido desactivado
POWER UP TIMER

el estado predeterminado est deshabilitado pero no hay ninguna razn por la que el
temporizador de PWRT no debera estar habilitado para la mayora de las
aplicaciones.
OSCILLATOR STAR UP TIMER

El temporizador de inicio del oscilador (OST) garantiza que se produzcan 1.024


ciclos de oscilacion despus de que haya finalizado el retardo PWRT y antes de
que finalice la etapa de RESET.
Este retraso garantiza que oscilador de cristal o resanador ha comenzado y es
estable al encender.El tiempo de espera se invoca para las siguientes opciones
de oscilador: XT, LP y HS. El retraso
Tiene lugar en el restablecimiento de encendido, apagado en el despertador
desde el SLEEP. Tambin Tiene lugar en la transicin de Timer1 en poner reloj
como el reloj del sistema para el oscilador. El OST est desactivado para todos
los restablecimientos y reactivaciones en las opciones de oscilador RC y EC.
La funcin OST cuenta los pulsos del oscilador en el pin OSC1 / CLKIN. El contador
Comienza contado despus de que la amplitud de la seal alcance el oscilador en
los umbrales de puesta. Este retardo inicial permite que el oscilador de cristal o
resonador se estabilice antes del dispositivo salga del retardo de OST. La duracin
del tiempo de espera es una funcin de la frecuencia de cristal / resonador. Para los
cristales de baja frecuencia, este tiempo de arranque puede ser bastante largo. Esto
es porque el tiempo que lleva el oscilador de baja frecuencia para comenzar a
oscilar es mas largo que el retardo del temporizador de encendido.
El tiempo desde el momento en que el temporizador de encendido se agota hasta
cuando el oscilador empieza a oscilar se denomina tiempo muerto. No hay un tiempo
mnimo o mximo para este tiempo muerto debido a que est pendiente del tiempo
requerido para que el circulo del oscilador tenga "buenas" oscilaciones.
PHASE LOCKED LOOP (PLL)

El circuito de Fase Locked Loop (PLL) es una opcin programable que permite
multiplicar por 4 la frecuencia de la seal del oscilador de cristal. Al seleccionar la
opcin PLL, se genera una frecuencia de reloj de entrada de 10 MHz del reloj interno
multiplicada a 40 MHz.
El PLL slo se puede activar cuando los bits de configuracin del oscilador estn
programados para el modo HS. En todos los dems modos, la opcin PLL est
desactivada y el reloj del sistema procede directamente del pin OSC1. El bit de
configuracin para HS y PLL se selecciona con la siguiente instruccin:
Cuando se selecciona el modo de oscilador de bucle bloqueado de fase, la
secuencia de tiempo de espera despus de un restablecimiento de encendido es
diferente de los otros modos de oscilador. En este caso,
Una parte del temporizador de encendido se utiliza para proporcionar un tiempo de
espera fijo que es suficiente para que el PLL se bloquee a la frecuencia del oscilador
principal. Este tiempo de espera de bloqueo PLL (TPLL)
Es tpicamente de 2 ms y sigue el tiempo de espera de arranque del oscilador (OST).
POWER-UP DELAY SUMMARY

Dos temporizadores se utilizan en el control de las opciones de encendido: el


temporizador de retardo de encendido
(PWRT) y el temporizador de inicio del oscilador (OST). Esta duplicacin asegura que no
se requieren circuitos de restablecimiento externos para la mayora de las aplicaciones.
Su accin conjunta garantiza que el dispositivo se mantiene en RESET hasta que ambos, la
fuente de alimentacin del dispositivo y el reloj, sean estables.
Cuando el PLL est habilitado (modo de oscilador HSPLL), el temporizador de encendido
(PWRT) se utiliza para mantener el dispositivo en RESET para un retardo nominal
adicional. Este retardo adicional garantiza que el PLL est bloqueado a la frecuencia de
cristal.
WATCH DOG TIMER

Watchdog Timer Es un temporizador dependiente con su propia fuente de reloj. Su


propsito es proporcionar un mecanismo por el cual el procesador puede
recuperarse de un error de software que impide la continuacin del programa, tal
como un bucle de final menos. El cronmetro Watch Dog no est firmado para
cubrirse de fallas de hardware, como un apagado.
El hardware del Watchdog Timer es independiente del reloj interno del PIC.Su
perodo de tiempo de espera puede variar de aproximadamente 18 mili segundos a
2,3 segundos, dependiendo de si se usa el prescaler. De acuerdo con Microchip, el
temporizador Watch Dog no es muy preciso y en el peor de los casos, el perodo de
tiempo de espera puede extenderse a varios segundos. Cuando el WDT se agota, el
indicador TO del registrador STATUS se borra y el contador del programa se
restablece a 0x000 para que el programa se reinicie. Las aplicaciones pueden
prevenir el restablecimiento al procesar la clrwdt en la construccin antes de que
termine el perodo de tiempo de espera. Cuando clrwdt se ejecuta, el perodo de
tiempo de espera WDT se reinicia.
9.3 TIMER - CONTADOR
La mayora de los microcontroladores tienen uno o varios timers. Sern muy tiles para medir el
tiempo que ha pasado entre dos eventos, establecer tareas para ejecutarse a intervalos regulares,
etc. Dependiendo del modelo los PICs cuentan con un nmero variable de timers.

Un timer no es ms que un contador cuya entrada est conectada al reloj del sistema. De hecho, la
mayora de los timers pueden reconfigurarse como contadores. En ese caso, en lugar de contar
pulsos de reloj cuentan los pulsos que llegan a un determinado pin.
TEMPORIZADOR DE 16 BITS DEL PIC18F4550

Cuando se disean aplicaciones de control electrnico, es comn encontrarse con la


necesidad de incorporar tiempos de espera para los dispositivos lentos que se
controlan ya que el microcontrolador es demasiado rpido. Por otra parte, los
temporizadores son ideales para proveer bases de tiempo de alta precisin para la
implementacin de relojes de tiempo real.
EL PIC18F4550 POSEE CUATRO TEMPORIZADORES:
TIMER0 A TIMER3, AL IGUAL QUE LOS DEMS
MDULOS ESPECIALES, CADA UNO DE LOS
TEMPORIZADORES ES CONTROLADO POR UN
REGISTRO DE CONFIGURACIN.
Registro de
Temporizador
control
TIMER0 T0CON
TIMER1 T1CON
TIMER2 T2CON
TIMER3 T3CON
CARACTERSTICAS AL UTILIZAR EL TEMPORIZADOR
TIMER0, QUE ES SIMILAR A LOS DEMS TEMPORIZADORES:
Modo de operacin de 8 y 16 bits: El modo de operacin de 8 y 16 bits determina la
cantidad de conteos mxima que puede realizar el timer. Si es de 8 bits contar hasta 255,
si es de 16 bits hasta 65535.
Registros de control de lectura y escritura.
Prescaler dedicado de 8 bits: el timer incrementa el valor del conteo cada Fosc / 4 pulsos de
reloj. Para un microcontrolador que opera a 20Mhz, significa que el incremento se realiza 5
millones de veces en un segundo. Esta cantidad puede ser demasiado alta para ciertas
aplicaciones en donde las bases de tiempo son bastante grandes. Para solucionar este
inconveniente, se dispone del prescaler que es bsicamente un divisor de frencuencia, la
frecuencia se puede dividir entre: 2, 4, 8, 16, 32, 64, 128 y 256.
Fuente de reloj seleccionable (interna / externa).
Interrupcin por desbordamiento: cada vez que el valor del conteo llega a su lmite se
genera un desbordamiento (overflow) que genera una interrupcin interna que activa el
bit TMR0IF del registro INTCON.
9.4 Mdulo Timer0
El temporizador bsico de la familia PIC 18F se conoce como
mdulo Timer0. Se describe como un temporizador de
funcionamiento libre, como temporizador / contador, o
simplemente como TMR0. Timer0 se puede configurar como un
dispositivo de 8 o 16 bits. Se puede hacer que se ejecute fuera
del temporizador interno o fuera de una externa en el pasador
TOCKI. Sus caractersticas principales son las siguientes:
1 Software seleccionable como temporizador / contador de 8 o
16 bits
2 Leer y escribir
3. Pre-programador de software de 8 bits programable
4. La fuente del reloj puede ser externa o interna
5. Interrumpir en el desbordamiento de 0xff a 0x00 en 8 bits o
en 0xffff en modo de 16 bits
6. Seleccin de borde para el reloj externo
Control o Timer0 es principalmente a travs del registro T0CON
mostrado en la Figura 9.1.
9.4.1 Arquitectura de Timer0
Se necesitan varias operaciones de configuracin para programar el mdulo
Timer0 en sus diversos modos. Los diferentes pasos necesarios para
configurar el mdulo Timer0 son los siguientes:
1. Active el temporizador.
2. Seleccione el modo de 8 16 bits.
3. Seleccione la fuente de reloj interna o externa.
4. Si el temporizador se utiliza como contador, el cdigo debe seleccionar si
el incremento tiene lugar en el flanco ascendente o descendente de la seal.
5. Active o desactive la funcin de prescaler.
6. Si el prescaler est activado, seleccione el valor del prescaler.
Funcionamiento en modo 16 bits
Normalmente, las aplicaciones no cambiarn el modo de temporizador una vez que se haya
seleccionado. Sin embargo, el cdigo puede cambiar entre los modos de 8 y 16 bits al
considerar cuidadosamente cundo se generan interrupciones durante el vuelco de contador.
Las reglas son las siguientes:
1. Cuando se cambia Timer0 de modo de 8 a 16 bits en el mismo ciclo de conteo que ocurre
cuando ocurre la condicin de vuelco, no se genera ninguna interrupcin.
2. Cuando se cambia Timer0 de modo de 16 a 8 bits en el mismo ciclo de contaje que se
produce la condicin de vuelco, se genera una interrupcin.

Fuente del reloj externo


Cuando se selecciona una seal de reloj externa, el hardware Timer0 debe garantizar que la seal de reloj
puede sincronizarse con el reloj interno.
9.4.2 Timer0 como temporizador de retardo
Una de las aplicaciones ms simples y tiles del mdulo Timer0 es como un simple
temporizador de retardo. Existen dos tcnicas comunes:
1. Sondear el valor en el registro contador de temporizador para detectar cuando el
contador se desplaza
2. Activacin de una interrupcin que tiene lugar cuando el contador se desplaza
Problemas de precisin de retardo
La implementacin real de una rutina de retardo basada en contadores de varios bytes presenta
algunas dificultades. Si se utiliza el registro de temporizador (TMR0) para realizar un
seguimiento de las pulsaciones del temporizador, la deteccin del final del conteo presenta un
problema sutil. Nuestro programa podra detectar el desbordamiento del temporizador leyendo
el tmr0 y probando el indicador de cero en el registro de estado. Debido a que la instruccin
movf afecta el indicador de cero, uno podra ser tentado a codificar:
Mtodo Black-Ammerman
En el mtodo de Black-Ammerman, el contador funciona en
segundo plano, ya sea por sondeo o por interrupcin. En
cualquier caso, el valor del contador del temporizador se
almacena en un registro de 3 bytes que es decrementado por el
software.
9.4.3 Programacin de contadores y temporizadores
Las rutinas de software que usan el mdulo Timer0 varan en complejidad desde bucles de retardo simple y
aproximado hasta contadores configurables y controlado por interrupciones que deben cumplir requisitos de
precisin de temporizacin muy altos. Cuando el periodo de tiempo que se va a medir no excede el que se puede
obtener con el recuento previo y el contador del temporizador, entonces la codificacin es sencilla y el
procesamiento no es complicado. Sin embargo, si este no es el caso, los elementos siguientes deben examinarse
antes de intentar disear y codificar una rutina basada en Timer0:
1. Cul es la precisin requerida para el retardo del temporizador?
2. El programa suspende la ejecucin mientras el retraso est en curso, o la aplicacin contina ejecutndose en
primer plano?
3. Puede el temporizador ser interrumpido o debe ser interrogado?
4. El retardo ser el mismo en todas las llamadas a la rutina del temporizador, o debe la rutina proporcionar
retrasos de diferentes magnitudes?
5. Cunto tiempo debe durar el retraso?
Programacin de un contador
El PIC 18F452 se puede programar para que el puerto RA4 / TOCKI se utilice para contar eventos o pulsos
inicializando el mdulo Timer0 como un contador. Cuando no se utilizan interrupciones, el proceso
requiere los siguientes pasos preparatorios:
1. El puerto A, lnea 4, (RA4 / TOCKI) est definido para la entrada.
2. El registro Timer0 (TMR0) est borrado.
3. El registro interno del temporizador de vigilancia se borra mediante la instruccin clrwdt.
4. Los bits de registro T0CON PSA y PSO: PS2 se inicializan si se va a usar el prescaler.
5. El bit de registro TOCON TOS se ajusta para incrementar la cuenta en la transicin de alto a bajo del pin
de puerto si la fuente de puerto est baja activa. De lo contrario, el bit se borra.
6. El bit de registro TOCC TOCS se ajusta para seleccionar la accin en el pasador RA4 / TOCKI.
Una vez configurado el temporizador como contador, cualquier
impulso recibido en el pin RA4 / TOCKI que cumpla con las
restricciones mencionadas anteriormente se cuenta en los
registros TMR0L y TMR0H. Si Timer0 se configura en el modo
de 8 bits, entonces no se utiliza el registro TMR0H. El software
puede leer y escribir en los registros Timer0 para obtener o
cambiar el conteo de eventos. Si la interrupcin del
temporizador est activada cuando el temporizador est definido
como un contador, entonces se produce una interrupcin cada
vez que el contador se desborda, es decir, cuando el recuento va
de 0xff a 0x00 o de 0xffff a 0x0000 segn el modo activo.
Programa Timer0_as_Counter.asm
El programa detecta y cuenta la accin en el interruptor DIP # 3, cableado al puerto
RA4 / TOCKI. El valor de la cuenta en dgitos hexadecimales en el rango de 0x00 a
0x0f se muestra en el LED de siete segmentos conectado al puerto B.

Observe que el programa no proporciona


ninguna forma de detectar cundo el recuento
excede el rango visualizable. Esto significa
que no se produce ninguna actualizacin de la
pantalla cuando el temporizador se desplaza
desde el binario 00001111 hasta el binario
11111111.
Programa Timer0 _Delay.asm
Uno de los usos ms simples del mdulo Timer0 es implementar
un bucle de retardo. En este caso, el mdulo Timer0 se inicializa
para utilizar el reloj interno borrando el bit TOCS del registro
T0CON. Si se va a utilizar el prescaler, se borra el bit PSA y se
selecciona el pre-escalado deseado mediante los bits 2: 0 del
registro T0CON.
C-18 FUNCIONES DE TIMER

Las libreras de los perifricos de los pic 18 (hardware ) contiene funciones para
habilitar, deshabilitar, configurar, abrir y cerrar temporizadores y para leer y
escribir en registros del temporizador
LAS FUNCIONES SON NOMBRADAS EN ESTOS
CUATRO GRUPOS:

Funcin ClosedTimerX, donde x es un digito del 0 al 4, se debe especificar el timer


para desactivarlos
Funcin OpentimerX, donde x es un digito del 0 al 4, para la configuracin y
habilitacin de un especifico temporizador.
Funcin ReadtimerX , donde x es un digito del 0al 4, para leer el valor actual en el
registro del timer.
Funcin WritetimerX, donde x es un digito del 0 al 4, para escribir un valor en un
determinado registro del timer.
Para incluir las funciones de temporizador se debe incluir la librera timer.h en el
encabezado del programa, las funciones son descritas en las siguientes secciones
-FUNCIN CLOSEDTIMERX
Esta funcin deshabilita la interrupcin y el temporizador especificado
CloseTimer0();

Cierra el timer0, retardo, contadores y temporizadores


FUNCIN OPENTIMERX

Esta funcin activa y configura un especifico timer que est disponible en el


hardware
FUNCIN OPENTIMERX
PARA ACTIVAR UNA INTERRUPCIN EN EL
TIMER0

TIMER_INT_ON (interrupcion habilitada)


TIMER_INT_OFF (interrupcion deshabilitada)
FUNCIN OPENTIMERX
PARA ACTIVAR EL TIMER DE 8 BIT Y 16BIT

T0_8BIT 8-bit mode


T0_16BIT 16-bit mode
FUNCIN OPENTIMERX
PARA ESCOGER EL OSCILADOR

T0_SOURCE_EXT External clock source (I/O pin)


T0_SOURCE_INT Internal clock source (TOSC) External Clock Trigger (for
T0_SOURCE_EXT): T0_EDGE_FALL External clock on falling edge
T0_EDGE_RISE External clock on rising edge
FUNCIN OPENTIMERX
PARA EL VALOR DEL PREESCALER

T0_PS_1_1 1:1 prescale


T0_PS_1_2 1:2 prescale
T0_PS_1_4 1:4 prescale
T0_PS_1_8 1:8 prescale
T0_PS_1_16 1:16 prescale
T0_PS_1_32 1:32 prescale
T0_PS_1_64 1:64 prescale
T0_PS_1_128 1:128 prescale
T0_PS_1_256 1:256 prescale
EN EL SIGUIENTE FRAGMENTO CDIGO ACTIVA
Y CONFIGURA EL TIMER0, PARA ACTIVAR LAS
INTERRUPCIONES DE 8BITS, USANDO UN
OSCILADOR INTERNO Y SELECCIONAR UN
PREESCALER DE 1:32

//configurar timer0
OpenTimer0 (TIMER_INT_OFF & TO_8BIT & TO_SOURCE_INT & TO_PS_1_32);
LAS FUNCIONES C-18 PARA TIMERS
ESPECFICOS PUEDEN TENER APOYO DE OTRO
DISPOSITIVO POR EJEMPLO , ARGUMENTOS EN
OPENTIMER1, OPENTIMER2, OPENTIMER3, O
FUNCIONES QUE INCLUYAN LAS INTERACCIONES
CON EL MODULO CCP.
FUNCIN READTIMERX

La funcin ReadTimerx permite leer el valor del timer especificado, el parmetro X


puede tomar valores representado algn TIMER disponible. Tal como ReadTimer0
hacia ReadTimer4.
FUNCIN READTIMERX

EL prototipo de la funcin es el siguiente:


unsigned int ReadTimerX (void);
FUNCIN READTIMERX

Las funciones toman datos del timer disponible:


Timer0: TMR0L, TMR0H
Timer1: TMR1L, TMR1H
Timer2: TMR2
Timer3: TMR3L, TMR3H
Timer4: TMR4
FUNCIN READTIMERX

Cuando la funcin ReadTimerx es usada en el modo 8-bit por mdulo de tiempo que
puede ser configurado en el modo 16-bit (por ejemplo, timer0, timer1 y timer3) la
operacin de lectura no asegura que el byte de orden ms alto ser cero. en este
caso, el cdigo puede transmitir al resultado a char para un resultado correcto.
FUNCIN READTIMERX

//Reading a 16-bit result from a 16-bit timer


//operating in 8-bit mode:
unsingned int result;
result = (unsingned char) ReadTimer0();
LA FUNCIN WRITETIMERX

La funcin de escritura siempre escribe un valor en el registro del timer


especificado. El parmetro X puede tomar valores representando algn timer
disponible. Tal como writetimer0 hacia el writetimer4. EL prototipo de la funcin es
el siguiente:
Void writeTimerx (usingned int):
LA FUNCIN WRITETIMERX

La funcin guarda los datos en el timer disponible.


Timer0: TMR0L, TMR0H
Timer1: TMR1L, TMR1H
Timer2: TMR2
Timer3: TMR3L, TMR3H
Timer4: TMR4
LA FUNCIN WRITETIMERX

Por ejemplo:
WriteTimer0(32795);