// 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;
}
}
}
Engenheiro eletricista - Desenvolvedor de hardware. Protótipos e projetos. Desenvolvimento de software de interface.(aguivone@gmail.com)
quarta-feira, 8 de setembro de 2010
Assinar:
Postar comentários
(
Atom
)
Nenhum comentário :
Postar um comentário
olá,digite aqui seu comentário!