Sie sind auf Seite 1von 18

TEMPORIZADORES

El tiempo est presente en todo momento, y medirlo es un aspecto importante en casi cualquier
aplicacin electrnica. Una de las primeras aplicaciones desarrolladas en el mundo de la
electrnica digital fueron los circuitos para medir el tiempo, y estos adquirieron tal importancia,
que estn presentes en casi cualquier dispositivo electrnico moderno. En nuestro caso,
hablaremos de los circuitos temporizadores de los microcontroladores.
El elemento fundamental del temporizador es un contador binario, encargado de contar los
pulsos suministrados por algn circuito oscilador, con una base de tiempo estable y conocida.

La estructura bsica de un temporizador est compuesto por tres bloques fundamentales:
Contador binario: es el elemento bsico del temporizador y su misin es contar los pulsos del
reloj. Sus caractersticas son:
La cantidad de pulsos que puede contar.
Controlar el evento de cuenta: ascendente o descendente.
Circuitos de configuracin y control: es la interfaz entre el contador binario y elementos
externos.
Circuitos especializados de salida: Se utilizan para notificar, a otro elemento del sistema,
sobre el estado del temporizador o acerca de la ocurrencia de un determinado evento.
Caractersticas
Las caractersticas de un temporizador son:
Longitud del contador: Determina la cantidad mxima de pulsos que se pueden contar. Los
ms comunes son de 8 16 bits.
Lectura/escritura: En general, los temporizadores pueden ser escritos o ledos por el
procesador. En algunos casos, donde el temporizador est vinculado a algn perifrico muy
especfico, esta opcin puede no existir o estar limitada.
Modos de trabajo: Existen, en principio dos modos:
Contador: cuenta los pulsos desde una fuente externa al procesador. Los pulsos contados
pueden tener perodo variable.
Temporizador: cuentan los pulsos suministrados por una fuente estable y conocida, que
puede ser externa, o interna

Forma de conteo: El conteo tpico es ascendente, sin embargo, existen contadores con la
opcin de configurar el modo de conteo (ascendente o descendente).
Configuracin de activacin por flanco: Permite establecer cuando se produce el conteo, si
en el flanco de subida del reloj o en el flanco de bajada del reloj.
Configuracin del reloj: Permite configurar la base de tiempo del reloj. Para ello usa un
bloque funcional denominado Pre-escalador:
Un pre-escalador, es bsicamente otro contador que se coloca antes del contador principal
del temporizador y su funcin es dividir la seal del reloj a la entrada del contador principal.
Generalmente la longitud es configurable, pero no se permite leerlos o escribirlos por
software.

Interrupciones: En la mayora de casos, los temporizadores tienen interrupciones asociadas,
con el objetivo de notificar al procesador que ha ocurrido el cruce por cero o algn valor
especfico en el registro de conteo.

TIMER0
El Timer0 tiene una amplia gama de aplicaciones. Se utiliza para generar pulsos de duracin
arbitraria, en medir tiempo o en contar los pulsos externosU (eventos).
El Timer0 es un temporizador/contador de 8 bits con las siguientes caractersticas:
Temporizador/contador de 8 bits.
Pre-escalador de 8 bits, el cual es compartido con el WDT (Temporizador Perro Guardin).
Generacin de interrupcin por desbordamiento.
Fuente de reloj interna o externa programable.
Seleccin del flanco de reloj externo programable.

Los registros utilizados para configurarlo y trabajar con el Timer0 son:


REGISTRO OPTION_REG
El registro OPTION_REG contiene varios bits de control para configurar el pre-escalador, el
Timer0, la interrupcin externa y las resistencias pull-up en el puerto PORTB.


RBPU: Resistencia Pull-Up del PORTB
INTEDG: Bit selector de flanco activo de la interrupcin externa
T0CS: Bit selector de tipo de reloj para el Timer0
1: Pulsos introducidos a travs del RA4/TOCKI (contador).
0: Pulsos de reloj internos Fosc/4 (temporizador).


T0SE - TMR0
Bit selector de tipo de flanco en RA4/TOCKI. Selecciona el flanco (ascendente o descendente)
contado por el Timer0, por el pin RA4/T0CKI.
1: Incrementa en flanco descendente en el pin RA4/TOCKI.
0: Incrementa en flanco ascendente en el pin RA4/TOCKI.

PSA
Bit que asigna el pre-escalador (hay slo uno) al Timer0 o al WDT.
1: Pre-escalador se le asigna al WDT.
0: Pre-escalador se le asigna al Timer0.

PS2, PS1, PS0:
Prescaler Rate Select bits (bit selector del valor del divisor de frecuencia). El valor del divisor de
frecuencia se selecciona al combinar estos tres bits. Como se muestra en la siguiente tabla, el
valor del divisor de frecuencia se le asigna al Timer0 o al WDT.

La siguiente figura muestra el esquema del Timer0 con todos los bits que determinan su
funcionamiento. Estos bits se almacenan en el registro OPTION_REG.

El registro del pre-escalador de 8 bits no est disponible al usuario, lo que significa que no es
posible leerlo o escribir en l directamente

Al asignarle el pre-escalador al temporizador, el pre-escalador se pondr a 0 con cualquier
escritura en el registro TMR0.
Al escribir en el registro TMR0, utilizado como un temporizador, no se inicia el conteo de los
pulsos inmediatamente, sino con retraso de dos ciclos de instrucciones. Por consiguiente, es
necesario ajustar el valor escrito en el registro TMR0

Registro INTCON

GIE (Global Interrupt Enable): controla simultneamente todas las fuentes de interrupciones
posibles.
PEIE (Peripheral Interrupt Enable): controla interrupciones habilitadas por los perifricos. Eso
significa que no influye en interrupciones causadas por el temporizador Timer0 o por el
cambio del estado en el puerto PORTB o por el cambio en el pin RB0/INT.
TMROIE (TMR0 Overflow Interrupt Enable): controla interrupciones causadas por el
desbordamiento del Timer0.
1: Habilita interrupciones por Timer0.
0: Deshabilita interrupciones por Timer0.
TMR0IF (TMR0 Overflow Interrupt Flag): detecta el desbordamiento en el registro del
temporizador Timer0, o sea el contador se pone a cero.
1: En el registro del Timer0 ha ocurrido desbordamiento (esta bandera debe volverse a 0 por
software).
0: En el registro del Timer0 no ha ocurrido desbordamiento.

Pasos para configurar TIMER0

Para utilizar el Timer0 apropiadamente, es necesario:
Paso 1: Seleccionar el modo
El modo de Timer0, se selecciona por el bit TOSC del registro OPTION_REG:
TOCS = 0, es modo temporizador.
TOCS = 1, es modo contador.
Cuando se asigna el pre-escalador al temporizador se debe poner a cero el bit PSA del
registro OPTION_REG. El valor del divisor de frecuencias se configura al utilizar los bits PS2,
PS1 y PS0 del mismo registro.
Al utilizar una interrupcin, los bits GIE y TMR0IE del registro INTCON deben estar a uno.
Paso 2: Medir o contar
Para medir tiempo:
Reiniciar el registro TMR0 o escribir un valor conocido en l.
El tiempo transcurrido (en microsegundos al utilizar el oscilador de 4MHz) se mide al leer el
registro TMR0.
El bit de bandera TMR0IF del registro INTCON se pone a uno automticamente siempre
que ocurra el desbordamiento del registro TMR0. Si est habilitada, ocurre una interrupcin.
Para contar pulsos:
La polaridad de pulsos a contar en el pin RA4/T0CKI se selecciona por el bit TOSE del
registro OPTION_REG:
T0SE = 0, flanco de subida.
TOSE = 1, flanco de bajada.
Varios pulsos se pueden leer del registro TMR0. El pre-escalador y la interrupcin se utilizan
de la misma forma que en el modo de temporizador.


Ejemplo: Manejo de Timer0 como temporizador sin Interrupciones
En el presente ejemplo programaremos el Timer0 para que cuando llegue a un determinado
valor (CUENTA) cambie el valor lgico del bit 0 de PORTC. Configuraremos el pre-escalador y el
valor de la variable CUENTA para que la frecuencia de oscilacin sea lo ms cercano a 120 Hz.
Debemos recordar que el Timer0 cuenta desde 0 (o el valor que almacenemos en dicho registro)
hasta FF, luego de lo cual se reinicia nuevamente a 0.

Debemos averiguar qu valor de pre-escalador requerimos para tener un valor de frecuencia los
ms cercano a 120 Hz. para ello debemos hacer pruebas con el siguiente programa:

El circuito en Proteus es el siguiente:

Ojo que estamos empleando dos instrumentos virtuales del Proteus: Osciloscopio y
Contador/Timer:



Si comenzamos a probar con diversos valores de pre-escalador tendremos los siguientes
resultados:

Observamos que el mejor resultado es para el pre-escalador de 1:32 y con el valor de cuenta
igual a 0x82.

Ejemplo: Manejo del Timer0 como contador, sin interrupciones
El presente programa contar los pulsos que ingresan por el pin RA4/TOCKI (flanco de subida) y
cada 8 pulsos, incrementar la cuenta que se visualiza en los display. Emplearemos el pre-
escalador y lo configuramos a 1:8. El programa en assembler es:

El circuito en Proteus es el siguiente:






Ejemplo: Manejo del Timer0 como contador, sin interrupciones
El presente programa contar los pulsos que ingresan por el pin RA4/TOCKI (flanco de subida) y
cada 10 pulsos, incrementar la cuenta que se visualiza en los display. El programa en
assembler es:


El circuito en Proteus es el siguiente:


Ejemplo: Manejo de Timer0 como temporizador y con Interrupciones
En el presente ejemplo programaremos el Timer0 para que inicie la cuenta a partir de un cierto
valor y cuando cambie de FF a 00, invierta el valor lgico de PORTC. Configuraremos el pre-
escalador y el valor de la variable CUENTA para que la seal que se genera en el PORTC sea
de 120 Hz.



El circuito a emplear es el mismo que el primer ejemplo:





















TAREA 6

Elaborar un programa que permita disparar un tiristor segn el circuito mostrado. Las
caractersticas del programa son:
El circuito de cruce por cero gener un pulso cada vez que la seal alterna (AC) pasa por cero
voltios.
Dicha seal debe ser usada para generar interrupcin al microcontrolador por el pin RBO.
Cada vez que se genera interrupcin por RBO. El programa de atencin a la interrupcin
configura un timer para que realice una cuenta de tiempo proporcional al valor ledo en el
PORTC. Dicho tiempo es el equivalente al ngulo de disparo, por lo tanto debe variar entre 0 a
8.33 milisegundos aproximadamente.
PORTC = 0x00, equivale aproximadamente a un ngulo de disparo igual a cero grados.
PORTC = 0xFF, equivale aproximadamente a un ngulo de disparo de 180 grados
Una vez que el timer llegue al final de la cuenta gener un interrupcin. El programa de
atencin a la interrupcin deber activar el pin RB1 por un tiempo que debe estar en
microsegundos (revisar el datasheet de algn Tiristor para tener una referencia de tiempo). Este
tiempo debe ser generado por una rutina de delay (no use timer). Finalizado el tiempo deber
desactivar el pin RB1.
El programa pirncipal debe estar mostrando una cuenta del 0 a 255 por el PORTD a un
frecuencia "visible al ojo humano".

Observar que el programa de atencin a la interrupcin debe "atender" a dos tipos de
interrupciones:
La interrupcin generada por el cruce por cero (RBO).
La interrupcin generada por el timer.

Analice que algoritmo emplear para atender a estas dos interrupciones. El plazo de entrega
vence el domingo 31 de agosto a las 23:55 horas.

Das könnte Ihnen auch gefallen