Forum: Mikrocontroller und Digitale Elektronik AVR aus dem Powerdown Wecken, externe Alternative zu einer RTC?


von Stefan (Gast)


Lesenswert?

Mahlzeit!

ich möchte einen relativ simplen Temperatur Logger bauen, er soll alle 
30 Minuten die Temperatur messen und den Wert in einem externen EEProm 
ablegen.
Alle paar Tage bis ~2 Wochen hole ich die gemessenen Wert ab.
Über welche SST, da bin ich noch nicht sicher.

Für die Primäre Funktion, das loggen und wegspeichern ist es ja am 
sinnvollsten den µC so lange und so tief wie möglich schlafen zu legen 
und ihn, entweder über den Watchdog per Interrupt oder einen externen 
Interrupt, regelmäßig zu wecken.

Für meine Anforderungen scheint es mir da eine externe RTC am 
sinnvollsten, allerdings benötige ich keine absolute Zeit, es reicht mir 
zu wissen das die Messungen alle halbe Stunde gelaufen sind.

Gibt es eine sinnvolle Alternative zu einer RTC die lediglich im 
definierten Abstand (1 Hz oder weniger) ein Signal erzeugt mit dem ich 
einen Interrupt Pin des µC versorgen kann?

Vielen Dank,
Stefan

von Thomas E. (thomase)


Lesenswert?

Welcher AVR soll's denn sein?
mfg.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> Für meine Anforderungen scheint es mir da eine externe RTC am
> sinnvollsten

Warum?

Ich finde die Alternative mit dem Watchdog-Interrupt durchaus sinnvoll.
Der damit erzielbare Stromverbrauch im Schlaf liegt gut und gern im
Bereich der Selbstentladung üblicher Primärelemente (wenn du nicht
gerade mit einer Lithium-Zelle arbeitest).  Weniger wird das auch mit
einer externen RTC nicht.

(Btw., ich hab' das auch selst schon so implementiert.)

von (prx) A. K. (prx)


Lesenswert?

Der Watchdog-Oszillator ist allerdings sehr ungenau spezifiziert. Damit 
stellt sich die Frage, ob die Länge der Messintervalle dann genau genug 
ist und inwieweit sie mit der Temperatur schwankt.

von Stefan (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Welcher AVR soll's denn sein?

Ich bin noch nicht festgelegt, bisher denke ich an einen tinyX61A je 
nach dem wie viel Code ich erzeuge.

Jörg Wunsch schrieb:
> Stefan schrieb:
>> Für meine Anforderungen scheint es mir da eine externe RTC am
>> sinnvollsten
>
> Warum?

Da ich hier im Forum gelesen habe das der interne Oszilator an dem die 
RTC hängt recht ungenau sei (ich mein es wurde von 104kHz statt 128kHz 
bei einem Tiny berichtet)
Die fertige Schaltung noch zu kalibrieren wollte ich mir sparen.

> Ich finde die Alternative mit dem Watchdog-Interrupt durchaus sinnvoll.
> Der damit erzielbare Stromverbrauch im Schlaf liegt gut und gern im
> Bereich der Selbstentladung üblicher Primärelemente (wenn du nicht
> gerade mit einer Lithium-Zelle arbeitest).  Weniger wird das auch mit
> einer externen RTC nicht.

Hmm, ok, die Selbstentladung.
Mein Ansatz war so wenig Strom wie möglich zu verbrauchen um dann 
auszurechnen wie viel Strom ich für 10 Monate brauche (Dezember & Januar 
hat der Logger geschlossen) um dann zu entscheiden wo er nun genau den 
Strom her bekommt.

Einfach 2 oder 3 AAA nehmen und mir keine Gedanken um das letzte µA zu 
machen ist aber vermutlich sinnvoller.

von Peter D. (peda)


Lesenswert?

Der ATmega48A braucht nur ~1µA mit 38kHz Quarz an T2.


Peter

von Thomas E. (thomase)


Lesenswert?

Stefan schrieb:
> Ich bin noch nicht festgelegt,
Dann solltest du einen Atmega48(p)a nehmen.

• Power Consumption at 1MHz, 1.8V, 25°C
– Active Mode: 0.2mA
– Power-down Mode: 0.1µA
– Power-save Mode: 0.75µA (Including 32kHz RTC)

Die RTC mit Timer2 ist
1. genau
2. verbraucht sie weniger Strom als der ungenaue Watchdogtimer.

mfg.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:

>> Warum?
>
> Da ich hier im Forum gelesen habe das der interne Oszilator an dem die
> RTC hängt recht ungenau sei (ich mein es wurde von 104kHz statt 128kHz
> bei einem Tiny berichtet)

Gut, das ist ein Argument.  Ist natürlich 'ne Frage, wie viel
Genauigkeit du brauchst.  Bei mir war das ziemlich schnuppe, die
Schaltung sollte halt so ungefähr einmal in der Sekunde aufwachen
und dann nachschauen, ob der Benutzer was tun möchte.

Bei mir ist es ein ATmega128RFA1.  Die Abhängigkeit der Frequenz
von der Betriebsspannung ist laut Datenblatt praktisch nicht
existent (vermutlich hängt der Oszillator an einem Spannungsregler),
im Temperaturgang gibt es eine Schwankung von etwa ±2 % über den
gesamten Temperaturbereich (-40 ... +125 °C).  Damit kann ich leben.

Hab' gerade mal nachgeschaut, der ATtiny261 ist da ein wenig
schlechter, insbesondere hat er mehr Abhängigkeit von der Spannung.

Ich würde mal sagen, wenn du mehr Genauigkeit haben willst, dann
nimm einen Controller, bei dem du den Timer 2 durch einen 32-kHz-
Quarz betreiben kannst, bspw. einen ATmega48.  Das dürfte immer
noch sinnvoller sein, als da extern was dranzuknoten.

> Hmm, ok, die Selbstentladung.

Ja, die wird gern vergessen, wenn man sich die Sleep-Ströme so
ansieht. :-)

> Einfach 2 oder 3 AAA nehmen und mir keine Gedanken um das letzte µA zu
> machen ist aber vermutlich sinnvoller.

Die oben genannte Schaltung mit dem ATmega128RFA1 braucht im Schlaf
allemal weniger als 2 µA, und dabei muss sie während ihrer sekünd-
lichen Wachphase noch Sensortasten abfragen, was rein physikalisch
bedingt einige Millisekunden benötigt.  Wenn du beim Aufwachen nur
einen Zähler runterzählen willst und dich, wenn er noch nicht 0 ist,
sofort wieder schlafen legst, kommst du auf jeden Fall unter 1 µA
raus.

von Stefan (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Der ATmega48A braucht nur ~1µA mit 38kHz Quarz an T2.

Thomas Eckmann schrieb:
> Dann solltest du einen Atmega48(p)a nehmen.

Dann muss ich als Taktquelle den internen RC Oszilator verwenden.
Wenn ich die Daten dann per UART an meinen Rechner übertragen möchte 
muss ich den RC-Oszilator dann mit Hilfe des 38kHz Quarzes kalibrieren.

Bei der Alternative "Watchdog" müsste ich den Watchdog kalibrieren, und 
der driftet dann vermutlich deutlich stärker als der Uhrenquarz.

Ein Dreibeiner mit Vcc, GND und 1 Hz (oder weniger) Ausgang währe halt 
doch toll gewesen. Man kann ja nicht alles haben. :)

Danke,
Stefan

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> Dann muss ich als Taktquelle den internen RC Oszilator verwenden.
> Wenn ich die Daten dann per UART an meinen Rechner übertragen möchte
> muss ich den RC-Oszilator dann mit Hilfe des 38kHz Quarzes kalibrieren.

Das wäre sinnvoll, aber zwingend nötig ist es nur, wenn du bei
stark wechselnden Umgebungen (Vcc, Tamb) arbeiten willst.

> Bei der Alternative "Watchdog" müsste ich den Watchdog kalibrieren, und
> der driftet dann vermutlich deutlich stärker als der Uhrenquarz.

Ja, natürlich.

> Ein Dreibeiner mit Vcc, GND und 1 Hz (oder weniger) Ausgang währe halt
> doch toll gewesen.

Den Motorimpuls einer alten Armbanduhr benutzen. :-)

von Uwe (Gast)


Lesenswert?

nim nen 32768Hz Uhrenquarz als Oszilator und gut is.

von Stefan (Gast)


Lesenswert?

Jörg Wunsch schrieb:
[ ... ungenauigkeit des Watchdog ...]
> Gut, das ist ein Argument.  Ist natürlich 'ne Frage, wie viel
> Genauigkeit du brauchst.

Wenn man das nüchtern betrachtet werde ich wohl per gnuplot dann bunte 
Kurven (pro Sensor eine) zeichnen und mich drüber freuen.
Ob also 27 oder 33 Minuten zwischen den Messungen liegen ist so 
betrachtet irrelevant. Blöd wird es nur wenn es Nachts wärmer und heller 
(evtl. kommt auch ein LDR mit dran) ist als Tagsüber.

Das müsste ich aber auch auf dem Host wieder gestaucht oder gestreckt 
bekommen.

Also, ich lasse den µC per Watchdog ungefähr jede Sekunde aufwachen und 
zähle von 1800 runter.
Bei 0 hole ich mir die Messwerte von allen Sensoren, schreibe die Daten 
ins EEprom und legen den µC wieder schlafen.
Die EEprom Adressen zähle ich dabei einfach im Kreis.

Wenn ich mir nun die Daten abhole lese ich das komplett EEprom aus und 
übermittel an den Host bei welcher EEprom Adresse der µC grade steht.

Auf dem Host weis ich ja wann ich die Daten hole, ich kann anhand der 
Adressen ermitteln wie viel Messungen der µC tatsächlich gemacht hat und 
diese einfach gleichmäßig auf die Zeitspanne zwischen dem letzten 
Abholen und "jetzt" verteilen.

Nochmal Danke,
Stefan

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Alternative: du lässt den Controller wirklich eine Echtzeit mitzählen.
Bei der Kommunikation mit dem PC ermittelst du den aktuellen Fehler,
korrigierst damit ggf. die Timestamps der erhaltenen Daten, und
stellst die Uhr neu.

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
Noch kein Account? Hier anmelden.