Está en la página 1de 5

Frecuencimetro:

La propuesta para la implementacin del frecuencmetro consiste en utilizar el Timer1 como contador de eventos
externos y el Timer0 como temporizador. La idea bsica del uso de ambos timers es que con uno de ellos El timer0- Se
cre una ventana de tiempo en el cual se contarn los pulsos de entrada mediante el uso del timer1 como contador. Se
tuvo en consideracin el hecho de que el timer0 es de 8bits, luego esta limitado a la hora de temporizar tiempos muy
grandes. As mismos se escogi el timer1 para contar los pulsos ya que al ser de 16 bits permite contar hasta 65536
pulsos, lo cual, si se escoge una ventana de tiempo de un segundo, se podra llegar a tener una medicin de 65536Hz.
Entonces el programa consiste en temporizar 500us Para ello, el timer0 se carga con un valor de 254 configurado a una
frecuencia de 4Mhz con un Preescaler de 256. Se configuro tambin la interrupcin por desbordamiento de Timer0, luego
cada vez que se temporicen 500us se atiende la interrupcin en la cual se aumenta una variable etiquetada con Veces",
adems de obtener el valor de los pulsos que se han contado con el timer1; una vez veces alcance el numero de 4, se
hace el calculo para la frecuencia, que para cuando veces sea igual a 4 se calcula de la siguiente manera:

Freq = ((pulses*4)*3,8382)-9,6
Donde pulses ser la variable que contenga el numero de pulsos capturados por el timer1. Es preciso aclarar que el
anterior proceso se repite cada vez que se entra al condicional que permite el calculo de la frecuencia; dentro de dicho
condicional se reestablece la variable veces para garantizar que el proceso siempre se repita cada vez que veces
alcance el valor de 4 evitando asi que se cree un acumulado de la frecuencia. Asi mismo, cada vez que se repite el
calculo de la frecuencia el timer1 es puesto a cero para que empiece de nuevo la cuenta de pulsos, pulsos que son
obtenidos por el pin RC0 del microcontrolador PIC16F877A. La frecuencia ser mostrada de manera peridica en una LCD.
Nota: El valor de 3,8382 fue calculado empricamente con prueba y error para corregir algunos desfases de la frecuencia
leda; de igual modo para el nmero 9,6, se calcularon para ajustar las desviaciones que se tenan a la hora de hacer
cada medicin de frecuencia. Lo anterior desde luego que incurren en la precisin del frecuencmetro.

Diagrama de Flujo Frecuencmetro

Frecuencme
tro

Configuracin:
Entradas:
Salida:
Frecuencia RC0 LCDPORTD
-Timer1: Contador PS(1:1) Edge: L to H
Interrupciones:
Timer0: Teporizador(500us) PS(1:256)

TMR0
Obtener pulsos de
Timer1
Aumentar veces en
(1)
Timer0 se
ha
desborda
do 4
veces

si

LCD Freq

Freq = ((pulses*4)*3,8382)9,6;
Timer1= 0;
Poner en cero el valor de
veces

RETFI
E

Generador :
La propuesta para la implementacin del generador consiste en usar dos fuentes de interrupcin una para la seleccin de las frecuencias ( interrupcin por parte alta de puerto
B) y la interrupcin por desbordamiento de timer0 para generar las seales cuadradas requeridas. Se cuentan con dos botones, F0 y F1, cada uno designado para frecuencias
de onda diferentes. La interrupcin por parte alta del puerto se configura de tal modo que el pin RB4 corresponda a F0 y el pin RB5 a F1. Cuando F0 es presionado se entra en la
interrupcin por parte alta del puerto B, luego dentro de la interrupcin se define cual pin ha sido presionado, y como se ha presionado F0, se pone en un 1 una variable
llamada seleccin la cual indica que se ha escogido la frecuencia de 2Khz y se carga el timer0 para que temporice 250us a dems de aumentar en 1 la variable contador. La
razn de temporizar este tiempo, viene del hecho de que se requiere generar un seal cuadrada de 2k con un ciclo til de 50%, se tienen las siguientes consideraciones para la
generacin de la seal:
F = 2kHz T= 1/2000 = 0,0005s= 500us

250us
250us
500us
As entonces se cumple que en una vez atendida la interrupcin por parte alta del puerto B y sabiendo que botn ha sido presionado, se cambia de estado el pin C3 dejndolo
en alto y temporizan do los 250us que durar el pin en alto, luego, una vez se ha desbordado el timer0, esto es, han pasado 250us, se entra en la interrupcin por
desbordamiento de timer0, en la cual previamente se ha definido para que frecuencias se debe configurar con la variable seleccin- y se cambia el estado del pin c3 a bajo y
contador se aumenta en uno ( ahora tienen el valor de 2) e inmediatamente cargando el timer0 para que este cuente de nuevo los 250us, si esta variable contador es igual
a 1 es porque el estado del pin c3 era alto y si es igual a 2 es porque el estado ahora es bajo, una vez se desborde va a volver a entrar en la interrupcin de timer0, pero
sabiendo de antemano a que situacin de conduccin entrar: a poner el pin en alto o en bajo, segn el valor de contador. De esta manera la seal se genera continuamente
hasta que se pulse el otro botn.
Cuando se presiona el botn F1 la seal a generar es una onda cuadrada de 5khz con un ciclo til del 70%. La lgica para generar la salida es simular que la anterior teniendo
en cuenta que ahora el timer ha de ser cargada con la temporizacin para 140us
frecuencia y ciclo til requerido:
F= 5khz T = 1/5000 = 200us ciclo til de 70% 140us

60us
200us

Lo que difiere ahora es que una vez pulsado el botn F1 la variable seleccin se le asigna un valor de 2, indicando que se requiere ahora cargar el timer para la seal de 5khz
adems de aumentar la variable contador2 la cual cumple la misma tarea que la variable contador mencionada en el caso anterior. Para temporizar los 140us se carga el
timer0 con un valor de 216 y para temporizar los 60us de estado en bajo del pin c3 se carga el timer0 con un valor de 241. El prescaler utilizado para ambos casos (2khz y 5khz)
fue de 16 con un cristal de 20Mhz.

Diagrama de Flujo Generador

Generador

Entradas:
F0,F1

Configuracin:
Salida:
Seal PIN_C3

Interrupciones:
Timer0: Temporizador(140us) y (60us)
PS(1:16)
Int_RB: Edge: L to H

TMR0

INT_RB

Frecuenci
a de 2k
Seleccion
ada

si
Se indica el modo de
operacin del timer0
iniciando una
temporizacin de 250us
para primer puesta en alto
del pin C3

Frecuenci
a de 5k
Seleccion
ada

si
Se indica el modo de
operacin del timer0
iniciando una
temporizacin de 140us
para primer puesta en alto
del pin C3.

RETFI
E

Nota: A la hora de calcular el valor de carga para el timer0 usando la ecuacin que define
dicha carga, el valor que se obtiene en principio no corresponde al tiempo que se desea
temporizar con exactitud, pues segn (Breijo, 2008) el compilador genera lneas de cdigo
que aumentar el tiempo de ejecucin del programa y por ello, es necesario ajustar el valor
final de carga del timer0 hasta obtener el resultado deseado.

Configurar
timer0
para 2khz

si
Temporizar 250us para
pulso en alto y 250u
para pulso en bajo con
timer0

RETFI
E

Configurar
timer0
para 5khz

si
Temporizar 140us para
pulso en alto y 60u para
pulso en bajo con timer0

Referencias:
Breijo, E. G. (2008). Compilador C CCS y Simulador PROTEUS Para Microcontroladores PIC. En
marcombo (Ed.). Ciudad de Mexico, Mexico: Alfaomega.

También podría gustarte