Autor Tema: Problema con interrupcion Timer 1, no salta cuando ingresa a una funcion  (Leído 2329 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado zagoaristides

  • PIC12
  • **
  • Mensajes: 99
    • deportes de contacto y fitness
Es así, tengo este bloque de funcion

Código: [Seleccionar]
   if (flag_autoconfigurando == FALSE && flag_motores_frenados == TRUE){
      var_decrementa_delay_en_slide_timer_1--;
     
      if (var_decrementa_delay_en_slide_timer_1 == 0){
      var++;
         cambio_de_slide();
         var_decrementa_delay_en_slide_timer_1 = delay_en_slide_timer_1;
      }
   }

que me lleva a la funcion

Código: [Seleccionar]
void cambio_de_slide(void)
{
////controlo primero el numero de slide, si es el último, cambio el sentido
////de giro y reseteo la cuenta. Luego acelero

   if (slide_actual == num_de_slides){
     
      sentido_de_giro = !sentido_de_giro;
     
      slide_actual = 0;
   }
   var_decrementa_arranque = 50; //dependiente de Timer 1   
   acelerar (sentido_de_giro);
   
}

y finalmente a este

Código: [Seleccionar]
void acelerar (int sentido)
{
int1 flag_hecho = 0;

   //var_decrementa_arranque = 50; //dependiente de Timer 1
   flag_motores_frenados = FALSE;
   
   enable_interrupts(INT_TIMER1);
   set_timer1(0);
   
   while(var_decrementa_arranque > 1){
      if (sentido == sentido_abajo && flag_hecho == 0){
         marcha (motor_Sup, sentido, veloc_retencion); //ya que le alcanza para girar sumado el peso de la lona
         marcha (motor_Inf, sentido, veloc_baja);
         flag_hecho = 1;
      }
     
      if (sentido == sentido_arriba && flag_hecho == 0){
         marcha (motor_Sup, sentido, veloc_baja); //ya que le alcanza para girar sumado el peso de la lona
         marcha (motor_Inf, sentido, veloc_baja);
         flag_hecho = 1;
      }   
   }


      if (sentido == sentido_abajo){
         marcha (motor_Sup, sentido, veloc_baja); //ya que le alcanza para girar sumado el peso de la lona
         marcha (motor_Inf, sentido, veloc_media);
      }
     
      if (sentido == sentido_arriba){
         marcha (motor_Sup, sentido, veloc_media); //ya que le alcanza para girar sumado el peso de la lona
         marcha (motor_Inf, sentido, veloc_baja);
      }

}

en esta última funcion se queda dando vueltas en el while y nunca salta la Interrupcion del timer 1. Simulando en Proteus me fijo por las dudas todas las banderas y supuestamente están bien. Inclusive probé (se ve en este ultimo código borrar el flag del interrupt pero nada.

Código: [Seleccionar]
void acelerar (int sentido)
{
int1 flag_hecho = 0;

   //var_decrementa_arranque = 50; //dependiente de Timer 1
   flag_motores_frenados = FALSE;
   
   set_timer1(0);
   clear_interrupt(int_timer1);
   
   while(var_decrementa_arranque > 1){
      if (sentido == sentido_abajo && flag_hecho == 0){
         marcha (motor_Sup, sentido, veloc_retencion); //ya que le alcanza para girar sumado el peso de la lona
         marcha (motor_Inf, sentido, veloc_baja);
         flag_hecho = 1;
      }
     
      if (sentido == sentido_arriba && flag_hecho == 0){
         marcha (motor_Sup, sentido, veloc_baja); //ya que le alcanza para girar sumado el peso de la lona
         marcha (motor_Inf, sentido, veloc_baja);
         flag_hecho = 1;
      }   
   }


      if (sentido == sentido_abajo){
         marcha (motor_Sup, sentido, veloc_baja); //ya que le alcanza para girar sumado el peso de la lona
         marcha (motor_Inf, sentido, veloc_media);
      }
     
      if (sentido == sentido_arriba){
         marcha (motor_Sup, sentido, veloc_media); //ya que le alcanza para girar sumado el peso de la lona
         marcha (motor_Inf, sentido, veloc_baja);
      }

}

alguna ayudita... sigo intentando

Grazie mille!

Nadie nació sabiendo...Que genio ese Nadie!!!

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema con interrupcion Timer 1, no salta cuando ingresa a una funcion
« Respuesta #1 en: 12 de Diciembre de 2011, 22:51:32 »
Hola, seteaste bien el timer1??

coloca el codigo completo para poder ver mejor en donde podria estar el error.

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado zagoaristides

  • PIC12
  • **
  • Mensajes: 99
    • deportes de contacto y fitness
Re: Problema con interrupcion Timer 1, no salta cuando ingresa a una funcion
« Respuesta #2 en: 12 de Diciembre de 2011, 22:57:26 »
Hola, seteaste bien el timer1??

coloca el codigo completo para poder ver mejor en donde podria estar el error.

saludos

Sisi, fijate que me faltó poner pero la funcion cambio_de_slide(); se llama desde dentro de Timer 1 (o sea, salta). Será ese el problema?
Nadie nació sabiendo...Que genio ese Nadie!!!

Desconectado zagoaristides

  • PIC12
  • **
  • Mensajes: 99
    • deportes de contacto y fitness
Re: Problema con interrupcion Timer 1, no salta cuando ingresa a una funcion
« Respuesta #3 en: 12 de Diciembre de 2011, 23:08:06 »
Hola, seteaste bien el timer1??

coloca el codigo completo para poder ver mejor en donde podria estar el error.

saludos

Sisi, fijate que me faltó poner pero la funcion cambio_de_slide(); se llama desde dentro de Timer 1 (o sea, salta). Será ese el problema?

Es así:

Código: [Seleccionar]
#int_TIMER1
void  TIMER1_isr(void)
{
var_decrementa_arranque--;

   if (flag_autoconfigurando == FALSE && flag_motores_frenados == TRUE){
      var_decrementa_delay_en_slide_timer_1--;
     
      if (var_decrementa_delay_en_slide_timer_1 == 0){
         var++;
         cambio_de_slide();
         var_decrementa_delay_en_slide_timer_1 = delay_en_slide_timer_1;
      }
   }
 
   if (flag_autoconfigurando == FALSE && flag_motores_frenados == FALSE){
   
      if (OPTO1 == TRUE)
         desacelerar (sentido_de_giro);
      if (FC1 == TRUE)
         frenar (sentido_de_giro);   
   
   }

que estaría más completo de donde se llama al "camino sin retorno"...
Nadie nació sabiendo...Que genio ese Nadie!!!

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema con interrupcion Timer 1, no salta cuando ingresa a una funcion
« Respuesta #4 en: 12 de Diciembre de 2011, 23:51:32 »
Utiliza la interrupcion lo mas eficiente que puedas, para eso usa solo banderas que indiquen que ha ocurrido una interrupcion, no llames a funciones dentro de la interrupcion, en tu caso estas llamado una funcion que llama a otra y esta llama a otra.

Cuando no estes seguro de si entra o no a una interrupcion usa un led que indique, si la interrupcion es muy rapida igual usa un led y mira el pulso en el osciloscopio en proteus

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado zagoaristides

  • PIC12
  • **
  • Mensajes: 99
    • deportes de contacto y fitness
Re: Problema con interrupcion Timer 1, no salta cuando ingresa a una funcion
« Respuesta #5 en: 13 de Diciembre de 2011, 10:06:50 »
Utiliza la interrupcion lo mas eficiente que puedas, para eso usa solo banderas que indiquen que ha ocurrido una interrupcion, no llames a funciones dentro de la interrupcion, en tu caso estas llamado una funcion que llama a otra y esta llama a otra.

Cuando no estes seguro de si entra o no a una interrupcion usa un led que indique, si la interrupcion es muy rapida igual usa un led y mira el pulso en el osciloscopio en proteus

saludos

Solucionado, era así. Creo que esto que quise hacer es una especie de recursión? Bueno, en todo caso, no hay que hacer procesos largos en una interrupción, eso lo sabía pero... en el frenesí de la programación y en un programa tan largo (voy unas 3000 líneas) era de suponer equivocarse no?

Un abrazo a todos!
Nadie nació sabiendo...Que genio ese Nadie!!!

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema con interrupcion Timer 1, no salta cuando ingresa a una funcion
« Respuesta #6 en: 13 de Diciembre de 2011, 11:09:44 »
Que bueno que lo soluciones  :).

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.