Hi,
ich benötige für eine stromsparende anwendung einen zuverlässigen wakeup
nach ca 60 minuten. der watchdog geht maximal 8 sekunden. Ich könnte
jetzt alle 8 sekunden einen wert im eeprom hochzählen, aber geht es evtl
noch stromsparender??
Basti schrieb:> Ich könnte> jetzt alle 8 sekunden einen wert im eeprom hochzählen
Warum im EEProm?
Machs dir doch im Ram!
Basti schrieb:> aber geht es evtl> noch stromsparender??
Es gibt RTCs mit einstellbaren Alarmzeiten, genau für solche Zwecke.
Basti schrieb:> Ich könnte> jetzt alle 8 sekunden einen wert im eeprom hochzählen, aber geht es evtl> noch stromsparender??
Wie schon mehrfach von Anderen angemerkt, macht man das natürlich nicht
im EEPROM. RAM ist viel besser. Noch besser wären allerdings
MCU-Register. Allerdings ist der Unterschied zwischen Registern und RAM
sehr viel kleiner als der zwischen RAM und EEPROM. Das lohnt (wenn
überhaupt) nur dann, wenn das Teil immer den größten Teil seiner Zeit im
Countdown zum Wakeup verbringt.
> zuverlässigen wakeup
Sollte eventuell das "zuverlässig" der Grund sein, dass du den EEPROM
benutzen willst? Dann ist es der falsche Grund, es wird dadurch kein
bissel "zuverlässiger".
Wie den vorherigen Antworten zu entnehmen ist, geht das beim AVR
wohl nicht stromsparender.
Außer du vermeidest das EEPROM, denn das kostet viel Zeit und
somit Energie, es alle 8 Sekunden auszulesen und zu beschreiben.
Das ist aber nicht das Schlimmste!
Hinzu kommt: Du musst du alle 9 Tage zwei neue EEPROM-
Speicherstellen benutzen (60 m = 8 s * 450, > 1 Byte), denn
dann sind die 100.000 garantierten Schreibzyklen aufgebraucht.
In drei EEPROM-Zellen musst du auch die Zyklen mitschreiben,
die sind danach auch verbraucht.
Bleiben noch
25 von 128, oder
51 von 256, oder
102 von 512 EEPROM-Speicherstellen.
Dabei bleibt sogar Platz im EEPROM für einen Zeiger auf die
gerade gültige Speicherstelle.
Na gut, 25...102 * 9 Tage sind schon 225 Tage bis 2,5 Jahre.
Oder weniger, wenn das EEPROM noch anderweitig benutzt wird.
- Wäre mir jedenfalls zu doof, den µC langsam aufzurauchen!
Und wie lange soll die Batterie halten?
Euch ist aber schon klar, dass auch ein Timer den AVR wieder wecken
kann? Warum man da unbedingt den Watchdog für missbrauchen will ist mir
irgendwie schleierhaft.
Und externer Interrupt wäre keine Option? Vielleicht wenn man die
Aufgabe besser kennen würde die der uC bewältigen soll...
Michael K. schrieb:> Warum man da unbedingt den Watchdog für missbrauchen will ist mir> irgendwie schleierhaft.
Mir ist schleierhaft, warum das ein Missbrauch sein soll.
Allerdings scheinen mir, du und der TO der Auffassung zu sein, daß der
WD auch nur als solcher benutzt werden kann. Nämlich dazu, periodisch
einen Reset auszulösen. Daher wohl auch die Idee mit der Zählvariablen
im E²PROM.
Der WD kann aber auch als Timer benutzt werden. Und das macht auch Sinn,
da der WD-Oszi immer läuft. Auch im Power Down. Während ein normaler
Timer mit dem CPU-Takt versorgt wird, der nur im Idle läuft.
Stromsparender als der WD-Timer ist nur der Asynchron-Timer mit
Uhrenquarz. Den hat aber nicht jeder AVR. Mit Boardmitteln allein ist
der WD-Timer mit Power Down die stromsparendste Lösung. Der Zähler läuft
dann selbstverständlich im RAM.
Was spricht denn dagegen fuer Stormsparanwendungen einen AVR mit Timer2
auf 32kHz zu verwenden ? Weil man unbedingt einen Tiny verwenden will,
der 2 cent guenstiger ist ? Wieviele 10k Exemplare muss man da
raushauen, umd da etwas zu sparen ?
Wer schreibt was von tiny avr?
ich denke es wird ein mega 328p - ein tiny hat für die anwendung zu
wenig ram.
Der bisherige plan war, nach dem durchlaufen des programmes einen
powerdown durchzuführen. CPU takt=0
Dann per watchdog reset wieder aufwecken... Daher auch eeprom und nicht
ram. der Ram wird beim reset nicht zuverlässig erhalten.
Wenn der Timer 2 im powerdown weniger strom verbraucht als der watchdog,
dann ist das evtl schon die lösung. kann der timer2 auch den Powerdown
wieder beenden?
Basti schrieb:> Dann per watchdog reset wieder aufwecken... Daher auch eeprom und nicht> ram. der Ram wird beim reset nicht zuverlässig erhalten.
Das ist Unsinn. Der Watchdog kann als normaler Timer mit eigenem Takt,
dem WD-Oszillator, benutzt werden. Dann kann der Zähler im RAM liegen.
Alle 8s oder was auch immer eingestellt ist, weckt der WD-Interrupt den
Controller aus dem Power Down auf. Dann wird die Variable hochgezählt.
Ob in der WD-ISR oder im Hauptprogramm ist egal. Aber nix Reset.
Der Timer2 mit Uhrenquarz macht praktisch das gleiche. Nur wesentlich
genauer und mit geringfügig niedrigerem Stromverbrauch. Dafür gibt es
extra den Sleep-Mode Power Save.
In beiden Fällen werden RAM und Register aber weiter mit Spannung
versorgt. Du brauchst kein E²PROM!
S. Landolt schrieb:> Nach 'Figure 31-296' ist es ein Faktor von 5.
Doch so viel. Ich hatte das vor Ewigkeiten mal nachgemessen. Die genauen
Werte erinnere ich allerdings nicht mehr.
Hinweis an den Kleinschreiber:
Für den 32 KiHz-Quarz muss das verwendete Programmiergerät auf einen
entsprechend niedrigen Takt einstellbar sein, sonst ist der erste
Versuch der letzte.
S. Landolt schrieb:> Hinweis an den Kleinschreiber:> Für den 32 KiHz-Quarz muss das verwendete Programmiergerät auf einen> entsprechend niedrigen Takt einstellbar sein, sonst ist der erste> Versuch der letzte.
Wieso?
Der µC läuft weiter auf 8MHz.
Es ist nur Timer2 (oder war es 1), welcher vom 32kHz Quarz getrieben
wird.
8MHz ist ganz normal da sollte jedes Programmiergerät mit klar kommen.
Nobody schrieb:> S. Landolt schrieb:>> Hinweis an den Kleinschreiber:>> Für den 32 KiHz-Quarz muss das verwendete Programmiergerät auf einen>> entsprechend niedrigen Takt einstellbar sein, sonst ist der erste>> Versuch der letzte.>> Wieso?> Der µC läuft weiter auf 8MHz.(oder 1MHz)> Es ist nur Timer2 (oder war es 1), welcher vom 32kHz Quarz getrieben> wird.> 8MHz ist ganz normal da sollte jedes Programmiergerät mit klar kommen.
Basti schrieb:> kann der timer2 auch den Powerdown> wieder beenden?
Ja, kann er. Wie gesagt, du könntest z.B. auch einen
Pin-Change-Interrupt benutzen, auch sowas kann den Atmega wieder wecken.
Und ja, auch den WD kann man dafür benutzen aber eigentlich ist der WD
ja dafür da, den Atmega aus einer Endlosschleife zu holen falls er mal
da drin fest hängt. Er soll eigentlich den Atmega also wieder zum
"normalen" Arbeiten bringen. Man kann dafür den Systemreset benutzen,
man kann aber auch den Interrupt benutzen was hier dann zu tun wäre.
Wie gesagt, mir wäre das zuviel Gezumpel, Timer2 ist da, zumindest für
mich, einfacher zu handhaben.
Michael K. schrieb:> Euch ist aber schon klar, dass auch ein Timer den AVR wieder wecken> kann?
Nicht aus dem weitaus effizientesten aller Schlafmodi, dem "PowerDown".
Aus diesem Modus können nur asynchrone Quellen der AVR wieder erwecken
und genau das sind seine Timer halt überwiegend nicht. Nur Timer2 und
dieser auch nur im asynchronen Modus stellt eine Ausnahme von dieser
Regel dar.
Blöderweise hat längst nicht jeder AVR einen Timer2 und selbst von
denen, die den haben, ist längst nicht jeder fähig, den asynchron zu
betreiben...
> Warum man da unbedingt den Watchdog für missbrauchen will ist mir> irgendwie schleierhaft.
Das mag daran liegen, dass du nicht den Hauch einer Andeutung einer
Ahnung hast...
Michael K. schrieb:> Timer2 ist da, zumindest für mich, einfacher zu handhaben.
Ist es nicht, da du es gar hinbekommst:
>> kann der timer2 auch den Powerdown>> wieder beenden?>> Ja, kann er.c-hater schrieb:> Das mag daran liegen, dass du nicht den Hauch einer Andeutung einer> Ahnung hast...
Da kann man c-hater nur zustimmen.
Herrlich,
der TO schmeißt eine Frage rein, ohne sich zu äußern, um was
für einen AVR es geht: kleinster Tiny-AVR, oder größter Mega-AVR.
Es kommen (nach bestem Wissen) hilfreiche Antworten, nur damit
man irgendwann vom TO für blöd erklärt wird, weil man nicht erraten
hat, dass er einen mega328 mit Timer2/async hat.
Ob er da einen externen Clock einspeist, der vielleicht ein
besseres Minuten-Timing gegenüber dem 8 * WD-IRQ bringen KÖNNTE,
ist natürlich weiterhin sein Geheimnis.
Dazu besteht er unbelehrbar auf EEPROM-Abnutzung...
Wer nicht überlegen mag und nicht rechnen kann, muss eben erst
mal spüren, dass die EEPROM-Zelle (100.000 Minuten = 70 Tage)
vor der Batterie verreckt. ;-)
Wünschen wir ihm einfach viel Spaß dabei!