hola muchachos... recien estoy entrando al mundo del CCS... antes hacía todo con MikroC y Asm...
decidí experimentar montando un simple circuito para medir frecuencia,... el mismo muestra en un LCD la frecuencia y el periodo calculado...
paro obtener el tiempo implemento el Timer 1 sin preescaler.... es decir que esperaba medir un ancho de banda de 15Hz a 1Mhz... pero solo llego a los 10Khz... no se rian de mi "bajo Nivel" de programacion... recien empiezo tenganme piedad
acá les dejo mi código...
Saludos
#include <18f2550.h>
#fuses XT, NOWDT, NOLVP, NOMCLR, NOPBADEN
#use delay(clock=4000000)
#include <lcd.c>
#byte PIR1=0x0C
int16 TFS1=0,TFS2=0,TF=0;
float AP=0.0, frec=0.0, PromAP=0.0, SumAP=0.0, VarProm=5, Muestra=0; //Variables flotantes
int1 cambio=0, nuevopulso=0; //Cambio de flanco de disparo
#int_ccp1 // rutina de interrupcion que adquiere los tiempos para calcular el periodo de un cilo de la señal de entrada
void ccp1_int(){ //Función interrupción
if(cambio==0){
TFS1=CCP_1; //Carga del valor del registro CCPR1
setup_ccp1(CCP_CAPTURE_FE);
cambio=1;
}
else
{ //
TFS2=CCP_1; //Carga del valor del registro CCPR1 en flanco subida
setup_ccp1(CCP_CAPTURE_FE);
cambio=0;
if(nuevopulso==0){ //Fin de pulso...
nuevopulso=1; //pulso a medir
}
}
}
void main() {
lcd_init();
delay_ms (1000);
lcd_gotoxy (1,1);
printf(lcd_putc,"Esperando");
lcd_gotoxy (1,2);
printf(lcd_putc,"señal... ");
delay_ms (1000);
setup_timer_1(T1_INTERNAL); //Configuración TMR1
setup_ccp1(CCP_CAPTURE_FE); //Configuración modo Captura en flanco de subida
cambio = 0; //Control de cambio a 0
enable_interrupts(int_ccp1); //Habilitación interrupción modulo CCP
enable_interrupts(global); //Habilitación interrupción global
do {
if(nuevopulso==1)
{ //¿Pulso nuevo?
TF=(TFS2-TFS1); //Ancho de pulso.
AP = TF*1.0; //(a 4MHz:1us por ciclo de maquina)
Muestra=Muestra+1;
SumAP=(AP+SumAP);
if (Muestra==VarProm) // si ya promedio 5 valores los muestra
{
PromAP=SumAP/VarProm;
frec =(1000/PromAP); //frecuencia en KHz
lcd_gotoxy (1,1);
printf(lcd_putc,"T= %5.2f uS ", PromAP);
lcd_gotoxy (1,2);
printf(lcd_putc,"F= %5.2f KHz ", frec);
SumAP=0;
PromAP=0;
frec=0;
Muestra=0;
}
nuevopulso=0; //Pulso ya medido, espera nuevo
}
} while (TRUE);
}