hola, quisiera que me ayuden con un problema que estoy teniendo...
Lo que intento hacer es contar los pulsos que provienen de un anemómetro o un pluviómetro, cada cierto tiempo (en este caso cada 5 seg).
Utilizo el Timer0 para contar los 5 seg, y al Timer1 lo uso como contador de pulsos externos.
Mi problema es que: cuando arranco el simuador, el timer1 me sale con un valor de 30, y con cada pulso que hago me cuenta 2, y no 1 como debería ser...
en la variable contador muestro el valor del contador.
Desde ya, muchas gracias...
#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(clock=4000000)
#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_B0
#include "flex_lcd_c.c"
//variables
int contador=0;
int bandera1=0;
int segundo=0;
float lluvia=0;
//interrupcion del timer0
#int_RTCC
void RTCC_isr(void)
{
segundo++;
if(segundo==100) //cuento 100 veces para q bandera 1 se active a los 5seg.
{
bandera1=1;
}
set_timer0(61); //cargo el timer0 para q cuente 50ms
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_timer0(61);
set_timer1(0);
lcd_init();
printf(lcd_putc,"\f"); //borrar lcd
lcd_gotoxy(4,1);
printf(lcd_putc, "pluviometro");
while(TRUE)
{
if(bandera1==1)
{
contador=get_timer1(); //guardar el valor del timer1 en contador
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);
set_timer1(0);
contador=0;
segundo=0;
bandera1=0;
}
}
}
Adjunto un archivo con la simulación (en proteus) y el codigo (en ccs).