Autor Tema: Timer solo interrumpe 1 vez  (Leído 2473 veces)

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

Desconectado anton

  • PIC10
  • *
  • Mensajes: 11
Timer solo interrumpe 1 vez
« en: 04 de Enero de 2012, 22:43:06 »

Hola a todos, estoy programando un dsPIC30F4013 con C30, y tengo un problema: programo el Timer1 para que se active desde un boton fisico
(conectado a INT1), para que al presionar el boton, haga un toggle de un puerto de salida cada 0.5 segundos, el problema es que sólo hace el toggle una vez,
no continuamente. (NOTA: el boton tiene controlado el bounce mediante hardware).

El codigo es el siguiente:

int main(void)
{
  // INITIALIZATION
  //Init();
  TRISB = 0;
  IEC1bits.INT1IE = 1;
  IEC1bits.INT2IE = 1;
  // GENERAL LOOP
  loop:

  //vacio durante la prueba actual

  goto loop;

} //main

void _INT1Interrupt(void)   //BOTON VERDE
{
  IFS1bits.INT1IF = 0;      //clear interrupt flag
 
  TMR1 = 0;                 //borra el timer
  PR1 = 0xE4E2;             //Pone el periodo de T1 a d58,594 que equivale a 0.5 segs
  IEC0bits.T1IE = 1;        //Habilita la interrupcion de T1
  T1CON = 0x8030;           //Activa el Timer con Preescaler a 1:256, con OSC interno 
  PORTBbits.RB2 = 1;
 
}

void _T1Interrupt(void)     //TIMER 1
{
  IFS0bits.T1IF = 0;        //clear interrupt flag

  PORTBbits.RB2 = - PORTBbits.RB2;  //toggle bit
 
}

NOTA: la interrupcion del boton, si funciona cada vez que éste es presionado. Su ayuda sera muy apreciada.


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Timer solo interrumpe 1 vez
« Respuesta #1 en: 05 de Enero de 2012, 03:27:44 »
Se te ha olvidado borrar el flag de interrupción. Mete esto dentro de la función _INT1Interrupt
IFS1bits.INT1IF=0;

y esto otro dentro de la del timer:
IFS0bits.T1IF=0;

Desconectado anton

  • PIC10
  • *
  • Mensajes: 11
Re: Timer solo interrumpe 1 vez
« Respuesta #2 en: 05 de Enero de 2012, 23:22:56 »
Gracias por responder Nocturno.


Sin embargo, nota cómo si se borran los flags de ambas interrupciones, es la primera instruccion dentro de cada ISR.  :(


Saludos

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: Timer solo interrumpe 1 vez
« Respuesta #3 en: 06 de Enero de 2012, 03:03:44 »
quizas sea una tonteria pero no veo que configures el puerto b como digital.

Hay un registro (ADPCFG) donde configuras los pines que se comparten con el ADC como digitales y generalmente el puerto b contiene pines analógicos. Cuando no haces esta configuracion el puerto se comporta de modo erratico. Asi que aun si estra al interrupción el toggle no funcionará bien.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Timer solo interrumpe 1 vez
« Respuesta #4 en: 06 de Enero de 2012, 03:31:14 »
Gracias por responder Nocturno.


Sin embargo, nota cómo si se borran los flags de ambas interrupciones, es la primera instruccion dentro de cada ISR.  :(


Saludos

Joder, estoy ciego, no los vi a pesar de haberlo mirado. Disculpa