Forum: Compiler & IDEs Periodische Vorgänge ausführen - wie am besten?


von Markus _. (markush)


Lesenswert?

Hi Leutz,

ich habe ein Testsystem gebastelt mit einer DCF Uhr und LCD auf einem 
Mega32. Das ganze funktioniert alles soweit. Rauskommen soll dabei mal 
eine Heizungs-Zusatzsteuerung für Holzvergaser/Solar. Das ganze wird in 
C realisiert.
Nun frag ich mich wie ich am besten periodische Vorgänge z. B. im 
Minutenbereich auf dem AVR realisiere. Zum Beispiel möchte alle 5 
Minuten die Außentemperatur messen, oder alle 2 Minuten die Tempertur im 
Pufferspeicher ermitteln. In drei Variablen hab ich ja Stunden, Minuten 
und Sekunden von der DCF Uhr. Nun könnt ich ja in einer Schleife diese 
Variablen auf die entsprechenden Änderungen prüfen - gefällt mir aber 
gar nicht. Kann man bei Änderung eines Variableninhalts ein Ereignis 
auslösen (lassen)? Gibts da nen anderen Ansatz? Wie würdet ihr das 
realisieren?

Gruß - Markus

von Andreas K. (a-k)


Lesenswert?

if (uptime() - letzte_messung >= 2 Stunden) {
    neue Messung
    letzte_messung = uptime();
}

von Peter D. (peda)


Lesenswert?


von Markus _. (markush)


Lesenswert?

@Andreas: Kannst du das mir das mal ausdeutschen? Ich brauch auch keinen 
fertigen Code, mir reicht die theoretische Ausführung wie du das machen 
würdest.

@Peter: Danke für den Link, kannte ich noch nicht. Werd ich mir heut 
abend mal ansehen bzw. testen.

Markus

von Karl H. (kbuchegg)


Lesenswert?

Markus _neu wrote:
> @Andreas: Kannst du das mir das mal ausdeutschen? Ich brauch auch keinen
> fertigen Code, mir reicht die theoretische Ausführung wie du das machen
> würdest.

Das ist im Prinzip genau das, was du in deinem Eröffnungsposting
angedeutet hast.

Du vergleichst ständig den Zeitpunkt der letzten Messung
mit der aktuellen Uhrzeit. Ist die Messung länger als x
Zeiteinheiten zurück, machst du eine neue Messung und merkst
dir den aktuellen Zeitpunkt als den Zeitpunkt der letzten Messung.

So wie du das auch im täglichen Leben machen würdest. Die Klofrau
schreibt auf den Zettel an der Tür, wann sie zuletzt da war.
Der Manager geht regelmässig alle Klos durch und sieht nach,
ob die Klofrau schon länger als 2 Stunden nicht da war. Dazu
benutzt er seine Armbanduhr die die aktuelle Zeit anzeigt. Ist
die letzte Reinigung schon länger als 2 Stunden her, dann scheucht
er sie hinein. Die macht sauber und notiert den Zeitpunkt wieder
am Zettel. etc. etc.
Der einzige Unterschied: Dein 'Manager' kann in einer Sekunde
mehrere Tausend Klos ein paar hundert mal durchsehen.

Man kann sich aus dem täglichen Leben eine Menge abschauen, wie
Dinge gemacht werden :-)

Man kann das ganze auch umgekehrt machen: Die Klofrau schreibt auf
den Zettel, wann sie das nächste mal Putzen kommen müsste und der
Manager benachrichtigt sie gegebenenfalls auf seinem Rundgang, dass
es an der Zeit wäre ...

von Frank J. (frajo)


Lesenswert?

Da wo Du die Minuten zählst, kannst Du noch eine weitere globale 
Variable hochzählen lassen. In der Hauptschleife prüfst Du ob diese 
Variable schon >= 5 ist. Wenn ja, setzt Du die Variable auf 0 und 
erledigst Deinen 5 Minuten Job.

von Markus _. (markush)


Lesenswert?

Danke Karl Heinz, für das "schöne" Beispiel. Ich werd mir die 
Manager-Sache mal durch den Kopf gehen lassen ;) !

@Frank: Hört sich auch nicht schlecht, vor allem weil es ohne viel 
zusätzlichen Code umzusetzen ist, das meiste ist ja schon vorhanden.

Markus

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
Noch kein Account? Hier anmelden.