Forum: Mikrocontroller und Digitale Elektronik AVR wecken mittels Potiänderung


von P. Hagen (Gast)


Lesenswert?

Hallo allerseits,

ich baue gerade eine Fernbedienung mit einem Mega328. Zum Energiesparen 
lege ich den Controller in den "deep sleep" und wecke diesen per 
Pin-Change-Interrupt (beim Drücken einer Taste). Das klappt soweit 
alles. Auf der Fernbedienung gibt es noch einen Poti, dessen Werte vom 
ADC eingelesen werden. Nun würde ich gern wissen, ob es eine Möglichkeit 
gibt, den AVR zu wecken, sobald am Poti gedreht wird.

von Johnny B. (johnnyb)


Lesenswert?

Wenn es sich um ein "normales" Widerstandspotentiometer handelt, wirst 
Du den Controller wohl mit einem Timerinterrupt periodisch wecken 
müssen, damit der Spannungswert vom Poti eingelesen und mit einem 
vorigen Wert verglichen werden kann.
Ansonsten, wenn das zu viel Strom braucht, müsstest Du wohl in Hardware 
irgendwas realisieren.

von Sawyer M. (sawyer_ma)


Lesenswert?

In Hardware wäre das doch einfach zu realisieren. Du baust dir einfach 
einen OP Schaltung auf, die einem Komparator mit Hysterese entspricht 
(Schmitt Trigger).

Sobald du eine gewisse Schwellenspannung erreicht (frei wählbar von dir) 
wird dein I/O auf high oder low gezogen. Kommt ganz drauf an wie du es 
willst (invertierend oder nicht invertieren).

Grüße

: Bearbeitet durch User
von H. (Gast)


Lesenswert?

Aufwecksensor bei Erschütterung vielleicht? Dieser hier kommt mit 6µA 
aus:
MMA8451
Gibt es auch mit Adapterboard falls zu klein/fein. Muss nur initial 
einmal eingestellt werden, danach hat man einfach einen Ausgang, der 
sich bei Erschütterung meldet.

von Einer K. (Gast)


Lesenswert?

P. Hagen schrieb:
> ob es eine Möglichkeit
> gibt, den AVR zu wecken, sobald am Poti gedreht wird.

Bei großen Bewegungen ja, PCINT
Wenn er schon bei kleinen Bewegungen geweckt werden soll, dann wird 
sowas wie ein externer (dynamischer?) Fensterkomparator nötig werden

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sawyer M. schrieb:
> Du baust dir einfach einen OP Schaltung auf

Die dürfte mehr Energie fressen, als wenn man einfach den Watchdog jede 
Sekunde das Dingens wieder aufwecken und nachschauen lässt.

von Thomas W. (diddl)


Lesenswert?

Statt des Potentiometer könntest du eine Drehencoder verwenden.



Vorteile:

- der PinChange Interrupt klappt
- es braucht keinen analog Eingang
- die Einstellung ist sehr präzise und kann übersteuert werden

von P. Hagen (Gast)


Lesenswert?

Ok, ich schau mir das mit dem Komperator mal an. Danke!

von P. Hagen (Gast)


Lesenswert?

Thomas W. schrieb:
> Statt des Potentiometer könntest du eine Drehencoder verwenden.

Klingt auch interessant.

von Stefan F. (Gast)


Lesenswert?

Ein Komparator vergleicht aber nicht mit dem vorherigen Wert, sondern 
mit einem festen Schwellwert. Die Frage ist, worauf genau soll reagiert 
werden. Wirklich auf jede kleine Änderung?

von Ach was (Gast)


Lesenswert?

Stefanus F. schrieb:
> Ein Komparator vergleicht aber nicht mit dem vorherigen Wert, sondern
> mit einem festen Schwellwert.

Das ist dem Komparator vollkommen egal.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ach was schrieb:
> Stefanus F. schrieb:
>> Ein Komparator vergleicht aber nicht mit dem vorherigen Wert, sondern
>> mit einem festen Schwellwert.
>
> Das ist dem Komparator vollkommen egal.

Dem Komparator schon: nicht aber dem, der den Vergleichswert bereit 
stellen muss. Am Ende braucht man dann noch einen (oder zwei, falls eine 
Änderung in beiden Richtungen detektiert werden soll) DACs, um den 
Vergleichswert bereit zu stellen.

von batman (Gast)


Lesenswert?

Mit der Potispannung einen C über einen R laden. Eine Änderung gibt dann 
einen detektierbaren Spannungspuls überm R. Schlecht, weil ein 
Spannungsteiler immer Strom braucht.

von LowPower (Gast)


Lesenswert?

Wenn er schlau ist, trennt er das Poti mit einem High-Side-Switch
von der Betriebsspannung (z.B. mit einem IRLML6402) solange der
Controller schläft.

Richtige (Ultra-)Low-Power-Designs sind schwierig und nicht
gerade Anfängertauglich.

von Sebastian R. (sebastian_r569)


Lesenswert?

Der 328 hat übrigens einen Analog-Komparator mit drin, der direkt einen 
Interrupt auslösen kann ;)

von LowPower (Gast)


Lesenswert?

> einen Analog-Komparator

Ja, dass reicht für einen "Fensterkomparator" aber nicht.

Der braucht 2.

von Einer K. (Gast)


Lesenswert?

Sebastian R. schrieb:
> Der 328 hat übrigens einen Analog-Komparator mit drin, der direkt einen
> Interrupt auslösen kann ;)
Auch im "Deep Sleep"?
Würde mich wundern...

Außerdem braucht der auch externe Beschaltung
Beide Drehrichtungen sind dann auch noch ein Problemchen.

von Thomas E. (thomase)


Lesenswert?

LowPower schrieb:
> Wenn er schlau ist, trennt er das Poti mit einem High-Side-Switch
> von der Betriebsspannung (z.B. mit einem IRLML6402) solange der
> Controller schläft.

Das kann man auch mit einem Portpin schalten. Was man auch dringend tun 
sollte, denn der Stromverbrauch eines 10K-Poti liegt mit 300µA bei 3V 
etwa um den Faktor 3000 über dem Stromverbrauch des Controllers mit 
0,1µA im Power-Down-Sleep.

Insofern kommt nur das intervallmäßige Aufwecken mit dem WD-Timer oder 
ein Drehgeber infrage. Der Stromverbrauch des aktivierten WD schlägt 
allerdings mit 4µA zu Buche. Was aber immer noch deutlich unter dem 
Poti-Verbrauch liegt.

Der Drehgeber dagegen kostet gar nichts, solange er nicht einen der 
beiden Pullups runterzieht. Ansonsten gilt für den in etwa das gleiche 
wie für das Poti.

Das stromsparendste Aufweck-Intervall bekommt man übrigens mit Timer 2 
und Uhrenquarz hin.

: Bearbeitet durch User
von Sebastian S. (amateur)


Lesenswert?

Ich denke ein externer Komparator braucht zu viel Strom.
Wenn ich aber unterstelle, dass sich die Potiänderungen nicht im 
Millisekundenbereich bewegen, so sollte eine Unterbrechung, z.B. alle 2 
Sekunden, ausreichen um das Poti, mit seinem vorherigen Wert zu 
vergleichen. Dann kann auch entscheiden werden, ob rein hauen oder 
schlafen angesagt ist.

von Christian S. (roehrenvorheizer)


Lesenswert?

Sebastian R. schrieb:
> Der 328 hat übrigens einen Analog-Komparator mit drin, der direkt
> einen Interrupt auslösen kann ;)

Und für diesen dann den Schwellwert mittels Spannungsteiler anpassen...
Hochohmig genug ist ja der Komparator-Eingang.

MfG

von Jacko (Gast)


Lesenswert?

Ich würde das ganze mal als Bediener dieser Fernbedienung
betrachten:

Poti drehen bringt nix - also: Batterie alle, oder Sleep-Mode?
Oder Wecktaste drücken...
Ist doch doof!

Nimm in diesem Fall doch besser 2 Digitaleingänge (auf/ab), um ohne
Poti-Digitalisierung das gleiche (inklusive Wake-Up) zu erreichen.

von batman (Gast)


Lesenswert?

Doof find ich, wenn die Reaktionsschwelle oberhalb der genutzten 
Auflösung liegt, so daß man immer erst hin- und herdrehen muß, wenn man 
länger nicht gedreht hat.
Um das aber zu vermeiden, müßte man die genutzte Auflösung reduzieren. 
Kann man meist auch nicht gebrauchen.
Dazu kommt, daß man bei der Übertragung von ADC-Meßwerten erstmal eine 
Strategie zur Vermeidung von LSB-Wackeln zu bringen hat, was die 
Batterie sonst auch schnell leersaugt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Der Drehgeber dagegen kostet gar nichts, solange er nicht einen der
> beiden Pullups runterzieht.

Je nach Drehgeber kann man das Einhalten dieser Bedingung allerdings 
nicht garantieren, da der Zustand des Kontakts mechanisch durch den 
Geber selbst (und damit durch den Bediener) festgelegt wird. Man müsste 
also einen finden, der nur kurz beim Drehen über die Raststellungen 
hinweg Kontakt gibt und in Ruhestellung keinen Kontakt geschlossen hat.

von Boris O. (bohnsorg) Benutzerseite


Lesenswert?

Ein MAX931 braucht 1µA (die interne Referenz braucht noch einmal 2µA). 
Ein PCINT weckt KEINEN der AVRs aus dem Power Down. Das kann nur INT0 
(resp. INT1, wenn vorhanden) und auch nur mit einem Übergang von High 
nach Low. Wenn du mit einem Pin Change den AVR aus dem Sleep bekommst, 
rate ich dringend zur exakten Strommessung. In keinem Fall wird der 
Strom 10µA unterschreiten – oder ich muss meine Übersicht resp. die 
Handbücher aktualisieren.

Ein normaler Spannungsteiler (=Poti) an einem ADC-Eingang ist für 
Low-Power in keinem Fall geeignet. Die Eingangskapazität des ADC sollte 
schnell genug geladen werden, damit die Sampling-Frequenz ausreichend 
hoch gewählt werden kann. Mithin ist das ein 10k-47k-Poti. An 3V3 fallen 
darüber 70µA ab, dauerhaft. Wenn wie o.a. das Poti von der Versorgung 
getrennt wird, ist gar kein Wake Up darüber mehr möglich. Mir ist auch 
nicht klar, wie du das Wake Up realisierst, es braucht ja ein paar Clock 
Cycle fürs Wake Up, ein paar für den ADC zum Einschwingen und dann ein 
paar Messungen für die Filterung.

Der Dreh-Encoder wäre eine Lösung, du verlierst allerdings an Auflösung 
(12-24 Schritte bei 360° gegenüber 256 bei 270° – 8bit). Ein Poti mit 
Drucktaster, der den Wake Up realisiert, wäre hübsch. Mit einer 
Metallachse und einem Metallknopf wäre eine Umladung durch Berührung 
messbar. Da die Fernbedienung in die Hand genommen wird, könnte es auch 
über Metallplatten und Kapazitätsänderung detektiert werden, sogar unter 
der Gehäuseoberfläche.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Boris O. schrieb:
> Ein PCINT weckt KEINEN der AVRs aus dem Power Down.

Sorry, aber diese Aussage ist Quatsch. Die galt vielleicht für die 
allerersten PCINTs bei AVRs, aber wir reden hier von einem ATmega328, 
und da gilt:
1
Pin change interrupts on PCINT are detected asynchronously. This implies
2
that these interrupts can be used for waking the part from sleep modes
3
other than Idle mode.

(Der letzte Teilsatz ist etwas missverständlich: im Idle mode genügt 
natürlich jeder freigegebene Interrupt zum Aufwecken.)

> In keinem Fall wird der Strom 10µA unterschreiten – oder ich muss meine
> Übersicht resp. die Handbücher aktualisieren.

Ich habe hier ATmega128RFA1 in Temperatursensoren verbaut. 
Interessanterweise scheinen diese von allen AVRs den niedrigsten 
Stromverbrauch im Watchdog-Mode zu haben: ca. 1 µA (bei 
„Normaltemperatur“). Die Sensoren laufen jedenfalls nun schon seit 
Jahren mit 2 x LR03. Die Batteriespannung ist in dieser Zeit von 3,3 auf 
2,7 V gesunken, aber das ist immer noch fern der Entladeschlussspannung. 
(Sie wachen per Watchdog jede Sekunde auf, und alle 5 min machen sie 
eine Temperaturmessung und funken das Ergebnis zum Empfänger in die 
Wohnung.)

Größtes Problem beim Außensensor waren übrigens Kriechströme und 
entsprechende Schädigungen der Platine. Im Vergleich dazu ist die 
Mikroampere-Diskussion Spaß. :)

: Bearbeitet durch Moderator
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
Noch kein Account? Hier anmelden.