necesita ayuda para hacer un programa c que lea el medidor de flujo

0

La semana pasada, acabo de comenzar mi primer proyecto para hacer un programa C para un PIC16F877A bajo MikroC, donde recibiría pulsos del medidor de flujo y calcularía el caudal, luego lo enviaría al LCD. .

Sin embargo, cuando lo conecté al PORTD del PIC16f877A RD0, daba valores aleatorios cada vez que subían y bajaban en el lcd. ¿Qué pasa?

Medidor de flujo de agua hoja de datos y programa:

void main() { 
     volatile unsigned int value;
     char str [20];
     double calc;
     lcd_init();        //initiallise lcd
     ADC_Init();         // and to read in values
     TRISD.f0=1;        //setting the signal input
     PORTD.F0=0;
     while (1)
     {
      if (PORTD.F0= 1)   //if water flows through the meter
      {
       value = ADC_read(PORTD.F0);  //read from RD0 and assign to value read
       delay_ms(100);                 //delay so i could see value on screen
       calc = (value * 60 / 7.5);     //calculation to show flow per minute

       byteToStr(calc,str);
       lcd_out (1,1, str);      //output to screen
       value++;
      }

     }


}
    
pregunta mojo

1 respuesta

2

No tengo idea de por qué te parece que deberías estar haciendo lecturas ADC para obtener tu valor.

Lo que necesita hacer es contar los pulsos del medidor por unidad de tiempo. Entonces tal vez deberías estar configurando una interrupción que viene una vez por segundo. También configure un temporizador / canal de contador en modo contador para que se incremente una vez cada vez que llegue un pulso desde el medidor. En cada segundo, captura el valor del contador y vuelve a cero para el contador del siguiente intervalo. La cuenta de pulsos por segundo es una lectura directa de Hz y se puede relacionar con el caudal a través de la tabla de la hoja de datos.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas