Autor Tema: problemas con timer1 (contador)  (Leído 1237 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado aldoMO

  • PIC10
  • *
  • Mensajes: 18
problemas con timer1 (contador)
« en: 18 de Marzo de 2015, 10:12:01 »
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).