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.
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.
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
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.
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
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.
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
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?
Stefanus F. schrieb:> Ein Komparator vergleicht aber nicht mit dem vorherigen Wert, sondern> mit einem festen Schwellwert.
Das ist dem Komparator vollkommen egal.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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ß. :)