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!
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!