-         

Ergebnis 1 bis 2 von 2

Thema: Timerfunktion

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    44
    Beiträge
    180

    Timerfunktion

    Anzeige

    Hallo,

    in meinem Programmcode (http://www.roboternetz.de/phpBB2/vie...ada52d3f411c1f) 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?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    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
  •