Autor Tema: Problema Timer2 (solucionado)  (Leído 4054 veces)

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

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Problema Timer2 (solucionado)
« en: 13 de Septiembre de 2010, 13:29:01 »
Hola a todos, tengo una pregunta sobre el funcionamiento del timer2, estoy con un "reto" y necessito que se me active el timer2 quando yo le llame, me explico:
el micro tiene que hacer sus tareas, y quando "llame" al timer2 que me empiece a contar hasta hacerme la interrupción al cabo de X us, se puede hacer eso, he estado leyendo por el foro y no he visto ningun post que lo hagan, se podria hacer desactivando las interrupciones de timer2, y solo habilitandola quando paso por donde la tenga que llamar?

Seguramente no se entienda nada osea que pongo un ejemplo:

En el pic (16F627A a 4Mhz) me está llegando una trama de bits, quiero que si el pic esta mas de 14720us, empieze de nuevo a leer, yo de momento he hecho esto: y el problema que tengo es que la interrupción se ejecuta cada 14720us y yo quiero que eso pase sino se cumple Y>8.

void TIMER0_isr(void)   ////timer que cuenta cada 14,72mS
{
int a=0;
//Timer de 8 bits --> 256 = 1 RTCC
//Pescaler de 1:16
//1 tick cada 16 uS = 0.016mS
//1 RTCC cada 3,68mS (256 - 26 Ticks)
//4 RTCC = 14720us
      
  if ((VT=true)
   {
   a=get_timer0();
   }
}

void main()
{
   set_tris_a  (0b00111100);  //Definición de entradas(RA2-RA5) y salidas.
   set_tris_b  (0b00001001);  //Definición de entradas(RB0yRB4) y salidas.

//HABILITACIO D'INTERRUPCIONS//

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
   setup_timer_1(T1_internal | T1_DIV_BY_1 );//Configuramos el timer1 con el prescaler a 1
                                             //asi cuenta de 1ms en 1ms.
//   setup_timer_2(T2_div_by_16,26,4);   //Habilitamos el timer2 con la siguientes características:
                                       //-ponemos el prescaler a 1:16 asi tenemos un Tick cada 16us
                                       //-26 es el valor que determina cuando el reloj del timer es reseteado.
                                       //- y este valor lo sacamos de (256-26=230 donde 230 es el valor
                                       //-que necesito)4 es las veces que se tiene que resetear el timer2.
                                       //Aqui estan los calculos(256-26=230),(230*0,016=3,68),(3,68*4=14,72ms)
                                       //o lo que es lo mimso 14720us que es lo que necessito.
//   enable_interrupts(int_timer2);   //Habilitamos interrupción timer2.
   enable_interrupts (global);      //Sino habilitaramos las interrupciones globales
                                    //no nos funcionaria ninguna interrupcion.
   delay_us(200);                   //Espero a que se estabilice todo.

   while(1)
   {
   output_a(0x00);
   output_b(0x00);  
  
  if (y>8) "que se activara int timer2" es possible?

y++;
delay_ms(1000);
   }
}  


haber si me pueden hechar un cable, quando termien el proyecto lo colgare por si le sirve a alguien.
« Última modificación: 14 de Septiembre de 2010, 11:17:15 por f-traxx »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema Timer2
« Respuesta #1 en: 13 de Septiembre de 2010, 15:35:04 »
El timer2 se puede encender o apagar según pongas el bit 2 (TMR2ON) del registro 0x12 (T2CON) a 1 o 0 respectivamente.
Si no me equivoco en CCS podés usar la propia función "setup_timer2"; si el primer parámetro es T2_DISABLED justamente no trabaja el timer2.

Sino trabajando directamente sobre el bit del registro T2CON
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Problema Timer2
« Respuesta #2 en: 14 de Septiembre de 2010, 03:19:19 »
Hola AngelGris, eso que me quieres decir que significa, que si pongo "setup_timer_2(disabled)" en el main, y luego lo habilito en una subrutina asi "setup_timer_2(T2_div_by_16,26,4)" solo me funcionara desde que entre en la subrutina?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema Timer2
« Respuesta #3 en: 14 de Septiembre de 2010, 08:56:16 »
Exacto.
Nunca lo usé desde CCS pero sí en ASM (trabajando directamente con el bit TMR2ON) y sólo trabaja el timer2 si lo encendés. Así que sería cuestión de probar. Quizá en un programita sencillo, no sé, que si presionás un botón se active el timer2 y te cuente x segundos hasta encender un led.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Problema Timer2
« Respuesta #4 en: 14 de Septiembre de 2010, 11:16:53 »
gracias por la respuesta ya lo he probado y si que va  :-/ :-/


 

anything