-
-
Erfahrener Benutzer
Roboter Genie
Du kannst mit einem 16Bit-Timer Zeiten von bis zu Taktfrequenz*1024*(2^16) realisieren. Ausserdem kannst du zu jeder Zeit das Timerregister auslesen, in dem steht, wie weit der Timer schon gezählt hat. Dein Problem sind dann also nur noch deine verschiedenen Startzeiten. Ich würde folgendes machen: (Ich weiss jetzt nicht wie groß deine Zeiten sein sollen und wie genau) Wir sagen mal du willst folgendes machen:
Deine Relais werden zu einem Zeitpunkt x eingeschaltet und sollen dann je 5 Sekunden an sein.
Du machst einen Timer mit 1 Sekunde. Also dein Timer löst ein Interrupt aus wenn er überläuft. Wenn das innerhalb einer Sekunde passiert passt es. Ausserdem hast du für jedes Relais eine ganzzahlige Variable. Die werden mit -1 initialisiert. Wenn nun ein Relais angeschaltet wird, dann wird die Variable des Relais auf die Zeit gesetzt, die es brauchen soll bis es sich wieder abschaltet. In diesem Fall 5. Deine Interruptroutine schaut nun immer (jede Sekunde), wie die Relaisvariablen aussehen. Wenn sie -1 sind, werden sie ignoriert. Wenn sie > 0 sind, also die Zeit des Relais läuft, dann wird diese Variable 1 runtergezählt. Wenn eine Variable = 0 ist, dann wird das Relais ausgeschaltet und die Variable auf -1 gesetzt. Und dann musst zu jetzt nur noch den Fall behandeln, der eintritt, wenn die Zeit noch läuft und das Relais erneut eingeschaltet wird.
edit: achso, und wenn du das nicht sofort verstehst, wunder dich nicht, mich wundert es dann auch nicht!
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen