Pages: [1]   Go Down
Author Topic: ISR(TIMER1_COMPA_vect) método protegido de interrupciones.  (Read 747 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas a todos,

tengo una interrupción que cuenta los segundos, cuando se cumple el if entra y
llama al metodo HacerAlgo(); Este metodo enciende un led y hace un delay de 5s.
Pero cuando ejecuto el delay casi ni lo noto, creo que es por que la propia interrupcion interrumpe el metodo antes de que acabe. He visto que se puede proteger un fragmento de código para que no le afecte las interrupciones, he probado noInterrupts(); interrupts; pero no va. En el ejemplo cli(); sei(); tampoco va. No se como puedo hacerlo. La tarea real es mover un motor con un contador, etc. Lo digo por que se que se puede hacer parpadear el led de otra forma. Gracias de antemano.
Code:
ISR(TIMER1_COMPA_vect){
segundos++;
seg++;
if(seg==5){
  cli();
  HacerAlgo();
  sei();
  seg=0; 
}

}

void HacerAlgo(){
 
  digitalWrite(LedPin,HIGH);
  delay(5000);
 
}
Logged

Madrid
Offline Offline
Sr. Member
****
Karma: 5
Posts: 481
Life isn't about finding yourself, life is about creating yourself!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Estas creando un tick de 1000ms y luego dentro del tick le mandas parar 5000ms  smiley-roll

yo que tu creaba un tick de 1000ms:
Code:
ISR(TIMER1_COMPA_vect){
segundos++;
}

 y luego trabajar el resto en el main loop e ir actualizando las variables según sea necesario

Logged

Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Pages: [1]   Go Up
Jump to: