TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: elgarbe en 03 de Junio de 2012, 20:03:40

Título: Interrupciones se ejecutan ni bien las habilito
Publicado por: elgarbe 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;



Título: Re: Interrupciones se ejecutan ni bien las habilito
Publicado por: Suky 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!
Título: Re: Interrupciones se ejecutan ni bien las habilito
Publicado por: elgarbe 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!
Título: Re: Interrupciones se ejecutan ni bien las habilito
Publicado por: Suky en 03 de Junio de 2012, 20:45:41
clear_interrupt(..) o algo así me parece que era.


Saludos!
Título: Re: Interrupciones se ejecutan ni bien las habilito
Publicado por: elgarbe 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....