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)
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.
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 ?
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?
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.
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.
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
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. ...
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
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.
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
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
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
@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.
@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?
> 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
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.