Autor Tema: Interrupciones se ejecutan ni bien las habilito  (Leído 1861 veces)

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

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Interrupciones se ejecutan ni bien las habilito
« en: 03 de Junio de 2012, 20:03:40 »
Hola, estoy usando CCS y depurando un programa que me funcionaba mal vi que ni bien habilito las interrupciones del timer, estas se lanzan de una, como si el registro del timer ya estubiera en overflow. Es normal eso? antes de habilitarlas hay que inicializar los contadores del timer?
Este es el código que estoy usando:


void main()
{
   set_tris_a(0xFF);
   set_tris_b(0x03);   //Rb0, 1 entradas, el resto salida

   setup_oscillator(OSC_8MHZ);

   //ADC_CLOCK_INTERNAL se sugiere solo para frecuencias menores a 1MHz.
   //Para 8MHz se sugiere ADC_CLOCK_DIV_32
   setup_adc(ADC_CLOCK_DIV_32);
   //Voy a usar el pin 2 (AN0) para el TPS, la referencia es GND y +5V
   setup_adc_ports(sAN0|VSS_VDD);
   //Dentro de los puertos usados (solo el 0) elijo el canal 0 para convertir
   set_adc_channel(0);

   //El timer0 interrumpira cada 256*4*256/8000000=32,7mSeg
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1(T1_DISABLED);
   //El timer2 interrumpira cada 256*4*16*2/8000000=4,096mSeg
   setup_timer_2(T2_DIV_BY_16,0xFF,2);
   setup_spi(FALSE);
   setup_comparator(FALSE);
   setup_vref(FALSE);

      a=(l_Pasos_Maximo-l_Pasos_Minimo)/(float)(l_ADC_Maximo-l_ADC_Minimo);
      b=l_Pasos_Minimo-a*l_Pasos_Maximo;


   //Habilito las interrupciones para que todo empiece a funcionar
   enable_interrupts(INT_TIMER2);
   enable_interrupts(INT_AD);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

// TODO: USER CODE!!
    do{
      //Calculo constantemente las constantes a y b de la recta por si modificaron
      //por el puerto serie algun parámetro.
      a=(l_Pasos_Maximo-l_Pasos_Minimo)/(float)(l_ADC_Maximo-l_ADC_Minimo);
      b=l_Pasos_Minimo-a*l_Pasos_Maximo;



-
Leonardo Garberoglio

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Interrupciones se ejecutan ni bien las habilito
« Respuesta #1 en: 03 de Junio de 2012, 20:33:38 »
Si pasa eso lo más sencillo es antes de habilitarlas forzar a 0 los timer y borrar las IFs


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Interrupciones se ejecutan ni bien las habilito
« Respuesta #2 en: 03 de Junio de 2012, 20:38:25 »
   set_timer0(0);
   set_timer2(0);
   enable_interrupts(INT_TIMER2);
   enable_interrupts(INT_AD);
   enable_interrupts(GLOBAL);

eso no funciona.
Como borro en CCS los flags?
Es común lo que me sucede? lo estoy probando en proteus, sinifica que en la práctica pasa lo mismo?

Saludos y gracias!
-
Leonardo Garberoglio

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Interrupciones se ejecutan ni bien las habilito
« Respuesta #3 en: 03 de Junio de 2012, 20:45:41 »
clear_interrupt(..) o algo así me parece que era.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Interrupciones se ejecutan ni bien las habilito
« Respuesta #4 en: 04 de Junio de 2012, 17:37:26 »
clear_interrupt, pero tampoco funciona, en realidad no funciona en proteus, pero no hace falta poner nada, la interrupcion no se dispara sola....
-
Leonardo Garberoglio