PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timerfunktion



elkokiller
17.12.2006, 17:16
Hallo,

in meinem Programmcode (https://www.roboternetz.de/phpBB2/viewtopic.php?t=25775&sid=524dbaa4b222d900a6ada52d3f411c1f) schalte ich per Tasterdruck Relais. Mittels Zähler fällt das Relai dann wieder ab.

Ist es möglich den internen Timer des AVR zu nutzen um echte Zeiten zu hinterlegen und nicht mehr mit dem Zähler zu arbeiten.
Erschwerent kommt hinzu, dass ich quasi 5 Timer benötige die zu unterschiedlichen Zeitpunkten gestartet weren und unterschiedlich lange laufen.

Kann man das programmieren?

Goblin
17.12.2006, 21:18
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! :)