Autor Tema: Uso del timer 0 como contador  (Leído 3614 veces)

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

Desconectado Mario87

  • PIC10
  • *
  • Mensajes: 25
Uso del timer 0 como contador
« en: 07 de Abril de 2007, 21:24:39 »
Muy buenas a todos. Buscando por el foro he encontrado muchísima informacion sobre el timer0 pero sobre todo para usarlo midiendo tiempos, y ahora creo que necesito usarlo como contador y aunque lo he intentado un par de veces no lo conseguí (me hacia cosas raras). El problema me lo encuentro en este programa:

Código: [Seleccionar]
#include <16f84a.h>            //pic a utilizar         
#fuses XT,NOWDT,NOPROTECT,PUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#include <lcd.c>                  //libreria manejo lcd
     
    int contador=0; 
     
///PROGRAMA
void main(void)
{
   set_tris_b("0b00001000");
   lcd_init();         //inicializa lcd
   printf(lcd_putc,"%u",contador);
   contador++;
   
   while(TRUE)
   {
      if (!input(PIN_B3))
      {
      lcd_putc("\f");
      lcd_gotoxy(1,1);
      printf(lcd_putc,"%u",contador);
      contador++;
      delay_ms(200);
      }
   }
     
}


Este programa muestra por la LCD cuantas veces has pulsado un boton, asi de simple. Como veis hago un retardo, eso lo hago porque no soy tan rápido soltando el pulsador y me cuenta de más :mrgreen: la solucion para esto es el timer, que creo que funciona por flanco de subida o bajada.
Alguien me podria adaptar el codigo, o darme una pequeña idea? yo lo que hago es conectar a la patita de CLKIN del timer el pulsador a tierra y un puente a +5v, de ese modo al tener un flanco de bajada segun lo que he entendido, se sumaria uno al timer, y asi constantemente hasta que se desborde y salte a la interrupcion (en donde puede resetearlo para seguir sumando).
Quiero entender que el prescaler no vale para nada aqui, ya que no funciona con el reloj interno.
En fin, haciendo esto que os digo no consegui hacer funcionar el timer en otra ocasion, lo probé con un led, y éste se encendia cuando le daba la gana en vez de cuando se desbordaba :mrgreen:

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: Uso del timer 0 como contador
« Respuesta #1 en: 09 de Abril de 2007, 17:07:10 »


     Buenas, para utilizar el timer como contador deberas configurarlo mas o menos asi...


        SETUP_TIMER_0(RTCC_EXT_H_TO_L | RTCC_8_BIT | RTCC_DIV_1);

              para saber el valor que trae el Timer y mostrarlo en el LCD deveras igualar una variable X=GET_RTCC();

           
Citar
yo lo que hago es conectar a la patita de CLKIN del timer el pulsador a tierra y un puente a +5v

  Esto que dices es casi correcto, no es un puente, mas bien seria una resistencia como de 1K o 2.2K, y no va en el pin CLKIN, eto debera ir en el Pin A4 o pin T0CKI.

         
Citar
Quiero entender que el prescaler no vale para nada aqui, ya que no funciona con el reloj interno.

 Pues si que vale, ya que si pones RTCC_DIV_1 se incrementa el Timer cada que oprimes el pulsador, si pones RTCC_DIV_2 deberas oprimir 2 veces el pulsador para que el timer se incremente en 1, y asi con los demas RTCC_DIV_X.

      Espero se entienda.

                 Saludos  :-/


Desconectado Mario87

  • PIC10
  • *
  • Mensajes: 25
Re: Uso del timer 0 como contador
« Respuesta #2 en: 09 de Abril de 2007, 17:31:15 »
Gracias por tu respuesta Rulo.
Creo que me he explicado mal, cuando dije CLKIN del timer me referia a T0CKI, y efectivamente lo que pongo es una resistencia, no un puente :mrgreen: culpa mia.
Quiza mi error sería lo del prescaler, no entendia el concepto cuando cuenta pulsos externos, ahora mismo lo pruebo! :)

Desconectado Mario87

  • PIC10
  • *
  • Mensajes: 25
Re: Uso del timer 0 como contador
« Respuesta #3 en: 09 de Abril de 2007, 18:41:13 »
funciona a la perfección, me faltaba efectivamente poner a 1 el prescaler :)

Desconectado Mario87

  • PIC10
  • *
  • Mensajes: 25
Re: Uso del timer 0 como contador
« Respuesta #4 en: 10 de Abril de 2007, 07:34:00 »
He conectado un display de 7 segmentos al 16F84a y mediante un pulsador voy aumentando el numero del display, usando el TMR0.
Pero hay veces (de forma completamente aleatoria) que el numero del display aumenta dos veces con una pulsacion. Alguien sabe por qué puede ser?

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Uso del timer 0 como contador
« Respuesta #5 en: 10 de Abril de 2007, 08:23:54 »
Debe ser que no tienes una rutina de antirrebotes de la pulsacion, puedes hacerla con filtros analogos o con temporizaciones que permitan eliminarlos... :-) ;-) ;-)
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Mario87

  • PIC10
  • *
  • Mensajes: 25
Re: Uso del timer 0 como contador
« Respuesta #6 en: 10 de Abril de 2007, 11:00:28 »
muchas gracias por tu informacion. como soy nuevo en esto no conocía aun el concepto de rebote, ya he mirado por el foro y ha sido muy sencillo arreglarlo :)