Autor Tema: Temporizador de 3 Minutos  (Leído 3634 veces)

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

Desconectado chingolo

  • PIC10
  • *
  • Mensajes: 17
Temporizador de 3 Minutos
« en: 02 de Julio de 2010, 15:24:03 »
esoty tratando de hacer para un proyecto un temporizador de 3 minutos, he hecho el siguiente codigo que es un temporizador de 5 segundos, al utilizar una variable contadora puedo aumentar el tiempo de temporizado usando el timer 1.
Mi pregunta es la siguiente, es le correcto lo que utilizo o hay algun metodo mejor?
que consideraciones debo utilizar para hacerlo con un pic 16f84 que cuenta con un timer0?

#include <16f876.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#use standard_io(b)

int cont=0; int i=0;
int1 ban_5min=0;

#int_TIMER1         //Interrupción Timer1
void temp1s(void)   //Función
{
   delay_cycles(4);
   set_timer1(3042);         //62.500 * 8 (prescaler) = 0,5 seg
   cont++;
   if(cont == 10){ //0,5 seg x 10 son 5 segundos.
   
        ban_5min = 1;
        setup_timer_1(t1_disabled);
        disable_interrupts(INT_TIMER1);
 
   }
  }

main ()
{
 
   setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
   set_timer1 (3042);                          //recarga del TMR1
   enable_interrupts(INT_TIMER1);             //habilita interrupcion timer1
   enable_interrupts(global);                //habilita interrupción general
 
 while(1)
 {
   
    if(ban_5min==1) output_high(pin_b1);
    //if(cont==14)output_high(pin_b2);
 }
}
gracias!!! estoy dando mis primeros pasos, pido paciencia.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Temporizador de 3 Minutos
« Respuesta #1 en: 03 de Julio de 2010, 09:43:15 »
Hola amigo, te recomiendo que por cada pregunta relacionada con el mismo tema no abras un nuevo post, utiliza el que abriste inicialmente.

Te recomiendo que utilices una base de tiempo de 1 segundo, activando una bandera, ban_1seg, ya con esta puedes sincronizar todos los tiempos que necesites, ejemplo, para 3 minutos colocas en una rutina un contador con 180 y cuando este tiempo se cumpla realizas la operación que necesites, de esta forma el PIC puede realizar más tares y no quedarse anclado en una rutina de tiempo

revisa este ejemplo, saludos.

Código: [Seleccionar]
#include <16f876.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#use standard_io(b)

int cont=0, con_3min=0;
short ban_1seg=0;

void temporizar();
///////////////////////////////////////
#int_TIMER1         //Interrupción Timer1
void temp1s(void)   //Función
{
   delay_cycles(2);
   set_timer1(3041);         //62.500 * 8 (prescaler) = 0,5 seg
   cont++;
   if(cont == 2){ //0,5 seg x 10 son 5 segundos.
     
        ban_1seg = 1;
        cont = 0;
   }
}
///////////////////////////////////////
void main ()
{
setup_timer_1 (t1_internal | t1_div_by_8);
set_timer1 (3041);                          //recarga del tmr1
enable_interrupts(int_timer1);             //habilita interrupcion timer1
enable_interrupts(global);                //habilita interrupción general
  output_b(0);
 
while(true)
{   
    if(ban_1seg)
    {
    ban_1seg = 0;
    temporizar();
    }
}
}
///////////////////////////////////////
void temporizar()
{
con_3min++;
if(con_3min == 180)
{
con_3min = 0;
output_high(pin_b1);
}
}


 

anything