hola, como estan, nunk habia visto esta pagina esta unaa bellezaaa, muy util..
weno paso a mi dudita; desde hace un tiempo necesito medir las RPM de un motor dc del cual su maximo numeero de revoluciones son 2500 y el minimo 180 RPM, eso lo conclui mediante un analisis experimental en el osciloscopio, ahora ke lo kiero implementar en el pic para ke cuando haya un pulso en RC0, se visualice en el display las RPM, compila bien pero cuando lo simulo en el proteus, se me pierden pulsos osea a la maxima frecuencia que es 40 hz, solo me salen 2340, cuando deberia ser de 2500, y visualizo 2340 y ceros, como un tren de pulsos, osea no es un dato fijo. aki anexo el programa.
#include <16F877.h>
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <lcd.c>
#byte port_c=7
#byte port_b=6
int32 bajada,subida,tiempo_entre_pulsos, periodo, freq,X;
float RPM;
#int_ccp2
void isr()
{ set_tris_b( 1 );
bajada = CCP_1;
subida = CCP_2;
tiempo_entre_pulsos = subida - bajada;
periodo = tiempo_entre_pulsos*2 ;
freq = (1000000.0 / periodo) ;
RPM = freq*60;
X= (RPM * 255)/2500;
output_b(X); //salida para un dac
if(bit_test (port_c, 0))
{
lcd_gotoxy(1,1);
delay_ms(500);
printf(LCD_PUTC," ");
printf(" " );
}
if (!bit_test (port_c, 0))
{
lcd_gotoxy(1,1);
delay_ms(500);
printf(LCD_PUTC,"%f",RPM);
printf("t= %f\r",RPM);;
}
}
void main()
{
set_tris_c(0xFF);
lcd_init(); // Comandos de inicialización del LCD.
setup_ccp1(CCP_CAPTURE_FE); // Configura CCP1 para capturas del TMR1
// con flancos de bajada en RC2
setup_ccp2(CCP_CAPTURE_RE); // Configura CCP2 para capturas del TMR1
// con flancos de subida en RC1
setup_timer_1(T1_INTERNAL); // El TMR1 será incrementado con la
//frecuencia interna de reloj (fosc/4)
enable_interrupts(INT_CCP2); // Habilita la interrupción por captura de
// CCP2 (PIN RC1)
enable_interrupts(GLOBAL);
printf("Mensaje");
while(1);
}
y aqui pongo lo ke me bota el virtual terminal del proteus;
t= 2340
t= 2340
t= 2340
t= 2340
t= 2340
t= 0.00 // por ke me salen estos ceros????, alguien podria decirme
t= 0.00
t= 2340
t= 2340
t= 0.00
weno esa es toda mi duda, si alguien sabe el por ke me bota esos ceros y por ke no estan exacta la medida, le agradeceria la colaboracion, m uchas gracias, bye