You are on page 1of 5

PRCCTICA 3

MICROPROCESADORES II
EJERCICIO 1: Mdulo CCP en modo captura
Realizar el programa que mida el periodo de una seal cuadrada de niveles
TTL y mostrarlo expresado en milisegundos y con un decimal de precisin
en tres displays de 7 segmentos. La seal cuyo periodo hay que medir,
procede de un generador de funciones que permite variar la frecuencia de la
seal. La medida se efectuar mediante el empleo del mdulo CCP1 de un
microcontrolador PIC16F877 ( PIC16F877A) trabajando en modo CAPTURA.
El valor mnimo del periodo ser de 0,1 ms (frecuencia mxima 10kHz) y el
valor mximo ser el correspondiente a la medida en 16 bits (65,535 ms
que corresponden a una frecuencia mnima de 15,25 Hz).
La medida efectuada se mostrar mediante 3 displays de nodo comn
utilizada en prcticas precedentes. Las conexiones realizadas a los pines del
microcontrolador PIC16F877 presente vienen reflejadas en las figuras 1 y 2
que se adjuntan con este enunciado. El microcontrolador dispone de un
oscilador de 4MHz.
La seal peridica se introducir en la lnea 2 del PORTC, asegurndonos de
que la salida seleccionada en el generador de funciones sea de nivel TTL y
verificando la polaridad de la misma.

En el supuesto de que el periodo de la seal fuera superior a 65,535 ms,


aparecern tres guiones en el centro de los displays para indicar que el
periodo est por encima del rango de medida:

Se utiliza el mdulo CCP1 en modo captura para detectar los flancos de


bajada en la seal peridica de entrada.
Se configura el TMR1 para que se incremente cada microsegundo y sta sea
por tanto la unidad de medida del periodo de la seal de entrada. El valor
mximo del periodo sin que desborde el TMR1 sera de 65535s, si se
supera este valor se advertir con una representacin especfica en los
displays: - - -
Se pondr a cero el TMR1 y se buscar la aparicin de un flanco de bajada
en RC2 para poner TMR1 a contar desde cero, se programar una
interrupcin para que en el momento en que se detecte el siguiente flanco
de bajada en RC2, se capture el valor presente en el TMR1 (TMR1H y
TMR1L) con los registros de CCPR1 (CCPR1H y CCPR1L).
Ese valor capturado en binario, se convertir a un formato de
representacin decimal para nuestra interpretacin y lectura directa en los
displays, por tal motivo se descompondrn los dos bytes obtenidos en sus
correspondientes dgitos BCD y se iluminarn los segmentos asociados a
cada dgito. Como slo disponemos de 3 displays, mostramos los 3 dgitos

decimales ms significativos y por tanto las unidades de medida mostradas


sern milisegundos, colocamos el punto decimal en el display del centro:

Para vigilar el posible desbordamiento de TMR1, se programa tambin la


interrupcin de este temporizador y en el supuesto de que se produzca tal
desbordamiento antes de que se detecte la aparicin del siguiente flanco,
detectado por el mdulo CCP, se mostrarn los 3 guiones en los displays
(por ejemplo con un cdigo distinto asignado en la tabla de bsqueda de los
segmentos a iluminar).
EJERCICIO 2: Mdulo CCP en modo PWM
Utilizar el Mdulo CCP1 de un microcontrolador PIC16F877 ( PIC16F877A)
en modo PWM para Realizar un programa que genere notas musicales de 2
octavas de un teclado musical correspondientes a las frecuencias que van
desde 261,1 Hz hasta 987,77 Hz. Las frecuencias para cada nota se
muestran en la figura 4.

Las 2 octavas
a ser
representadas

Figura 4.- frecuencias de las notas musicales


Utilice el CCP1 como salida del sonido, se recomienda que use teclados
matriciales 5x5 para las conectar las 24 teclas correspondientes a las 2
octavas. Para generar las frecuencias de las notas use por comodidad solo
CCPR1L y un Prescaler para TMR2=16. El tiempo en Duty o de trabajo (Ton)
debe ser el 50% del periodo, por tanto la duracin de los pulsos o de los
periodos (T) ser:
T=1/fHz = (PR2+1)* Prescaler_TMR2 * 4/4MHz
De esta ecuacin se obtiene el valor que se debe cargar a PR2 para obtener
el periodo correspondiente a cada una de las notas. El tiempo en Duty o de
trabajo (Ton) est dado por:
Ton=1/(2*fHz)=4*(CCPR1L) * Prescaler_TMR2 * 1/4MHz

De esta ecuacin se obtiene el valor que se debe cargar a CCPR1L para


obtener el tiempo Duty o de trabajo del periodo correspondiente a cada una
de las notas.
EJERCICIO 3: Mdulo CCP en modo PWM
Utilizar el Mdulo CCP1 de un microcontrolador PIC16F877 ( PIC16F877A)
en modo PWM para Control de un Servomotor de Posicin con PWM a travs
de un Potencimetro. La velocidad de un Servomotor de Posicin vara en
funcin de del tiempo Duty o de trabajo del periodo correspondiente. Por
tanto el tiempo de trabajo ir cambiando para variar la velocidad del
Servomotor de Posicin, este tiempo de trabajo ser generado por el
potencimetro por medio del modulo de conversin A/D. el voltaje de
entrada por RA0 ser almacenado en su equivalente binario en el registro
ADRESH y luego copiado a CCPR1L para poder variar el tiempo de trabajo. El
Mdulo CCP1 debe generar una frecuencia de 244,14 Hz, esto se consigue
con un PR2=0xFF y un Preescaler de 16 en TMR2. Recuerde que la seal
analgica en este ejercicio en particular debe ingresar por RA0, por tanto
debe definir esta entrada analgica y los voltajes de referencia, que sern
los de alimentacin del PIC, en el ADCON1. Seleccionar el canal de
conversin (canal 0) en EL ADCON0. El esquema de este circuito se muestra
en la figura 5.

Figura 5.- Esquema de Control de un Servomotor de Posicin con PWM