Poti an µC - wie Änderung feststellen?

Gast #2790687
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!
Gast
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
Gast
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.
Gast
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.
Gast
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
Gast
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.
Gast
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.
Gast
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!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.