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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.