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
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.