You are on page 1of 6

UNIVERSIDAD TCNICA DEL NORTE FACULTAD DE CIENCIA APLICADAS CIME SISTEMAS MICROPROCESADOS

TEMA: RELOJ EN TIEMPO REAL UTILIZANDO EL TIMER1 DEL ATMEGA324P Y UN OSCILADOR EXTERNO DE 32KHZ

INTEGRANTES: TABITA QUILUMBAQUIN SANTIAGO ROBLES EDWIN RUIZ FERNADO VILLALBA

IBARRA, 12 DE JULIO DEL 2012

INFORME DE LA PARCTICA TEMA: Reloj en tiempo real utilizando el timer1 del Atmega y un oscilador externo de 32khz. OBJETIVOS Objetivo General: Usar el timer1 para generar una onda cuadrada de un segundo exacto. Objetivos Especficos Configurar los registros del timer1 para trabajar un generador de pulsos externos (usar un cristal externo de 32khz) Usar la LCD para mostrar el tiempo que genera el timer1. Comprobar el funcionamiento de los perifricos de salida con el montaje realizado en un protoboard . MARCO TERICO LOS TIMERS Los timers son registros contadores ascendentes los atmega164p poseen tres timers: timer 0, timer 1 y timer 2 se configuran mediante los bits de los registros de control pueden trabajar en forma dependiente del programa o por medio de interrupciones. CAPACIDADES DE LOS TIMERS El timer / contador 0 es de 8 bits con pwm El timer / contador 1 es de 16 bits con pwm, tiene capacidad de captura El timer / contador 2 es de 8 bits con pwm, tiene capacidad de trabajar en forma asincrnica

TIMER1 Los sistemas BasicX tienen un temporizador integrado denominado Timer1. Este temporizador puede utilizarse para mltiples funciones, una de las cuales es medir los intervalos de tiempo, que es el que vamos a analizar en esta nota de aplicacin. El temporizador puede operar con 5 frecuencias de marcacin discretas que oscilan entre los 7,20 a los 7.37 MHz aproximadamente, lo que significa que puede utilizar el temporizador Timer1 para medir intervalos de tiempo que oscilen entre 136 ns y 139 ms. Por qu utilizar un temporizador Timer1? En algunos casos no se puede utilizar el reloj de tiempo real integrado para medir los intervalos de tiempo. Esto es posible si utiliza llamadas del sistema PulseIn o RCtime para medir los intervalos de tiempo superiores a 2 ms, que potencialmente pueden interferir con el reloj de tiempo real. Otra razn para utilizar el temporizador Timer1 es medir los intervalos de tiempo con resoluciones menores que la que ofrece el reloj de tiempo real, que tiene una tasa de marcacin de 512 Hz. Las tasas de marcacin de Timer1 son como mnimo 10 veces inferiores.

DIAGRAMA DE BLOQUES DEL TIMER 1

Modo de uso del temporizador Timer1 Iniciacin El temporizador debe iniciarse antes de empezar a utilizarlo. El primer paso es poner a cero el registro de control TCCR1A del temporizador Timer1. As se desconecta el Timer1 de los pines de salida OC1A y OC1B, y desactiva la operacin PWM del temporizador: Register.TCCR1A = 0 El siguiente paso es borrar los 2 bytes del contador del Timer1. El byte alto debe escribirse en primer lugar, y a continuacin el byte alto: Register.TCNT1H = 0 Register.TCNT1L = 0 El ltimo paso de la iniciacin es borrar el indicador de desbordamiento TOV1, que corresponde con un bit en el registro TIFR. Tenga en cuenta que escribir un valor lgico 1 para el bit acabara borrndolo: Const TOV1 As Byte = bx10000000 ' BX-01 Const TOV1 As Byte = bx00000100 ' BX-24, BX-35 Register.TIFR = TOV1

Arranque del temporizador Timer1 Una vez que el Timer1 ha sido iniciado, se puede arrancar el temporizador escribiendo uno de los 5 valores enumerados para uno de los registros de control (TCCR1B) del temporizador. Los valores disponibles aparecen a continuacin: Rango de Resolucin Frecuencia tiempo de pulsos mximo del timer (s). (ms) (Hz)
0.135 633 7 1.085 069 8.680 555 34.722 22 138.888 9 7 373 800 921 600 115 200 28 800 7 200 0.008 889 0.071 11 0.568 9 2.276 9.102

Valor TCCR1B
1 2 3 4 5

Lectura del temporizador Timer1 Una vez que se ha arrancado el temporizador, puede leerlo en cualquier momento a travs de los dos registros de tiempo TCNT1L y TCNT1H. Para leer el contador, debe leer el valor de byte bajo, y a continuacin, debe leer el valor inferior del byte y despus el valor superior (al contrario que el proceso de escritura del contador, en el que el valor superior debe escribirse antes): Dim LowByte As Byte, HighByte As Byte, Count As Long LowByte = Register.TCNT1L HighByte = Register.TCNT1H Count = CLng(HighByte) * 256 + CLng(LowByte) SIMULACION:

CODIGO: /* * intento_1_timer1_reloj.c * * Created: 09/07/2012 16:55:15 * Author: user */ #include <avr/io.h> #include<avr/interrupt.h> #include <util/delay.h> #include <stdio.h> #include <avr/pgmspace.h> #define F_CPU 8000000UL #include "lcd_lib.h" //---caracteres a usar--unsigned char seg=0; unsigned char min=0; unsigned char hora =0; //----inicio de la lcd a 4 bits-static int LCDsendstream(char c, FILE *stream); static FILE lcd_str = FDEV_SETUP_STREAM(LCDsendstream, NULL, _FDEV_SETUP_WRITE); static int LCDsendstream(char c , FILE *stream) { LCDsendChar(c); return 0; }

ISR(TIMER0_OVF_vect) { seg ++; if (seg >=20)//CUENTA EL TIEMPO { seg=0; PORTB ^=(1<<PB0); //EXORT } TCNT0 = 177;//CARGAR DENUEVO EL NUMERO } int main(void) { DDRB|=(1<<PB0); PORTB&=~(1<<PB0);//pi n como salida TCCR0A=0x00;//CONFIGURACION EN MODO NORMAL TCCR0B=0X05;//PRESCALER DE 1024 VALOR 101

TIMSK0|=(1<<TOIE0); sei(); TCNT0=177; stdout=&lcd_str; // Iniciando LCD Stream LCDinit(); //init LCD bit, dual line, cursor right LCDclr(); //clears LCD LCDclr(); LCDGotoXY(1, 0); printf(" Contador"); while(min<10) //loop demos { min++; LCDGotoXY(1,1); printf("%d",min); _delay_ms(100); } // } return 0;

BIBLIOGRAFIA: http://es.scribd.com/doc/19073773/Capitulo7-Timer1-del-AVR-del-ATmega32espanol http://microcontroladores2utec.wordpress.com/2009/12/01/proyecto-relogdigital-basico-con-atmega/ http://relojatmegadigital.blogspot.com/ http://www.datasheetcatalog.org/datasheet/vishay/016m002b.pdf

You might also like