sábado, 13 de abril de 2019

LABORATORIO NRO 7

LABORATORIO NRO 7

MANEJO DEL TIMER Y LAS INTERRUPCIONES

1. OBJETIVOS
  • Conocer el funcionamiento y la configuración de las Interrupciones 
  • Conocer el funcionamiento y la configuración del Timer cero 
  • Aplicar estos conocimientos en la realización de un cronómetro.
2. MATERIALES Y EQUIPOS
  • CCS Compiler instalado.
  • Entrenador de PICS
  • Pantalla LCD
  • PIC16F877A
  • Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
  • PC con Software de simulación.
3. FUNDAMENTO TEÓRICO

3.1. TIMER 0

El timer0 PIC es un temporizador contador de 8 bits, el registro TMR0 es el temporizador contador timer0 en si, es donde se guardan los valores del timer0 PIC, cuando es utilizado como temporizador sus valores aumentaran de uno en uno entre 0 y 255 con cada 4 ciclos de reloj, no olvidar que cada ciclo de instrucción del microcontrolador PIC es realizado en 4 ciclos de reloj, por ejemplo si el oscilador con el que está funcionando el microcontrolador PIC es de 4MHz, entonces el registro TMR0 aumentará una unidad en cada 1us, si el registro TMR0 se incrementa en 100 unidades habrán transcurrido 100us; cuando el timer0 PIC es utilizado como contador el registro TMR0 ya no aumenta su valor de uno en uno en cada 4 ciclos de reloj, sino que lo hará mediante el flanco de subida o el flanco de bajada de alguna señal que llegue a un pin especial del PIC conectado al timer0 PIC, este pin es identificado como T0CKI que en el PIC16F877A es el pin6 o RA4, esto puede variar de acuerdo al microcontrolador PIC utilizado, pero siempre se llamará T0CKI.

El registro TMR0 del timer0 PIC puede ser leído y escrito, puede ser prescalado para que el tiempo en su incremento de valor en una unidad sea mayor, el timer0 PIC cuando alcanza su valor máximo de 255 se reinicia, volviendo a incrementar sus valores de 0 a 255, además cuando llega a su valor máximo y se reinicia puede producir una interrupción, lo que se decide por programa.



3.1.1. TIMER PIC COMO TEMPORIZADOR

Se verá en este caso el uso del timer0 PIC como temporizador, normalmente el registro TMR0 del timer0 PIC irá aumentando sus valores con cada ciclo de instrucción del microcontrolador PIC, y para estos microcontroladores a cada ciclo de instrucción le toma 4 ciclos del oscilador que se esté utilizando, si se usa por ejemplo un cristal de Fosc=4Mhz entonces cada ciclo del oscilador será de 0,25us, luego cada ciclo de instrucción tardará 4 veces este valor, es decir 4*(0,25us) lo que viene a ser 1us, a esto se se conoce como ciclo máquina TCM=4/Fosc, entonces el registro TMR0 aumentará en una unidad cada microsegundo cuando el oscilador es de 4Mhz.

Como el registro TMR0 es de 8 bits este aumentará desde 0 o desde algún valor que se le ponga como valor inicial hasta un máximo de 255, por ejemplo si va desde 0 hasta 255 habrán transcurrido 255us luego volverá a 0 pero en esa vuelta a 0 transcurre 1us mas, por lo que en ir de 0 a 255 y volver a 0 transcurren 256us; no siempre se utiliza una FOSC de 4Mhz esto puede variar, por lo que como consecuencia variará el tiempo que trascurre para que el registro TMR0 aumente su valor en una unidad.

El temporizador contador pic TMR0 cuenta con lo que se conoce como prescaler esto hace que la frecuencia de trabajo FOSC se divida por este prescaler, con lo que se logra que el temporizador contador pic tarde un poco mas en aumentar su valor en una unidad; el prescaler del time0 PIC para el PIC16F877A puede tomar el valor de 1, 2, 4, 8, 16, 32, 64, 128 o 256

Si el prescaler elegido es por ejemplo de 64 y la FOSC=4Mhz, entonces la frecuencia de trabajo del temporizador Ftempserá de Ftemp=FOSC/(4*prescaler), el tiempo que tardará ahora el temporizador en aumentar una unidad será la inversa de este valor, a lo que se le conoce como periodo del temporizador Ttemp=(4*prescaler)/(FOSC), por lo que en este caso Ttemp=(4*64)/(4Mhz) de donde Ttemp=64us, esto quiere decir que ahora el temporizador aumentará en una unidad cada 64us y en este caso entonces el registro TMR0 para ir de 0 a 255 tardará 255*Ttemp=255*64us=16320us=16,32ms, la misma idea es para los demás prescaler.


Utilizando una regla de 3 simple se llega a la siguiente ecuación que ayudará a encontrar el valor inicial adecuado a cargar en el registro TMR0 para obtener el tiempo buscado.

TMR0=28-Tretardo*(Fosc/(4*prescaler))-1

3.2. INTERRUPCIONES

Interrupciones con el PIC, los microcontroladores PIC se programan para que realicen tareas de acuerdo a lo que interese, normalmente realizarán esas tareas en forma ordenada una tras otra en forma cíclica, a esto se le conoce como el programa principal; las interrupciones microcontroladores con el PIC son eventos que hacen que el programa principal se detenga, para que el microcontrolador PIC se dedique ha realizar otras tareas, mientras no ocurra una interrupción el microcontrolador solo realizará las tareas indicadas dentro del programa principal.

4. VÍDEO

https://drive.google.com/file/d/1sZQM6fxlMpdrrRymRq9CMjUAl9VYSjU6/view?usp=sharing

5. OBSERVACIONES
  • Se utilizo #int_TIMER0 para llamar a la función de interrupción
  • Se usaron sentencias condicionales dentro de la función de desbordamiento del TIMER
  • Se habilito y deshabilito las interrupciones del timer para iniciar la temporización
  • Se asignaron valores para que cuando el TIMER se desborde reinicie en el valor asignado
  • Se uso una función BIP creando un tren de pulsos para emitir pitidos segun las actividades planteadas
6.CONCLUSIONES
  • Se conoció el modo de funcionamiento del TIMER0
  • Se usaron interrupciones en la programación
  • Se usaron el timer y las interupciones juntas para programar un cronómetro que puede hacer una cuenta ascendente o descendente
7. INTEGRANTES
  • Corimanya Castelo, Laura Milagros

1 comentario: