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
:
Bearbeitet durch User
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
Thomas W. schrieb: > Statt des Potentiometer könntest du eine Drehencoder verwenden. Klingt auch interessant.
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.
Der 328 hat übrigens einen Analog-Komparator mit drin, der direkt einen Interrupt auslösen kann ;)
> einen Analog-Komparator
Ja, dass reicht für einen "Fensterkomparator" aber nicht.
Der braucht 2.
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.
:
Bearbeitet durch User
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ß. :)
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.