Está en la página 1de 6

TECNOLÓGICO PUERTO DE MEJILLONES MICROCONTROLADORES I

CARRERA: ELECTRÓNICA CURSO 33-400

PRÁCTICA Nº 6
TIMER 0 – COMO TEMPORIZADOR

1. INTRODUCCIÓN

Un timer no es más que un contador cuya entrada está conectada al reloj del sistema. De hecho,
la mayoría 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

La mayoría de los microcontroladores tienen uno o varios timers, estos son muy útiles para
diferentes tareas como: medir el tiempo que ha pasado entre dos eventos, o también establecer
tareas para ejecutarse a intervalos regulares, y otros

Dependiendo del modelo, los PICs cuentan con un número variables de timers. El PIC 16F877A
estudiado en la materia cuenta con 3 tipos de timers:

 Timer 0
 Timer 1
 Timer 2

Sin embargo en esta práctica nos abocaremos a estudiar al timer 0 (TMR0), los demás son muy
similares, aunque siempre es recomendable estudiar el manual correspondiente, por las tareas a
las que pueden estar asociadas

2. TIMER 0

Este Timer es un contador (registro) de 8 bits, se incrementa por hardware y es programable. Su


cuenta máxima es de 255 (incremento constante e independiente). Se puede emplear como:

 Temporizador: cuenta los pulsos internos del reloj, con esto se puede obtener una señal
distinta de frecuencia distinta, a la frecuencia del oscilador empleado.

 Contador: Cuenta los eventos externos, a través del pin A4/TOCKI

Asi mismo cuenta con un preescaler, este es un divisor de frecuencia que se puede programar
como 2, 4, 8 , 16, 32, 64, 128 o 256 (potencias de 2)

El tiempo de desbordamiento del timer 0 se puede calcular por la siguiente ecuación:

( )

2.1 SENTENCIAS DE PROGRAMACIÓN PARA EL TIMER 0

A continuación se detallan las sentencias que se emplean en la programación del timer 0, por
lo cual se tiene:

Ing. Javier Tarqui Valeriano


TECNOLÓGICO PUERTO DE MEJILLONES MICROCONTROLADORES I
CARRERA: ELECTRÓNICA CURSO 33-400

 Setup_timer_0(modo); → esta se emplea para configurar al timer 0

Para el “modo” tenemos la tabla de la cual podemos seleccionar según el programa:

SETUP_TIMER_0(MODO) SETUP_TIMER_0(MODO)
RTCC_INTERNAL RTCC_DIV_8

RTCC_EXT_L_TO_H RTCC_DIV_16

RTCC_EXT_H_TO_L RTCC_DIV_32

RTCC_DIV_1 RTCC_DIV_64

RTCC_DIV_2 RTCC_DIV_128

RTCC_DIV_4 RTCC_DIV_256

Ejemplo. Para los distintos modos se puede agrupar de la siguiente manera:

Setup_timer_0(rtcc_div_2 | rtcc_ext_l_to_h);

 set_timer0(valor); → se emplea para escribir una valor en el registro, donde “valor”


es un entero de 8 bits. Este se halla de la fórmula

 get_timer0( ); → se emplea para leer un valor actual del registro

2.2 TIMER 0 COMO TEMPORIZADOR

En este caso es necesario conocer la frecuencia que se desea para nuestra señal de pulsos. Por
lo cual en la relación:

( )

Si se tiene n=8 bits, y la variable a cargar en el registro colocamos como x

( )

Asi si consideramos una frecuencia: [ ], siendo que el periodo es la inversa de la


frecuencia, por la fórmula siguiente hallamos el periodo:

[ ]

La señal del pulso para el periodo obtenido tendrá la forma siguiente:

Ing. Javier Tarqui Valeriano


TECNOLÓGICO PUERTO DE MEJILLONES MICROCONTROLADORES I
CARRERA: ELECTRÓNICA CURSO 33-400

Notese que el ciclo de trabajo es el 50%, entonces tomamos: T=0,5 ms.

La frecuencia de oscilación es igual a: [ ]

Para obtener el valor del preescaler, consideramos lo siguiente:

 Dividimos el periodo del ciclo de trabajo T=0,5 ms, por el del periodo del ciclo de
maquina. Este último es la inversa de la frecuencia de oscilación dividido entre 4, es
decir: . Entonces se tiene:

 Este valor obtenido de 500, nos indica que para obtener nuestro periodo de 0,5 ms, se
debe contar 500 pulsos de nuestra frecuencia del oscilador (ciclos de maquina), pero
como ya se indico el Timer 0 solo puede contar de 0 hasta 255.
 Entonces el preescaler está para compensar este problema y al colocar:
el Timer 0 va a contar “1” cada dos pulsos de reloj, por tanto multiplicando 256*2 se
llega a 512, valor que si se podrá cargar. Asi mismo el preescaler puede tomar otros
valores como 8 por ejemplo, esto indicaria que el Timer 0 va contar “1” por cada 8
pulsos de reloj

reemplazando en la fórmula se tiene:

( )

Con preescaler =2

( ) → ( )

→ →

Con preescaler = 8 → x=193,5

Para nuestro programa tomaremos x=6 el valor a cargar en el registro

Ing. Javier Tarqui Valeriano


TECNOLÓGICO PUERTO DE MEJILLONES MICROCONTROLADORES I
CARRERA: ELECTRÓNICA CURSO 33-400

3. MATERIALES
- Microcontrolador PIC 6f877a
- Resistencias, capacitores y oscilador de cristal que son parte del circuito del
microcontrolador
- Resistencias de protección de 330 Ω
- LCD de 2x16
- Sensor de temperatura LM35

PROGRAMA 1.

Timer0 como temporizador de 8 bits con interrupción de desborde


Descripción: Este programa realiza como temporizador cuando el timer0, teniendo en su
programa principal un loop al infinito que no desarrolla ninguna acción. Entonces cuando su
registro pase de su valor máximo de 255, es decir se desborde, saltará inmediatamente a una
interrupción “por desbordamiento de Timer0”. Con esta interrupción lo que en realidad se está
haciendo es agregar los pulsos bajos y altos ya que con el periodo de 0,5 ms solo se tomaba un
estado de nuestra secuencia de pulsos. Con la interrupción se hace niega la anterior entrada
utilizando la sentencia toggle, en otras palabras se complementa el estado anterior.

Terminado la interrupción, otra vez vuelve al loop infinito del programa principal y al
desbordarse otra vez llama a la interrupción negándose la entrada obteniendo así el otro estado,
y asi sucesivamente se obtendrán los pulsos del temporizador

 En el PROTEUS se conecta a la salida que es el puerto B0 del PIC un led que al


parpadear nos muestra la secuencia de las ondas cuadradas, también conectando un
osciloscopio a esta misma entrada se puede visualizar las ondas cuadradas y obtener el
periodo y la frecuencia del mismo

PROGRAMA

#include <16f877a.h>
#fuses hs,nowdt
#use delay(clock=20M)

#int_timer0 //interrupcion por desbordamiento del timer0


void timer_0()
{
output_toggle(pin_b0); // se complementa el b0
set_timer0(6); //se debe volver a cargar en el registro el valor de 6
}

void main()
{
setup_timer_0(rtcc_internal|rtcc_div_2); //se configura el timer0 con pulsos inernos y preescaler=2
set_timer0(6); //cargamos al registro el valor hallado x=6
enable_interrupts(int_timer0);

Ing. Javier Tarqui Valeriano


TECNOLÓGICO PUERTO DE MEJILLONES MICROCONTROLADORES I
CARRERA: ELECTRÓNICA CURSO 33-400

enable_interrupts(global);
while(true)
{
//loop secuencia infinita
}
}

PROGRAMA 2. PRACTICA PARA EL ESTUDIANTE

Secuencia de led con velocidad variable con el Timer0


Descripción: el estudiante debe implementar el programa y circuito donde se realiza:

- En este programa la rutina principal es una secuencia de leds que se encienden y apagan
uno tras otro, la característica es que se puede variar la velocidad apretando un botón
externo
- Se usan dos fuentes de interrupción: la del “Timer0” y la interrupción externa; por lo
cual el programa debe identificar cual es la rutina adecuada para cada una de las
interrupciones, esto se logra comparando las banderas de cada interrupción.
- Adicionalmente las banderas deben ser borradas en Software para evitar falsos disparos
de rutina.
- En la etiqueta INICIO del programa, se coloca en 1 y en 0 a dos pines del Puerto B, pero
cada vez que hay interrupcion del timer, pondra en 0 al pin que estaba en 1 y en 1 al que
estaba en 0, de esa manera se crea una forma de onda y es complementaria por ser
simétrica una de la otra.
- Con la función de la interrupción externa se cambia la velocidad del conteo, esto se logra
cambiando el prescaler del Timer 0. Es decir presionando el SW se puede manipular
externamente la velocidad de la secuencia

Ing. Javier Tarqui Valeriano


TECNOLÓGICO PUERTO DE MEJILLONES MICROCONTROLADORES I
CARRERA: ELECTRÓNICA CURSO 33-400

HOJA DE LABORATORIO

Programa 1

SIMULADOR (5%) CIRCUITO IMPLEMENTADO (10%)

Programa 2

SIMULADOR (10%) CIRCUITO IMPLEMENTADO (20%)

Integrantes del Grupo

Nombres y apellidos Practica s/45 Informe (s/15)

Ing. Javier Tarqui Valeriano

También podría gustarte