Arduino: Frage zu TimerOne

OP #3516264
Lesenswert?

Hi,

ich versuche mich grade an der Timer1-Bibliothek für Arduino ( 
http://playground.arduino.cc/Code/Timer1 ) und versteh einfach nicht, 
wie das funktionieren soll. Gegeben sei folgendes Testprogrämmchen:
1
#include "TimerOne.h"
2

3
#define LED 8
4
#define SECOND 1000000
5

6
volatile int exited = 0;
7

8
void setup(){
9
  pinMode(LED, OUTPUT);
10
}
11

12
void loop(){
13
  if (!exited) {
14
    unsigned long timeSinceStart = millis();
15
    unsigned long fiveSeconds = 5000UL;
16
    if (timeSinceStart >= fiveSeconds) {
17
      Timer1.initialize(8*SECOND);
18
      Timer1.attachInterrupt(toggle);  
19
      exited = 1;
20
    }
21
  }
22
}
23

24
void toggle(){
25
  digitalWrite(LED, digitalRead(LED) ^ 1);
26
}

Ich würde mir erwarten, dass folgendes passiert: Nach 5 Sekunden wird 
der Timer1-Zähler gestartet und nach 13 (=5+8) Sekunden wird die LED zum 
1. Mal getogglet; danach wird alle weiteren 8 Sekunden getogglet.

Es passiert aber: Nach 5 Sekunden wird sofort getogglet und danach 
alle weiteren 8 Sekunden.

Wieso wird der Interrupt offenbar gleich ausgelöst, anstatt die ersten 8 
Sekunden abzuwarten? Ist das so gewollt? Wenn nicht, was mach ich 
falsch? Wenn schon, wie kann ich ihm abgewöhnen, dass er den 1. 
Interrupt sofort auslöst?

Danke für jeden Hinweis
Tom
OP #3547087
Lesenswert?

Hallo, muss mich ehrlich Entschuldigen, für das späte zurückschreiben

Das hat nicht funktioniert.

Was jedoch (Warum-Auch-Immer) funktioniert hat:
1
      Timer1.initialize(0);
2
      Timer1.attachInterrupt(stopgap);  
3
      
4
    }
5
  }
6
}
7

8
void stopgap(){
9
  Timer1.initialize(8*SECOND);
10
  Timer1.attachInterrupt(after8Seconds);

Das heißt, ich lasse (Stopgap = Notlösung auf Eng.) einen Interrupt 
ausführen (ohne einer zeitlichen Vorgabe), dieser Springt in diese 
Not-Fkt. rein und danach läuft alles wie geschmiert.
ich wünschte ich könnte diesen unnötigen Schritt entfernen, aber ich 
komme zu keiner Lösung.

mfG
Tom

PS: Danke für den Tipp vorhin :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren