hola a todos, tengo un problema muy similar..
estoy usando un pic 18f2550, lo que intento hacer es:
contar la cantidad de pulsos que ingresan por la interrupción externa en 1 minuto... mi problema es que la cuenta se retrasa muchisimo.
la verdad no encuentro el error, espero que puedan ayudarme.
uso un cristal de 20mhz, y coloque un led q enciende por 500ms aproximadamente para saber cuando "en teoría se cumple 1 minuto".
configure el timer de manera que el mismo deborde cada 1 segundo, y con un contador cuento hasta 60 para contar 1 minuto.
gracias de antemano!
#include <18f2550.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD,NOWRT,NOFCMEN,CPUDIV1
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B3
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B1
#define LCD_RW PIN_B2
#define LCD_E PIN_B6
#define LED PIN_A3
#priority EXT, RTCC
#include "flex_lcd_c.c"
//variables
int segundo=0;
int bandera1=0;
int contador=0;
float lluvia=0;
#int_RTCC
void RTCC_isr(void)
{
segundo++;
if(segundo==60)
{
bandera1=1;
segundo=0;
}
set_timer0(26473);
}
#int_EXT
void EXT_isr(void)
{
contador++;
}
void main()
{
lcd_init();
output_float(pin_b0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128);
enable_interrupts(INT_RTCC);
enable_interrupts(INT_EXT);
ext_int_edge(l_to_h);
enable_interrupts(GLOBAL);
setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
set_timer0(26473);
printf(lcd_putc,"\f"); //borrar lcd
lcd_gotoxy(4,1);
printf(lcd_putc, "pluviometro");
delay_ms(500);
while(TRUE)
{
if(bandera1==1)
{
output_high(LED);
lluvia=contador*0.2;
printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc, "contador=%d",contador);
lcd_gotoxy(1,2);
printf(lcd_putc, "lluvia %f mm",lluvia);
contador=0;
bandera1=0;
delay_ms(500);
output_low(LED);
}
}
}