Hallo zusammen. Ich habe eine kleine Steuerung für meine Gartenpumpe auf Basis eines Atmega 48 aufgebaut. Also eine Art Zeitschaltuhr, die den ganzen Tag läuft. Mittels eines Potis kann man die Dauer in Sekunden einstellen, die die Pumpe läuft. Bisher funktioniert es so, dass die Poti-Stellung ständig gepollt wird und der Controller schaut, ob sich die Poti-Stellung verändert hat. D.h. in der Haupt-while-Schleife wird immer wieder eine ADC durchgeführt und das Ergebnis mit dem alten Wert verglichen. Die Potistellung verändert sich nur ganz selten, vielleicht ein Mal am Tag. Gibt es da eine elegantere Möglichkeit, das zu programmieren? Externe Interrupts sind mir nur für digitale Eingangssignale bekannt... Danke!
Hi -ADC mit einem Timer triggern -Im ADC-Interrupt den Vergleich durchführen und bei Änderung ein Flag setzen. -Flag in der Main abfragen MfG Spess
Programmtechnisch könntest Du noch verbessern, dass Du den ADC im Free Running Modus betreibst und den Wert in der ADC-ISR überprüfst. Ansonsten ging es nicht ohne zusätzliche Hardware. Du könntest einen Hochpass-Filter mit sehr niedriger Grenzfrequenz an das Poti hängen und dessen Ausgangssignal extrem verstärken und so und außerdem invertiert in zwei Schmitt-Trigger (üblicherweise mit open Collector) schicken, die Du über einen Pullup verODERst. Ein Low-Impuls würde dann eine Drehung signalisieren. Das ganze wäre nur schwer so zu implementieren, dass es weniger zusätzlichen Strom frisst, als ein ewig laufenden ADC, ist also eher theoretisch zu betrachten, als tatsächlich umzusetzen.
Hannes schrieb: > Die Potistellung verändert sich nur ganz selten, vielleicht ein Mal am > Tag. Was ist daran so schlimm den staendig abzufragen. Der uC langweilt sich doch so oder so den ganzen Tag.
Danke für die Antworten! Ich werde das mal ausprobieren. @Horst: 2 Taster wären sicher einfacher gewesen, ich wollte aber zu Lernzwecken mal den ADC verwenden. @Helmut: Ich dachte, ich könnte wenn alles funktioniert mal ein paar Möglichkeiten zur Energieeinsparung ausprobieren, d.h. µC einschlafen lassen. Das geht ja nicht, wenn ständig AD-gewandelt wird.
Hi >@Helmut: Ich dachte, ich könnte wenn alles funktioniert mal ein paar >Möglichkeiten zur Energieeinsparung ausprobieren, d.h. µC einschlafen >lassen. Das geht ja nicht, wenn ständig AD-gewandelt wird. Dann rechne erst mal den Anteil des Controllers am Gesamtverbrauch aus. Der geht wahrscheinlich im Rauschen unter. MfG Spess
Wie oben schon beschrieben, kannst du einen Timer verwenden. Wenn du den extern taktest, kannst du den Prozessor und Speicher komplett abschalten. Eigentlich müsste es ja reichen, wenn jede Sekunde gemessen wird. Damit könntest du deutlich Energie sparen, zumindest im Verhältnis gesehen. Eine Sekunde klingt zwar nach viel, aber für den Controller sind das Ewigkeiten.
Hannes schrieb: > Mittels eines Potis kann man die Dauer in Sekunden einstellen, > die die Pumpe läuft. Bisher funktioniert es so, dass die Poti-Stellung > ständig gepollt wird und der Controller schaut, ob sich die > Poti-Stellung verändert hat. Wozu fragst du die Potistellung dauern ab, wenn die nur die Pumpenlaufzeit bestimmen soll? Mal abgesehen davon, dass es dem µC ziemlich egal ist, ob er das Poti abfragt, ohne daraus einen Informationsgewinn zu ziehen, würde es doch reichen, die Potistellung abzufragen, bevor die Pumpe angeschaltet wird. Falls man während des Pumpenlaufs noch eingreifen können soll, müßte man z.B. alle Sekunde mal nach der Potistellung gucken und den Abschaltzeitpunkt aus dem Vergleich mit der bisherigen Laufzeit bestimmen.
Dussel schrieb: > Damit könntest du deutlich Energie sparen, zumindest im Verhältnis > gesehen. Die Pumpe möchte ich mal sehen, bei der die Leistungsaufnahme des Prozessors vergleichsweise eine Rolle spielt.
Werner schrieb: > Wozu fragst du die Potistellung dauern ab, wenn die nur die > Pumpenlaufzeit bestimmen soll? Die eingestellte Pump-Dauer wird auf einem Display ausgegeben. Und wenn man am Poti dreht, soll man das sofort sehen und nicht erst, wenn die Pumpe anspringt. Natürlich habt ihr recht, dass die Leistungsuafnahme des Controllers verschwindend gering ist im Vergleich zur Pumpe. Das ganze Projekt ist für mich auch zum Lernen da und ich möchte einfach die verschiedenen Funktionen des Controllers ausprobieren. Danke, das mit dem Timer werde ich machen!
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.