Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

techniken:timing

Zeitliche Abläufe steuern

Einfach und ineffizient: Durch delays getrennte Anweisungen

Wenn nur eine Aufgabe gleichzeitig erfüllt werden muss, spricht nichts dagegen, die Zeit zwischen den nötigen Einzelaktionen mit nichtstun zu überbrücken. In Arduino funktioniert das mit den Befehlen delay (für millisekunden) und delayMicroseconds (für noch kürzere Pausen).

Multitasking handgemacht: Zeitstempel

Delays haben den großen Nachteil, dass sie den Programmablauf blockieren, und währenddessen keine anderen Aktionen ausgeführt werden können.

Die Lösung: Statt zu warten, merkt sich der Rechner den Zeitpunkt, an dem die nächste Aktion fällig ist und führt das Programm weiter aus. An einer anderen Stelle kann das Programm dann die aktuelle Zeit anschauen und überprüfen, ob der Termin fällig ist. Falls ja, wird die aktion ausgeführt und ggf. ein neuer Termin festgelegt. Indem sich das Programm unterschiedliche „Termine“ für unterschiedliche Aktionen in separaten Variablen merkt, kann es Aufgaben gestaffelt „gleichzeitig“ erledigen. Arduino stellt die seit dem Start vergangene Zeit durch die Funktion millis() und micros() bereit.

Das Beispiel: Ein kommentiertes Beispiel für diese Vorgehensweise gibt es bei Arduino unter Digital/BlinkWithoutDelay

Multitasking mit Hardwareunterstützung: Timer-Interrupts

Der im Arduino verbaute ATMega Prozessor besitzt mehrere integrierte Timer, die wie eine Stop- oder Eieruhr verwendet werden können. Sie sind ein kleines bisschen komplizierter in der benutzung, bieten dafür aber eine sehr hohe Genauigkeit und laufen auch dann weiter, wenn der Arduino gerade mit anderen Dingen ausgelastet ist. Die Bibliothek Timer1 vereinfacht der Verwendung.

techniken/timing.txt · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)