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
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.)
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.
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.
Der ATmega48A braucht nur ~1µA mit 38kHz Quarz an T2. Peter
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.
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.
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
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. :-)
nim nen 32768Hz Uhrenquarz als Oszilator und gut is.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.