TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Renatox_ en 25 de Septiembre de 2010, 16:14:11

Título: Timer1 en PIC12F
Publicado por: Renatox_ en 25 de Septiembre de 2010, 16:14:11
Hola compañeros estoy programando el PIC12F675 el modulo de Timer1 lo estoy usando como contador externo asíoncrono y el datasheet me recomienda que antes de escribir en el registro TMR1 primero pare el módulo y luego escriba un valor. esto que pongo a continuación estaré bien?

TIMER0_isr()
{  // ocurre cada 0.065536seg
   counter=GET_TIMER1();
   setup_timer_1(T1_DISABLED);
   SETUP_TIMER_1(0x00);
   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
   orden='B';
}

void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER0);

   while (1)
    {
       if (orden=='B')
       {
            // algoritmo
       }
    }


Es correcto como estoy deteniendolo y luego activandolo al Timer1?  o no necesito poner  el  setup_timer_1(T1_DISABLED);  SETUP_TIMER_1(0x00); setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);    talves solo sea necesario poner SETUP_TIMER_1(0x00);  y el CCS se encarga de desabilitar y habilitar el timer.

saludos
Renato
Título: Re: Timer1 en PIC12F
Publicado por: bmb en 25 de Septiembre de 2010, 22:10:07
Hola Renato , he estado leyendo la hoja de datos del PIC y yo entendí lo mismo que estás haciendo.  Me parece que el código es correcto.
Ya lo ensayaste y no funciona?

Saludos!
Título: Re: Timer1 en PIC12F
Publicado por: Renatox_ en 26 de Septiembre de 2010, 03:09:47
Hola bmb lo probaré la otra semana, como tu dices pienso que esta bien, lo que pasa es que nunca he usado configuracion de modulos en pleno programa, si compila.

saludos
Renato
Título: Re: Timer1 en PIC12F
Publicado por: bmb en 26 de Septiembre de 2010, 09:43:47
Hola Renato, alguna vez he hecho la configuración de los Timers en pleno programa y compila y funciona sin problemas.

Saludos!
Título: Re: Timer1 en PIC12F
Publicado por: MLO__ en 26 de Septiembre de 2010, 22:45:17
Hola.

Tienes algún esquemático?
Título: Re: Timer1 en PIC12F
Publicado por: ramirez en 27 de Septiembre de 2010, 11:01:31
Si no estoy equivocado, setup_timer1(TI_DISABLED), es lo mismo que poner setup_timer1(0x00), estas dos cosas lo que hace es poner a cero todos los bits del registro T1CON (esto lo he leido en el libro de Eduardo Garcia Breijo).

Título: Re: Timer1 en PIC12F
Publicado por: bmb en 27 de Septiembre de 2010, 16:48:59
Si no estoy equivocado, setup_timer1(TI_DISABLED), es lo mismo que poner setup_timer1(0x00), estas dos cosas lo que hace es poner a cero todos los bits del registro T1CON (esto lo he leido en el libro de Eduardo Garcia Breijo).

hola ramirez, que buen ojo, no lo había notado!  No se si serán lo mismo, pero lo normal es usar: setup_timer_1(T1_DISABLED); Yo creo que lo que quiso poner renato fue: set_timer1(0x00); que inicializa el valor a contar del temporizador.

Saludos!
Título: Re: Timer1 en PIC12F
Publicado por: Renatox_ en 28 de Septiembre de 2010, 03:33:47
Gracias por la ayuda, si me habia confundido debe ser son SET asi:

#int_TIMER0
TIMER0_isr()
{  // ocurre cada 0.065536seg
   counter=GET_TIMER1();
   setup_timer_1(T1_DISABLED);
   SET_TIMER1(0x00);
   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
   orden='B';
}

aun no lo pruebo supongo que esto funcionará debo hacerle caso a lo que me recomienda el datasheet, lei que si se escribe sin parar el timer pueden pasar cosas inesperadas. La aplicacion es recibir recibir una frecuencia estable de 12.5khz y contar los pulsos cada 65mseg si la cuenta cae dentro de un rango entonces el PIC12 habilita el sistema, lo pienso usar para el ChargePump del match. el problema es que cuando se apaga la PC bota basura por el puerto paralelo y me activa el m3 y m4 al mismo tiempo y se han quemado algunos fusibles :?, en esas estoy.

saludos
Renato