Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
OnTimer0..X problema!
18-12-2015, 02:45 AM, (This post was last modified: 18-12-2015, 02:47 AM by Michael.)
#1
OnTimer0..X problema!
HOLA A TODOS
Quisiera compartir con Uds. este pequeño dilema:

BOOL cambia = 0;

void setup() {
   OnTimer1(prueba, INT_MICROSEC, 1000); // Interrupción por Timer 1, llama a la función "prueba" cada 1000uS.
}

void loop() {
   delay(1000);    // retardo de un segundo
   cambia = HIGH;  // habilita el cambio de estado
   toggle(13);     // un indicador1; me indica que el programa ya paso por esta linea.
}

void prueba() {
  if(cambia==HIGH){  // si el cambio esta habilitado, entonces:
      toggle(14);          // cambia de estado el indicador 2.
      cambia = LOW;    // deshabilita el cambio.
  }  
}


En el programa se espera que el indicador1 y el indicador2 cambien de estado cada un segundo,
el primero es activado desde el programa principal y el segundo desde la interrupción por el timer1, sin embargo esto no ocurre.
Y cuando cambio la base de tiempo a INT_MILLISEC con un valor de 1 (1mS), todo funciona correctamente.

Según estuve revisando la librería de "Interrupciones" (interrup.c); la base de tiempo configura el TimerX para que desborde cada microsegundo (INT_MICROSEC), milisegundo(INT_MILLISEC) o cada segundo(INT_SEC) y con un contador interno que se incrementa por cada desbordamiento, compara la cantidad de veces que desbordo y si llegó al valor deseado entonces llama a la función especificada (prueba()).

No me explico porque al configurar la base de tiempo en MICROSEGUNDOS me afecta en el programa; si el microcontrolador opera en el orden de los nanosegundos.
Otra observación que levante, es que existe un desfase bastante notorio entre el tiempo especificado y el tiempo real, para realizar una prueba podrían realizar el siguiente código:

void setup() {
   OnTimer1(prueba, INT_MILLISEC, 1000);
}
void loop() {
   delay(1000);
   toggle(13);
}
void prueba() {
  toggle(14);
}

NOTA: Esto sucede con cualquier Timer (Timer0, Timer1, Timer2 y Timer3).

Características del Entorno:
- Pinguino IDE v11 (lo actualicé por última vez el 16/12/15)
- Arquitectura de 8 bits
- Bootloader v4.x
- Placa Pingino2550

Espero sus comentarios, GRACIAS
SALUDOS A TODOS.
Reply
04-03-2016, 03:55 PM,
#2
RE: OnTimer0..X problema!
El delay del loop no afecta al void prueba? 
Reply
19-04-2016, 07:58 AM,
#3
RE: OnTimer0..X problema!
(04-03-2016, 03:55 PM)mirasu Wrote: El delay del loop no afecta al void prueba? 

Disculpa, estuve desconectado un buen tiempo xD
Bueno...
No mi estimado, el retardo del lazo principal no debería afectar a un servicio de interrupción.

Saludos
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)