-         

+ Antworten
Ergebnis 1 bis 7 von 7

Thema: Wartezeiten von mehreren Minuten

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.03.2010
    Beiträge
    55

    Wartezeiten von mehreren Minuten

    Anzeige

    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

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    26
    Beiträge
    3.516
    Blog-Einträge
    9
    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.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.02.2005
    Ort
    München
    Alter
    31
    Beiträge
    389
    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

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    08.03.2010
    Beiträge
    55
    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?

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    26
    Beiträge
    3.516
    Blog-Einträge
    9
    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.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.241
    Zitat Zitat von Kampi
    ... 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.

    Zitat Zitat von MechMac
    ... 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?
    Ciao sagt der JoeamBerg

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    08.03.2010
    Beiträge
    55
    Ok, das klingt gut. Ich werde es so probieren.

    Gruß, Andreas

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •