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
}