Date post: | 18-Dec-2015 |
Category: |
Documents |
Upload: | carlos-tito |
View: | 25 times |
Download: | 3 times |
PRCTICA 4
LOS TEMPORIZADORES PROGRAMABLES DEL PIC16F877
OBJETIVO:
Identificar los diferentes temporizadores disponibles en el MCU PIC16F877, sus modos de operacin, preescaladores (pre-divisores de frecuencia) y post-escaladores (post-divisores de frecuencia).
Configurar adecuadamente los registros de control asociados al Timer0 para que funcione en modo temporizador.
Configurar adecuadamente los registros de control asociados al Timer1 para que funcione en modo contador.
INTRODUCCIN
El microcontrolador PIC16F877 tiene implementado un sofisticado mdulo de temporizadores. Estos estn disponibles para aquellos usuarios que manejen aplicaciones que requieran que decisiones de control sean hechas en tiempo real. Este mdulo est conformado por:
Timer0. Timer1. Timer2.
De los tres, el Timer0 es el ms empleado, ya que los dos ltimos suelen ser usados en forma individual o como perifrico de apoyo para el mdulo CCP (Capture/Compare/PWM).
MATERIAL Y EQUIPO EMPLEADO
Laboratorio equipado con computadoras que tengan instalado el MPLAB versin v7.40 o superior y el Pickit v2.0.
Cantidad 1 1155 1 1
Descripcin Programador compatible con Pickit 2.0 Microcontrolador PIC16F877Push-buttonLedsResistencias de 330 Resistencia de 10 k Diodo 1N4148
11
Protoboard Generador de funciones
Eduardo Romero A. / Alejandro Aganza T. Laboratorio de Sistemas Digitales III
Prcticas con el PIC16F877
1 Osciloscopio 1 Fuente de alimentacin de CD
Pre-reporte:
Leer previamente toda la prctica.
Investigar en la hoja de datos del PIC16F877, los diagramas a bloques de la arquitectura interna del Timer0, Timer1 y Timer2.
Llevar implementado en un protoboard los circuitos de la figura 8.1 y 8.2.
DESARROLLO:
I. El Timer0
El Timer0 es un temporizador/contador que consta de un registro de 8 bits (TMR0) que puede ser escrito o ledo en cualquier instante. Puede ser programado (con el bit T0CS) para incrementar su conteo ya sea con impulsos externos en la terminal RA4/T0CKI (modo contador) o por medio de la seal interna Fosc/4 (modo temporizador). De igual forma, con la ayuda del bit T0SE es posible configurar el flanco con el que el conteo se incrementar en el caso que la seal sea externa.
Asimismo, cuando el conteo del TMR0 pasa del valor FFh al 00h, se activa la bandera T0IF en el registro INTCON. Con ella es posible programar una interrupcin cada vez que se presente este evento por medio del bit T0IE.
Cabe sealar que cada vez que se ejecuta una instruccin de escritura que modifica el valor en el registro TMR0, se producir un retardo de dos ciclos de instruccin durante los cuales se inhibe tanto el predivisor como el TMR0. Ser necesario tener en cuenta esa inhibicin temporal a la hora de realizar una precarga (compensar sumando los ciclos de instruccin que se pierden).
1. Edite un archivo con el programa fuente que aparece a continuacin.
; Programa que rota cada segundo un led a la derecha en el ; puerto B, usando interrupciones por desborde del Timer0
LIST P=16F877RADIX HEXINCLUDE "p16f877a.inc"
cblock 20hCONT_DES ; Contador de desbordes de TMR0 ST_TEMP ; Copia del registro STATUS
endc
org 0goto INICIO
Eduardo Romero A. / Alejandro Aganza T. Laboratorio de Sistemas Digitales III
org 4goto ISR_T0IF
;----- Subrutina que configura al puerto B como salida------ CONF_PUERTOS
bsf STATUS,RP0 ; conmuta a banco 1 clrf TRISB ; Puerto B = salidabcf STATUS,RP0 ; conmuta a banco 0 movlw b'0001000'movwf PORTB ; Puerto B = 0001 0000 movf STATUS,w ; Guarda el estado del movwf ST_TEMP ; registro STATUSreturn
;----- Subrutina que configura al Timer0 -------------------- CONF_TIMER0
bsf STATUS,RP0 ; Banco 1movlw b'11010101' ; Timer0 en modo temporizador movwf OPTION_REG ; configura preesc. para el timer0 bcf STATUS,RP0 ; Banco 0bsf INTCON,T0IE ; Activa int. por desbordes en TMR0 return
; ---- Programa principal ----------------------------------- INICIO
call CONF_PUERTOScall CONF_TIMER0movlw .62movwf CONT_DES ; CONT_DES
3. Implemente el circuito de la figura 8.1, descargue el programa al PIC y ejectelo.Verifique el funcionamiento del circuito viendo el comportamiento de los leds.
Figura 8.1: Circuito de experimentacin para el Timer0.
4. Observe que el programa principal est formado por 9 lneas y bsicamente lo quehace es inicializar la variable CONT_DES, configurar el Timer0, establecer el valor inicial del registro TMR0 y permanecer en un ciclo ocioso. Cada vez que se desborde el registro TMR0, el PIC generar una interrupcin y realizar las tareas programadas en la rutina de servicio, las cuales en este caso son decrementar el contenido de CONT_DES y cuando sea cero realizar el desplazamiento a la derecha de un bit en el puerto B.
5. Del archivo fuente anterior, dentro de la subrutina que configura al Timer0, localice lalnea de cdigo
movlw b'11010101' ; Timer0 en modo temporizador
sustityala ahora por la siguiente:
movlw b'11010000' ; Timer0 en modo temporizador
Almacene el archivo, reensamble el proyecto, descargue el programa al PIC y ejectelo. Cul es el comportamiento de los leds ahora?
________________________________________________________________________
________________________________________________________________________
Exactamente qu fue lo que hizo la nueva lnea de cdigo?
________________________________________________________________________
Eduardo Romero A. / Alejandro Aganza T. Laboratorio de Sistemas Digitales III
De qu manera influye en el programa?
________________________________________________________________________
Cul es el tiempo que permanecern encendidos los leds con este cambio?
________________________________________________________________________
Escriba la frmula mediante la cual es posible calcular el tiempo que dura el retardo.
________________________________________________________________________
6. Analizando la rutina de servicio de interrupcin del Timer0, puede notarse que lafuncin de la penltima lnea de cdigo es fundamental para el buen funcionamiento del programa. Explique: Por qu?
________________________________________________________________________
________________________________________________________________________
7. Verifique su respuesta eliminando del programa la lnea de cdigo a la que hacereferencia el punto anterior, compile el proyecto, reprograme el PIC y ejectelo. Qu es lo que sucede ahora?
________________________________________________________________________
________________________________________________________________________
II. El Timer1 en modo contador
El Timer1 es un mdulo temporizador/contador ascendente de 16 bits que puede ser escrito o ledo en cualquier instante, est implementado en dos registros especficos TMR1H y TMR1L, que contienen el valor de las cuentas a cada momento. El valor del registro TMR1H-TMR1L incrementa desde 0000h hasta FFFFh, el cual al reanudar la cuenta activa el sealizador TMR1IF.
Como fuente de impulsos de reloj existen tres alternativas:
Generacin interna (4*Tosc).
Generacin mediante un oscilador externo controlado por cristal que se conecta ala pin RB6/T1OSO/T1CKI/PGC y RB7/T1OSI/PGD. El oscilador se activa poniendoa 1 el bit T1OSCEN del registro T1CON. El bit del TMR1CS del registro T1CONselecciona entre reloj interno y externo
Trabajar en modo contador de eventos, cuando los impulsos externos a contar seintroducen al pin RB6/T1OSO/T1CKI/PGC. La fuente de los impulsos de reloj se aplica al divisor de frecuencias (Preescaler) que los divide por 1, 2, 4 y 8, segn el valor de los bits T1CKPS0 y T1CKPS1 del registro T1CON.
Eduardo Romero A. / Alejandro Aganza T. Laboratorio de Sistemas Digitales III
Tomando en cuenta estas caractersticas se pueden realizar retardos mayores sin utilizar los desbordes hasta cierto lmite, dependiendo de la base de tiempo del microcontrolador.
8. Edite un archivo con el programa fuente que aparece a continuacin.
; Programa que mide la frecuencia de una seal ; introducida por el pin RC0 como base de tiempo de TMR1.
LIST P=16F877A ; Tipo de ProcesadorINCLUDE "p16f877A.inc" ; librera del PIC16F877A
cblock 20hCONT_DES ; Contador de desbordesendc
org 0x00goto INICIO
org 0x04goto ISR_TMR0 ; Servicio de interrupcin
;----- ISR debido a desborde en TMR0 ------------------------- ;------ cada 50 mS aproximadamente --------------------------- ISR_TMR0
btfss INTCON,T0IFgoto AUN_NO
UN_SEG decfsz CONT_DES,F ; Decrementa desbordesgoto AUN_NO ; Desbordes = 0? No
Valor_TMR1 bcf T1CON,TMR1ONmovf TMR1H,W ; Leer el valor de la parte alta movwf PORTB ; de TMR1 y lo despliega en PORTB movf TMR1L,W ; Leer el valor de la parte baja movwf PORTD ; de TMR1 y lo despliega en PORTD
movlw .20 ; Reinicia contador de desbordesmovwf CONT_DES ; CONT_DES
;----- y al pin T1CKI como entrada para TMR1 ------------------ CONF_PUERTOS
bsf STATUS,RP0 ; conmuta a banco 1clrf TRISB ; Puerto B como salidaclrf TRISD ; Puerto D como salidabsf TRISC,0 ; RC0/T1CKI como entrada
; Pin T1CKI como entradabcf STATUS,RP0 ; conmuta a banco 0clrf PORTBclrf PORTDreturn
;----- Subrutina que configura al TMR1 en modo contador ---------- ;----- eventos externos por T1CKI -------------------------------- CONF_TMR1
movlw b'00000110' ; Configura TMR1 en modomovwf T1CON ; contador de eventos no sinc.clrf TMR1L ; Borrar registro de TMR1clrf TMR1Hreturn
;----- Subrutina que configura al Timer0 -------------------- CONF_TIMER0
bsf STATUS,RP0 ; Banco 1movlw b'11000111' ; Timer0 en modo temporizadormovwf OPTION_REG ; configura preesc. para el
timer0 bcf STATUS,RP0 ; Banco 0bcf INTCON,T0IF ; Desactiva bandera del TMR0bsf INTCON,T0IE ; Act. int. por desbordes en
TMR0 movlw .20movwf CONT_DES ; CONT_DES
escala adecuada en el generador, vare la frecuencia hasta que se observe en el osciloscopio que el periodo de la seal sea de 10ms.
Figura 8.2: Circuito de experimentacin para el Timer1.
11. Observe que el programa principal est formado por 6 lneas y bsicamente lo quehace es configurar los puertos, al Timer0 en modo temporizador, al Timer1 en modo contador asncrono, encender el Timer1, habilitar la mscara global de interrupciones y entrar en un ciclo ocioso a espera de la interrupcin de 50 mS de TMR0.
Durante el transcurso de las interrupciones de TMR0, el temporizador TMR1 recibe impulsos de reloj provenientes del generador de funciones, lo cual ocasiona que la cuenta de sus registros (TMR1H y TMR1L) incremente su valor. Se realiza un tiempo de muestreo con el TMR0 (programa anterior), las muestras capturadas se guardan en los registros
Cada vez que se llevan a cabo los 20 desbordes del temporizador TMR0 o su equivalente a un segundo, el PIC generar una interrupcin y realizar las tareas programadas en la rutina de servicio, las cual en este caso es recargar el valor de inicio de TMR0 en caso de no haber transcurrido el tiempo de un segundo y mostrar el valor de los registros TMR1H:TMRL, por los puertos B y D respectivamente.
Qu valor muestran los leds conectados a los puertos B y D? Tome en cuenta que el bit RB7 es el ms significativo y RD0 el menos significativo.
Valor de los puertos: _______________________________________________________
Eduardo Romero A. / Alejandro Aganza T. Laboratorio de Sistemas Digitales III
Anote el valor en decimal del dato mostrado en los leds de los puertos B y D, y el valor de la cartula del generador de funciones.
Valor mostrado en los puertos: _______________________
Valor mostrado en el generador: ______________________
Cmo son entre si?
________________________________________________________________________
Existe mucha diferencia entre los valores mostrados en los leds y el mostrado por el generador de funciones?____________________________________________________
A qu se debe esto?
________________________________________________________________________
________________________________________________________________________
Vare el valor de frecuencias de entrada al pin RC0, encuentre el rango de frecuencias en el que los valores mostrados en los leds son aproximados a los mostrados en la cartula del generador de funciones.
Cul fue el rango obtenido? Escriba el valor mximo y mnimo.
_______________________________________________________________________
A que se debe que el rango de medicin sea limitado?
________________________________________________________________________
Cmo se puede incrementar el rango de medicin? Justifique su respuesta.
________________________________________________________________________
________________________________________________________________________
Si incrementa mucho el valor de frecuencia es posible que el resultado mostrado sea mucho menor al valor real, Cul es la razn de esto?, Cmo se puede evitar este efecto?
________________________________________________________________________
________________________________________________________________________
12. Del archivo fuente anterior, dentro de la subrutina que configura al Timer1, localice lalnea de cdigo
movlw b'00000110' ; Configura TMR1 en modo
Eduardo Romero A. / Alejandro Aganza T. Laboratorio de Sistemas Digitales III
sustityala ahora por la siguiente:
movlw b'00000010' ; Configura TMR1 en modo
Almacene el archivo, reensamble el proyecto, descargue el programa al PIC y ejectelo. Cul es el comportamiento de los leds ahora? Vari la exactitud del resultado mostrado en los leds?
________________________________________________________________________
________________________________________________________________________
Exactamente qu fue lo que hizo la nueva lnea de cdigo?
________________________________________________________________________
De qu manera influye en el programa?
________________________________________________________________________
Vare el rango de frecuencia de entrada en el pin RC0, cmo es en comparacin con el punto 11?
________________________________________________________________________
A qu se debe esto? Justifique su respuesta.
________________________________________________________________________
________________________________________________________________________
13. Analizando la rutina de servicio de interrupcin del Timer0, puede notarse que lafuncin de la lnea de cdigo antes de las instrucciones retfie son fundamentales para el buen funcionamiento del programa. Explique: Por qu?
________________________________________________________________________
________________________________________________________________________
14. Verifique su respuesta eliminando del programa las lneas de cdigo a la que hacereferencia el punto anterior, reensamble el proyecto, reprograme el PIC y ejectelo. Qu es lo que sucede ahora?
________________________________________________________________________
________________________________________________________________________
Eduardo Romero A. / Alejandro Aganza T. Laboratorio de Sistemas Digitales III
EJEMPLOS DE TIMER0, TIMER1 Y TIMER2 EN C.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Generar una seal cuadrada de 1 kHz utilizando la
interrupcin TIMER0.
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Para generar una seal de 1 kHz se necesita un semiperiodo de 500 .
Segn la ecuacin de desbordamiento del K, utilizando un cristal de 4 MHz y
un prescaler de 2:
= . . 256 0
500 =4
4000000. 2. 256
= 6
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
El TIMER0 se debe cargar con el valor 6. Pero esta relacin solo se cumple si
se trabaja en ensamblador. Al trabajar en C, el compilador genera lneas de
cdigo que aumentan el tiempo de ejecucin del programa y ,por ello, es
necesario ajustar el valor final. En este caso se ha utilizado un valor de carga
de 27.
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Generar una funcin que permita realizar retardos
de 1 segundo empleando TIMER1.
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Se calcula un periodo parcial de 0.5 segundos y se repite dos veces (usando
un prescaler de 8) :
= . . 65536 1
0.5 =4
4000000. 8. 65536
= 3036 1
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
Generar una seal cuadrada de 1kHz utilizando la
interrupcin del TIMER2.
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
Para generar una seal de 1 kHz se necesita un semiperiodo de 500 .
Segn la ecuacin de desbordamiento del TIMER2, utilizando un cristal de 4
MHz y un prescaler de 4 y un postscaler de 1:
= . . 2 + 1 .
500 =4
4000000. 4. + 1 . 1
= 125
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
El TIMER2 se debe cargar con el valor 125. Pero esta relacin solo se cumple
si se trabaja en ensamblador. Al trabajar en C, el compilador genera lneas
de cdigo que aumentan el tiempo de ejecucin del programa y ,por ello, es
necesario ajustar el valor final. En este caso se ha utilizado un valor de carga
de 11.
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
PRCTICA 8LOS TEMPORIZADORES PROGRAMABLES DEL PIC16F877MATERIAL Y EQUIPO EMPLEADO
EJEMPLOS DE TIMER0, TIMER1 Y TIMER2 EN C.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Generar una seal cuadrada de 1 kHz utilizando la
interrupcin TIMER0.
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Para generar una seal de 1 kHz se necesita un semiperiodo de 500 .
Segn la ecuacin de desbordamiento del K, utilizando un cristal de 4 MHz y
un prescaler de 2:
= . . 256 0
500 =4
4000000. 2. 256
= 6
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
El TIMER0 se debe cargar con el valor 6. Pero esta relacin solo se cumple si
se trabaja en ensamblador. Al trabajar en C, el compilador genera lneas de
cdigo que aumentan el tiempo de ejecucin del programa y ,por ello, es
necesario ajustar el valor final. En este caso se ha utilizado un valor de carga
de 27.
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 1.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Generar una funcin que permita realizar retardos
de 1 segundo empleando TIMER1.
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Se calcula un periodo parcial de 0.5 segundos y se repite dos veces (usando
un prescaler de 8) :
= . . 65536 1
0.5 =4
4000000. 8. 65536
= 3036 1
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 2.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
Generar una seal cuadrada de 1kHz utilizando la
interrupcin del TIMER2.
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
Para generar una seal de 1 kHz se necesita un semiperiodo de 500 .
Segn la ecuacin de desbordamiento del TIMER2, utilizando un cristal de 4
MHz y un prescaler de 4 y un postscaler de 1:
= . . 2 + 1 .
500 =4
4000000. 4. + 1 . 1
= 125
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
El TIMER2 se debe cargar con el valor 125. Pero esta relacin solo se cumple
si se trabaja en ensamblador. Al trabajar en C, el compilador genera lneas
de cdigo que aumentan el tiempo de ejecucin del programa y ,por ello, es
necesario ajustar el valor final. En este caso se ha utilizado un valor de carga
de 11.
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM
Ejemplo 3.
Universidad Catlica de Santa Mara-PPIMMEM