medidor de flujo que muestra litros por hora [cerrado]

-4

durante las últimas 2 semanas, empecé mi primer proyecto para crear un programa de CA en el software llamado mikroc, donde obtendría los impulsos del medidor de flujo y calcularía el caudal de cuántos litros fluyen cada hora, lo que luego se envía a Sin embargo, el lcd, después de usar un temporizador de 100 ms y una interrupción que ocurre, hace los cálculos y se muestra en la pantalla. Obtengo un montón de 0 en el LCD y cuando el agua fluye a través del medidor ... obtengo un cambio de 1. eso es todo. por favor, chicos, lo apreciaría mucho si recibiera ayuda en esto. también cómo leo la señal de entrada porque puedo haberlo hecho mal. La señal de entrada está conectada a RB7 ya que he cambiado el pin de interrupción.

hoja de datos pic16f877a: enlace hoja de datos del medidor de flujo de agua: enlace

este es el código:

//Prescaler 1:4; TMR1 Preload = 15536; Actual Interrupt Time : 100 ms
volatile unsigned int val;
char num [20];
int calc;
void InitTimer1(){
  T1CON         = 0x21;
  TMR1IF_bit         = 0;
  TMR1H         = 0x3C;
  TMR1L         = 0xB0;
  TMR1IE_bit         = 1;
  INTCON         = 0xC8;
}

void Interrupt(){
  if ((TMR1IF_bit) && (RBIF_bit)){
    TMR1IF_bit = 0;
    RBIF_bit   = 0;
    TMR1H         = 0x3C;
    TMR1L         = 0xB0;
    val= PORTB.F7;                //read the input signal and assign it to val
    Calc = (val * 60 / 7.5);          //calculations for the flow rate per hour
    longinttostrwithzeros(calc,num);       //displaying on screen
    Lcd_Out(1, 3, num );
  }
}

void main() {
     Lcd_Init();
     TRISB=0b10000000;       //initiallizing rb7 as the interrupt
     PORTB=0;
     InitTimer1();            //100ms timer
}
    
pregunta mojo

1 respuesta

2

No hablo PIC, pero parece que simplemente está asignando el estado actual de la salida del medidor de flujo a "val". Ese estado solo puede ser 0 o 1.

Debe contar los pulsos del medidor de flujo durante un período determinado, luego calcular el caudal.

Probablemente usaría dos interrupciones: una de un temporizador de 100 ms o 1 seg, y otra de la salida del medidor de flujo. La interrupción del medidor de flujo simplemente incrementaría un contador en cada interrupción. La interrupción del temporizador calcularía el flujo en función del recuento y luego borraría el contador.

    
respondido por el Peter Bennett

Lea otras preguntas en las etiquetas