Archiv verlassen und diese Seite im Standarddesign anzeigen : Wartezeiten von mehreren Minuten
Hallo,
ich möchte gerne alle 5 Minuten einen Sensor abfragen und bei Bedarf für etwa 1 Minute einen Verbraucher einschalten.
Mich interessiert hierbei nur wie ich längere Intervalle am besten realisiere. Wenn ich _delay_ms nehme, ist der µC solange außer Gefecht.
Anders herum habe ich irgendwo in den Artikeln gelesen das ISR möglichst kurz sein sollten.
Wie sollte man da am besten vorgehen?
Gruß, Andreas
Wie genau muss den die Zeit sein?
Muss die Sekundengenau sein oder reicht so ein Pi mal daumen wert ala ich mach ein Wait von 300 Sekunden rein?
Und was hat eine ISR damit zu tun? Da kommt doch kein Interrupt. Du willst den Sensor doch abfragen und dann schalten. Da kommt doch kein Signal von außen an. Oder verstehe ich da was falsch.
Hallo Andreas,
wenn noch nicht alles belegt würde ich einen Timer verwenden (8-Bit besser 16-Bit) mit den ne brauchbare Zeitbasis realisieren (Timerüberlauft alle 0.1s, 0.25s oder 1s) -> bei jedem Timerüberlauf Variable hochzählen -> (bei z.B. 1s) nach 300 Timerüberläufen sind 5 min rum nach 60 1 min .
"Delay" empfinde ich irgendwie immer als unsaubere Programmierung, geht zwar schnell aber solange noch Timer vorhanden sind würd ich diese auch einsetzten.
Gruss Matthias
Also, vielleicht sollte ich mehr ins Detail gehen. Ich bin gerade dabei mir eine Regelung für meinen Humidor zu bauen. Diese soll in Abständen von etwa 5 Minuten prüfen wie hoch die Luftfeuchte ist.
Wenn die Luftfeuchte zu hoch, dann soll die Luft umgewälzt werden mit Propeller 2.
Wenn die Luftfeuchte zu gering, dann soll feuchte Luft aus dem Befeuchter gesaugt werden, mit Propeller 1.
Also habe ich 2 Propeller und einen Sensor.
Momentan habe ich es wie folgt: Abfrage der Luftfeuchte jede Sekunde.
Wenn unter 70% dann Propeller 1 an.
Wenn über 75% dann mit Propeller 2 umwälzen.
Nun ist es so das der ganze Vorgang recht träge ist (das befeuchten der Luft und die Auswirkungen). Eigentlich muss der nicht jede Sekunde prüfen. Ich wollte mal ein wenig damit spielen, was passiert wenn man den Prozess etwas träger gestaltet. Sowohl das Messen, als auch die Lüfter.
Und wenn ich das richtig verstanden habe, können Interrupts doch auch von innen heraus gesteuert werden, oder?
Ich dachte da an eine Art Unterprogramm, welches den Propeller 1 oder 2 x-sekunden lang aktiviert. Dabei möchte ich den µC aber noch anders nutzen (zum prüfen des Sensors und entscheiden was getan werden soll)
Wie genau das aussehen soll, weiß ich noch nicht, das wird mein Testaufbau zeigen, denn ich fürchte Luft zu befeuchten ist hier einfacher als Luft zu entfeuchten.
Im Prinzip geht es mir darum einen main-zyklus zu haben, welcher diverse andere "Unterprogramme" (Threads?) startet, die auch wiederum Unterbrechungen von mehreren Minuten beinhalten können, ohne den main-zyklus zu stoppen.
Ähnlich dem Multithreading unter Windows mit nem single-Core.
Gruß, Andreas
---------EDIT--------
@Stone
Ja, genau mit Timern, ich dachte nur gerade das die auch durch interrupts ausgelöst werden. Oder ich würfle da was durcheinander.
Ein Timer müsste doch unabhängig von der Main laufen, oder?
Naja wirkliche Interrupts werden nur von außen ausgelöst und dadurch springt der Controller halt in eine ISR die abgearbeitet wird und dann wird das Main-Programm fortgesetzt. Es gibt auch Interrupts in dem Controller. Diese werden z.B. bei einem Timerüberlauf ausgelöst.
oberallgeier
24.08.2010, 20:22
... wirkliche Interrupts werden nur von außen ausgelöst ... ... Es gibt auch Interrupts in dem Controller ...Das verwirrt den Fragesteller doch blos. Gibt es denn auch unwirkliche Interrupts? Nein.
... mit Timern ... dachte ... das die auch durch interrupts ausgelöst werden ... Timer müsste doch unabhängig von der Main laufen, oder?Du hast völlig recht.
Bau Dir einen Timer, so in der Größe von ein paar Mikro- besser Millisekunden. Dieser Timer löst dann einen Interrupt aus *ggggg* - und dann kannst Du in der angeleierten ISR eine Variable hochtickern und nach Schaltpunkten prüfen. Damit kannst Du nach etlichen Sekunden, Minuten oder Stunden nach dem Sensor, evtl. auch nach Anderem gucken. So mache ich es auch. Nur - wenn Du in der ISR nach dem Sensor guckst, sollte das eben schnell gehen. Bei mir läuft so ein Verfahren mit mehreren Sensorprüfungen in Abständen von mehreren Interrupts ziemlich gut. Das Verfahren ermöglicht es eben auch, die Sensorprüfungen "verschränkt" abzuwickeln - also nicht alle in derselben ISR; anders ausgedrückt: jede Prüfung hat dann einen anderen zeitlichen Schaltpunkt. Klar?
Ok, das klingt gut. Ich werde es so probieren.
Gruß, Andreas
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.