quarta-feira, 8 de setembro de 2010

Frequencimetro com o pic

// frequencimetro
//entrada pino c1 ec2
//autor:aguivone
//autor : aguivone
//12 de janeiro de 2008

// nota: no proteus não simulou mas funcionou na pratica.

//.............................................................................................

#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20M)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

boolean a;
int32 sobe,sobe2,valor;
float periodo,frequencia;
#int_ccp1
void isr2()
{
sobe=CCP_1;
}

#int_ccp2
void isr()
{
sobe2 = CCP_2;
valor =sobe2-sobe;
a=1;
}
void main()
{
#priority ccp2,ccp1
setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise
setup_ccp2(CCP_CAPTURE_RE); // Configure CCP2 to capture subida
setup_ccp2(CCP_CAPTURE_DIV_4);
setup_timer_1(T1_INTERNAL); // Start timer 1
enable_interrupts(INT_CCP2); // Setup interrupt on falling edge
enable_interrupts(INT_CCP1); // Setup interrupt on falling edge
enable_interrupts(GLOBAL);
a=0;
while(TRUE) {
if(a==1)
{
periodo=valor/5;
printf(" periodo %f us \n", periodo );//se fosse de 4Mhz não prescisava de dividir
if(periodo<1000)
{
frequencia=1000000/periodo;
frequencia=frequencia/1000;
printf("\r frequencia %f Khz ", frequencia );
}
else
{
frequencia=1000000/periodo;
printf("\r frequencia %f hz ", frequencia );
}

a=0;
}
}
}

Nenhum comentário :

Postar um comentário

olá,digite aqui seu comentário!