TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: PabloFiscella en 26 de Noviembre de 2003, 10:58:00

Título: Configuracion del timer
Publicado por: PabloFiscella en 26 de Noviembre de 2003, 10:58:00
Hola a todos, soy nuevo en este foro. Y novato en la electronica.

Estoy tratando de prender una lampara durante un segundo y apagarla otro segundo. Pero queda prendida durante unos seis segundos.
Supongo que se trata de alguna configuración de el timer.

Estoy usando un PIC16f84A un un cristal de 4MHz

les paso en codigo para ver si detectan en que fallo.
El codigo lo saque de una ayuda y lo adapte a mi necesidad.
No tengo la mas minima idea de que es RTCC y sus configuraciones.
Espero no molestar mucho y poder aprender de Uds.

#fuses XT,NOWDT
#use delay (clock=20000000)
#define INTS_PER_SECOND 76     // (20000000/(4*256*256))

byte seconds;      // A running seconds counter
byte int_count;    // Number of interrupts left before a second has elapsed
int numero;

#int_rtcc                          // This function is called every time
clock_isr() {                      // the RTCC (timer0) overflows (255->0).
    if(--int_count==0) {           // per second.
      ++seconds;
      if (numero == 0) {
         numero = 1;
      } else {
         numero = 0;
      }
      int_count=INTS_PER_SECOND;
    }

}

void main(void) {
   int_count=INTS_PER_SECOND;
   set_timer0(0);
   setup_counters( RTCC_INTERNAL, RTCC_DIV_256);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

   set_tris_a(0x0);
   numero = 0;
   for(; {
      if(numero==0) {
         output_bit(PIN_A0,1);
      } else {
         output_bit(PIN_A0,0);
      }
   }
}


Saludos a todos. Gracias.
Pablo
Título: RE: Configuracion del timer
Publicado por: pacalaconcurso en 26 de Noviembre de 2003, 11:59:00
lo tienes facil:

#fuses XT,NOWDT
#use delay (clock=4000000)
#define INTS_PER_SECOND 76 // (4000000/(4*256*256))

debes definir el delay y las interrupciones por segundo en funcion del cristal que usar.


saludos
Título: RE: Configuracion del timer
Publicado por: cucaracha en 26 de Noviembre de 2003, 12:44:00
Cierto, pero ahora ya no son 76 repeticiones. Ahora tendrás que recalcular ese dato. 76/5=15.2 para lo que tu tienes calculado.
Ese 0.2 tendrás que despreciarlo, osea meter 15, lo que te quita aun más precisión.


Saludos!
Título: RE: Configuracion del timer
Publicado por: pocher en 26 de Noviembre de 2003, 12:58:00
El RTCC es el TMR0, que es el único temporizador (sin contar el gua-guau) del que dispone el 16F84.

;set_timer0(0);   //Carga el TMR0 con 0, cuando llegue a 255 se desbordará y como está habilitada su interrupción irá a atender a la función de atención a la interrupción

 setup_counters( RTCC_INTERNAL, RTCC_DIV_256);   //Se va a usar temporizador interno (el TMR0) con un predivisor (preescaler) de 256

enable_interrupts(INT_RTCC);   //Activa la interrupción por desbordamiento del TMR0

enable_interrupts(GLOBAL);   //Activación global de interrupciones

Bueno ya he puesto mi pequeño grano de arena.

Un saludo
Título: RE: Configuracion del timer
Publicado por: PabloFiscella en 27 de Noviembre de 2003, 05:24:00
Escrito originalmente por cucaracha
Cierto, pero ahora ya no son 76 repeticiones. Ahora tendrás que recalcular ese dato. 76/5=15.2 para lo que tu tienes calculado.
Ese 0.2 tendrás que despreciarlo, osea meter 15, lo que te quita aun más precisión.


Saludos!



Gracias a todos por las respuestas.
Me quedo una duda. Para que sea totalmente preciso, que es lo que hay que hacer. Cambiar el cristal?

Saludos.
Pablo