www.mikrocontroller.net

Forum: Compiler & IDEs mehrere Timer programmieren


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich Programmiere derzeit etwas mit WINAVR und einem ATMEGA32 rum. Aber
um konkrete Steuerfunktionen mit dem Controller ausführen zu können,
braucht man ja mehrere Zeitfunktionen und Timer.

Also ähnlich wie bei einer SPS, wo ich duzende von Timern mit
verschiedener Funktion also z.B. einschaltverzögert, verlängerter
Impuls usw. haben kann.
Ich frage mich also, wie man so etwas am besten mit den zwei
vorhandenen ATMEGA-Timern zustande bringt.
Die Timerfunktionen müßen auch die delay_ms und delay_us Funktionen aus
der onewire.c ersetzen können.
Es sollte halt der Zyklus des Controllers nicht unnötig unterbrochen
bzw. im Leerlauf sein.

Ich hatte schon überlegt, ob ich den Timer laufen lasse und dann alle
10ms oder so, mehrere Register in der ISR des Timers hochzählen lasse.
Auf diese Register greife ich dann aus einer Funktion heraus darauf zu.
Z.B Timer(Timer1, TE, Wert).
Allerdings ist das dauernde und sehr häufige hochzählen ja sehr
Zeitintensiv.
Weis jemand wie das eine SPS intern regelt, bzw. wie es dort
ausprogrammiert ist (ich meine jetzt natürlich nicht in AWL,FUP,KOP).

Was sagt ihr zu dem Problem? Hättet ihr irgendwelche Vorschläge?

Gruß,
Chris

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,
mitlerweile bin ich dir ja zu größtem Dank verpflichtet. Muß echt sagen
das finde ich super wie du hier jedem hilfst.

Mit dem Scheduler weiß ich leider noch nicht wie ich den am besten
einbinde.
Z.B beim 1-Wire-Bus habe ich ja einen sequenziellen Ablauf, in dem ich
immer wieder delays() habe (vor allem die wartezeit auf die Wandlung
ist schlimm). Mit dem Scheduler müßte ich ja die Programmierung nach
jedem delay in eine eigene Funktion packen, die ich dann wiederum dem
Scheduler übergeben kann. Gefällt mir auch nicht gerade. Ich müßte den
Scheduler so abändern, damit er eine reine Timerverwaltung ist.
Hast du den Scheduler selber geschrieben. Wenn ja, muß ich sagen
respekt. Ich hätte in dem Fall aber evtl. noch ein paar Fragen.

Gruß,
chris

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du jede Sekunde nen Wert auslesen willst, dann schreibe eine
Funktion, die den Sensor ausliest, die nächste Wandlung startet und
dann sich selber mit einem Delay von 1s in den Scheduler stellt.

Und zu Initialisierung ruft Du diese Funktion einmalig auf.

Danach wird diese Funktion zyklisch jede Sekunde ausgeführt.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.