Bueno, después de hacer unos cambios en la rutina lcd.c y un par de cosilla más logré que me empiece a mostrar algo por el display, como el mensaje de encendido y el mensaje en que iría la medida pero parece que no me hace correctamente la rutina de medir los pulsos porque me pone siempre 0.00.
Si alguien me hiciera el favor de ver donde puede ser el fallo le estaría muy agradecido.
#include<16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(clock=20000000)
#define use_portd_lcd TRUE
#byte lcd_d = 8
#define LCD_ENABLE_PIN PIN_D2
#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_D1
#define LCD_DATA0 PIN_D3
#define LCD_DATA1 PIN_D4
#define LCD_DATA2 PIN_D5
#define LCD_DATA3 PIN_D6
#define LCD_TYPE 2
#include <lcd.c>
#use standard_io(B)
#use standard_io(D)
const int cte=0.218;
int8 numFlancoQueLlega=0; // Número de Flanco que llega
int1 flagToggleFlanco=0; // Flag para cambiar de flanco
int16 t1=0x00,t2=0x00,t3=0x00; // Variables para guardar estados de ...
int16 tth=0x00,ttl=0x00,tt=0x00; // Timers y pulsos
float f=0.00; // Para hacer las restas oportunas en uS
int1 flagHayDatos=0; // Flag para indicar que ya hay datos de ..
// dos flancos (de subida y bajada)
void main()
{
float caudal;
set_tris_d(0x00);
set_tris_b(0xff);
ext_int_edge(L_TO_H);
flagToggleFlanco = 0; // inicializo el Flag para cambiar de flanco
numFlancoQueLLega = 0;
enable_interrupts(int_ext);
enable_interrupts(global);
lcd_init();
lcd_putc("Encendido ");
do {
if(flagHayDatos==1) // Detecto que ya hay datos de flancos ..
{
if((t3>t2)&&(t2>t1)) // Compruebo que estoy en la misma vuelta de TMR1
{
tth = t2 - t1; // Calculo en Tick's de TMR1 el tiempo en Alto
ttl = t3 - t2; // Calculo en Tick's de TMR1 el tiempo en Bajo
tt = tth + ttl; // Calculo en Tick's de TMR1 el Periodo del Pulso
f = 1/tt ; // Calculo la Frecuencia
}
flagHayDatos=0; // Indico que ya han sido procesados los datos.
}
caudal = f*cte;
printf(lcd_putc,"%f m^3/seg",caudal);
delay_ms(100);
lcd_putc(" ");
} while(TRUE);
}
#int_ext
void handle_ext_int()
{
++numFlancoQueLlega; // Cuento flanco que nos llega
if(flagToggleFlanco==0)
{ // He recibido Flanco de Subida
if(numFlancoQueLlega==1)
{
set_timer1(0); // Reinicio TMR1
t1=get_timer1(); // Guardo en t1 el valor de TMR1 al primer Flanco de Subida
}
if(numFlancoQueLlega==2)
{ t3=get_timer1(); // Guardo en t1 el valor de TMR1 al primer Flanco de Subida
numFlancoQueLLega == 0;
if(flagHayDatos==0)
{ // Si los datos anteriores han sido procesados ...
flagHayDatos=1; // Indico que ya hay nuevos datos de flancos para calcular
}
}
ext_int_edge(0,H_TO_L); // Configuro para capturar siguiente flanco de Bajada
flagToggleFlanco=1; // Indico que el siguiente flanco será de Bajada
}
else
{ // He recibido Flanco de Bajada
t2=get_timer1(); // Guardo en t2 el valor de TMR1 al Flanco de Bajada
ext_int_edge(0,L_TO_H); // Configuro para capturar siguiente flanco de subida
flagToggleFlanco=0; // Indico que el siguiente flanco será de Subida
}
}