Autor Tema: conteo de RPMs  (Leído 2117 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado WOOD_girl

  • PIC12
  • **
  • Mensajes: 56
conteo de RPMs
« en: 08 de Junio de 2008, 20:36:21 »
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

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: conteo de RPMs
« Respuesta #1 en: 08 de Junio de 2008, 20:43:36 »
En la subrutina de interrupción debes de poner el menor código posible. Utiliza una bandera o flags (variable) para saber que se ha producido la interrupción y trata la información en le programa principal (main). Procura utilizar lo menos posible el punto flotante por que consume mucho tiempo de proceso.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado WOOD_girl

  • PIC12
  • **
  • Mensajes: 56
Re: conteo de RPMs
« Respuesta #2 en: 09 de Junio de 2008, 11:52:25 »
gracias jfh900, voy a mejorar esos aspectos, y te cuento como me fue,  un saludo


 

anything