www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega8 lange schlafen legen und wenig Strom verbrauchen


Autor: Jens Carstens (jcarstens)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin zusammen!
Ich weiss, der Betreff klingt blöd, aber anders konnte ich es nicht 
ausdrücken...

Ich 'kämpfe' im Moment mit folgendem Problem: Für eine kleine 
Überwachungsaufgabe möchte ich aus verschiedenen Gründen einen ATMega8 
einsetzen, wahrscheinlich tut es auch ein Tiny15, aber von AVR möchte 
ich nicht weg. Dieses Teil soll, aus Batterien versorgt, gelegentlich 
mal etwas messen und rechnen und dann vielleicht mal auch was tun, aber 
das ist egal, das ganze dauert weniger als 40ms und soll so ca. alle 
10..20 Minuten passieren, der Stromverbrauch in der aktiven Phase ist 
also ziemlich Latte. Woran ich im Moment knobele ist, wie ich den AVR in 
regelmässigen Intervallen  aus dem Tiefschlaf aufwachen lassen kann, 
ohne dabei nennenswert mehr Strom zu verbrauchen als der Prozessor 
selbst.
Timer scheidet von vornherein aus, weil der Käfer dann ein ganzes mA 
haben will, weil der nicht im Tief- sondern nur im Halbschlaf 
funktioniert.
Watchdog habe ich ausprobiert, auf 2 Sekunden, dann Resetquelle testen, 
das funktioniert prima (wenn man verstanden hat, was .noinit 
bedeutet...), aber die Möhre braucht dann 55uA bei 5V im Leerlauf. Da 
weist das Datenblatt auch drauf hin.
Alle Takte abschalten, und einen statischen Level Interrupt an INT0 
auslösen war dann meine nächste Idee. RC-Glied dran, 1M und 5uF, das 
weckt die Gurke dann alle paar Sekunden ganz kurz auf, da kann man einen 
Zähler runterzählen,  und wenn die Zeit reif ist, die nötigen Aktionen 
ausführen. Hatte ich mir so gedacht...
Aber Pustekuchen. Sobald man am INT0-Eingang nicht mit Logikpegeln 
arbeitet, sondern so langsam die Ladekurve durchfährt, fängt der ATMega 
an, so bis zu 300uA zu lutschen. Nicht aus dem Eingang, denn dann würde 
das mit dem RC-Glied mit 1M nicht mehr hinhauen, aber intern wird da 
irgendwas im 'Verbotenen Bereich' leitend, fürchte ich.
Vor dem Analogkomparator wird im Datenblatt genau so gewarnt wie vor dem 
Watchdog...
Hat noch jemand eine Idee?
Ich bin hier fast am verdreifeln...

Für jeden Rat dankbar:
Jens

(Ausser er lautet: nimm doch einen MSP4XXX)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uhrenquarz?

...

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm einen neueren AVR, z.B. ATmega48/88/168 (Sind alle pinkompatibel 
zum 8er). Da kannst du den Timer mit einem externen Quarz laufen lassen, 
oder aber für das ganze System gleich den internen 128kHz-Oszi 
verwenden, wenn dir die Rechenleistung dann noch reicht. Viel weniger 
Strom brauchen da auch die msp430 nimmer.

Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und einen Resetcontroller zu nutzen TL7705 o.ä. um wirklich nur echte 
high/low auf den Int zu geben ?

oder hab ich das mit den 300µA nicht verstanden ?

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja, was heisst eigentlich "gelegentlich"? Hängt das von irgendwelchen 
externen Einflüssen ab, oder geht es dabei nur um zeitliche Intervalle? 
Bei ersterem sollte sich doch aus irgendeinem Ereignis ein Interrupt 
generieren lassen, nicht?

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jens Carstens (jcarstens)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim B. wrote:
> und einen Resetcontroller zu nutzen TL7705 o.ä. um wirklich nur echte
> high/low auf den Int zu geben ?

Müsste man sehen, wieviel Strom der wieder für sich selbst nimmt...

> oder hab ich das mit den 300µA nicht verstanden ?

Doch doch, hattest du schon richtig verstanden. Sauberer Pegel würde da 
sicher helfen, aber ich suche (hatte ich vergessen zu erwähnen) auch 
nach der einfachsten Methode.

Autor: Jens Carstens (jcarstens)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Philipp Burch wrote:
> Achja, was heisst eigentlich "gelegentlich"? Hängt das von irgendwelchen
> externen Einflüssen ab, oder geht es dabei nur um zeitliche Intervalle?
> Bei ersterem sollte sich doch aus irgendeinem Ereignis ein Interrupt
> generieren lassen, nicht?

Gelegentlich heisst wirklich gelegentlich. Da passiert nichts von 
aussen, deswegen muss der AVR ja 'ab und zu' mal nachsehen. Die absolute 
Zeit spielt auch keine grosse Rolle.

Ich denke, ich werde es mal mit einem Uhrenquarz am asynchronen Timer 
versuchen, die kosten ja auch nichts.
Weiss jemand, mit welcher Stromaufnahme da zu rechnen ist? Ich komm erst 
nächste Woche wieder zum Messen.

Autor: Jens Carstens (jcarstens)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, jetzt antworte ich mir mal selbst:
Ich habe es ausprobiert, mit Timer 2 asynchron an einem 32kHz Uhrenquarz 
braucht die Möhre bei 10 uA rum (9uA bei 3,8V, 12uA bei 5,0V) und muss 
auch nur alle 8 Sekunden kurz aufwachen, um mal nachzusehen, ob es schon 
an der Zeit ist, nach dem Rechten zu sehen... Mein 2000mAh Akku reicht 
dazu so ungefähr 200000 Stunden lang, das sind so bummelig 22 Jahre...

Irgendwie hatte ich einen Klotz vor dem Kopf, der mich gar nicht an 
einen Quarz denken liess, weil ich die Genauigkeit ja überhaupt nicht 
brauche. Völlig übersehen hatte ich dabei die Tatsache, dass ein 32kHz 
Uhrenquarz (14ct) bei Reichelt billiger ist als ein 1uF Kondensator.

Nuja, wieder was gelernt.
In diesem Sinne weiterhin fröhliches mikroprozessieren wünscht
Jens

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du den Uhrenquarz auch mal als Teaktquelle für die CPU getestet? 
Wenn Du nicht viel Rechenleistung brauchst, könnte das auch sinnvoll 
sein.

...

Autor: Hauke Sattler (hauke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich habe mal nen Logger für die Uni gebaut.
Darin waren unter anderem nen Tiny15, eine PCF8593 RTC, ein 24LC256 
EEPROM und ein PCF8574 IO Baustein verbaut.
Haut laut Meßgerat im Schlafzustand zwischen den Messungen weit unter 
1µA verbraucht.
TWI-Pullups, EEPROM und IO-Baustein wurden während des Schlafens durch 
nen kleinen P-Kanal Fet abgeschaltet.

Ich würde eine externe RTC als Weckquelle nehmen. Brauchen SEHR wenig 
Strom. Und sind genauer als irgendwelche RC Glieder.

Sehr gut ist wie gesagt die PCF8593, weil die neben den normalen 
zeitbasierten Events auch timergestützte Interupts anbietet.

cu
bis dann
Hauke Sattler

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst auch den Watchdog nutzen, der zyklisch (alle 8 Sek.) den 
Controller weckt, eine Variable hochzählt und dann sofort wieder pennen 
geht. Erreicht die Variable den festgesetzten Wert (für 20 Minuten), 
dann macht der Controller die Messung, setzt die Variable zurück und 
geht wieder schlafen. Vorteil: keine externen Bauelemente, kein Timer 
verheizt. Mit der Stromaufnahme für eigeschalteten Watchdog bei power 
down mußt Du mal gucken.

Autor: Jens Carstens (jcarstens)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes Lux wrote:
> Hast Du den Uhrenquarz auch mal als Teaktquelle für die CPU getestet?
> Wenn Du nicht viel Rechenleistung brauchst, könnte das auch sinnvoll
> sein.

Moin Hannes,
die Variante werde ich interessehalber auch mal messen. wobei das für 
meine konkrete Anwendung nicht passt. Wenn die Kiste alle 20 Minuten 
aus dem Quark kommt, dann hat sie auch 'einiges' zu tun, wofür der 
interne Takt mit 1MHz genau richtig ist. Der Stromverbrauch des 
Prozessors spielt dann keine Rolle im Verhältnis zum Rest der Schaltung. 
Ich müsste also die Fuses im laufenden Betrieb vom Programm aus 
umbrennen...

Aber vielen Dank für die vielen Ideen sagt
Jens

Autor: Jens Carstens (jcarstens)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hauke Sattler wrote:
>[...]
> Ich würde eine externe RTC als Weckquelle nehmen. Brauchen SEHR wenig
> Strom. Und sind genauer als irgendwelche RC Glieder.
>[...]
> cu
> bis dann
> Hauke Sattler

Moin Hauke,
das Teil müsste ich aber erst bestellen, und meine Idee war auch, das 
ganze so simpel wie möglich zu halten. Wie ich bereits erwähnt hatte, 
ist für meine Anwendung jegliche Genauigkeit (der Zeit) völlig 
überflüssig.

Viele Grüsse,
Jens

Autor: Jens Carstens (jcarstens)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Travel Rec. wrote:
> Du kannst auch den Watchdog nutzen, der zyklisch (alle 8 Sek.) den
> Controller weckt, eine Variable hochzählt und dann sofort wieder pennen
> geht. Erreicht die Variable den festgesetzten Wert (für 20 Minuten),
> dann macht der Controller die Messung, setzt die Variable zurück und
> geht wieder schlafen. Vorteil: keine externen Bauelemente, kein Timer
> verheizt. Mit der Stromaufnahme für eigeschalteten Watchdog bei power
> down mußt Du mal gucken.

Moin!
Höhö, ich könnte jetzt klugscheissen: "Erst lesen, dann posten...", tu 
ich aber nicht ;-)
Genau das habe ich in meinem Eingangspost erwähnt: (ich zitiere mich mal 
selbst)
>Watchdog habe ich ausprobiert, auf 2 Sekunden, dann Resetquelle testen,
>das funktioniert prima (wenn man verstanden hat, was .noinit
>bedeutet...), aber die Möhre braucht dann 55uA bei 5V im Leerlauf. Da
>weist das Datenblatt auch drauf hin.

Ist aber trotzdem eine gute Idee, wenn die Stromaufnahme nicht ganz so 
kneift und man lieber Bauteile sparen will.

IdS,
viele Grüsse,
Jens

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens:
Sh*t, Brille nicht geputzt! Danke für den Hinweis.

>Ich müsste also die Fuses im laufenden Betrieb vom Programm aus >umbrennen...

Das wird nichts. Nicht umsonst heißen die Dinger "Fuses". Du kannst sie 
zwar vom Programm aus lesen, aber nicht schreiben. BootLockBits kann man 
vom Programm aus schreiben.

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens Carstens

Wow nicht schlecht, deine erreichte laufzeit. auch wenn die nur 
theoretisch ist, die selbsentladung einer batterie ist ja auf einer so 
langen zeit auch nicht zu vernachlässigen :) besser gehts halt kaum 
noch.
Takt und spannung könnte man noch testen, muss man nicht. Viel mehr wie 
deine Lösung ist eh nichtmehr drin.

wie hast du den uhrenquarz angeschlossen, das er den µC alle 8s weckt? 
Welches event weckt den µC dann auf?

Autor: Troll Blaubär (blaubeer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wie hast du den uhrenquarz angeschlossen, das er den µC alle 8s weckt?

Da gibt's beim Mega8 nur eine Möglichkeit. Die Pins sind identisch mit 
den normalen Quarzpins.

> Welches event weckt den µC dann auf?

Timer2 im asynchronen Betrieb.

MFG, Bb

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.