Forum: Mikrocontroller und Digitale Elektronik Zeit beim Datenlogging?


von Jörn (Gast)


Lesenswert?

Moin,

für einen Klimalogger möchte ich minütlich Daten aufnehmen und die Zeit
mitspeichern. Als µC dachte ich mir dazu einen ATmega8515. Wie aber
sollte ich die minütliche Aufnahme anstellen? Am liebsten wäre mir ein
IC, das einen Interrupt erzeugt und von dem die Zeit relativ einfach
abgerufen werden kann. Bisher habe ich nur den DS1307 gefunden(elektor
1/04), dessen Zeitdaten über einen I2C-Bus erreicht werden. Ist dessen
Einsatz sinnvoll oder gibt es einen besseren Weg?

Gruß,

Jörn

von Dieter B (Gast)


Lesenswert?

Hallo

Es gibt viele Möglichkeiten.

Dein uC hat meht als einen Timer, oder sind die schon belegt oder
defekt. Was spricht gegen die Verwendung dieser.

Timer können deinen uC auch aus dem Schlaf wecken, falls das Gerät mit
Batterien laufen soll.

Klar ein RTC geht auch.

MFG
Dieter

von Jörn (Gast)


Lesenswert?

Timer besitzt er schon, defekt sind sie auch nicht und belegt ebenfalls
nicht. Allerdings halte ich die für relativ ungenau, außerdem soll er
ja auch die Uhrzeit mitspeichern, so dass man diese immer wieder neu
einstellen müßte, wenn der µC zum Beispiel zur Datenübertragung an den
PC angeschlossen wurde. Obendrein wäre mir ein Minutentakt am liebsten,
der mit den Timern schwierig zu realisiern ist.

Gibt es keine elegantere Lösung?

Gruß,
Jörn

von Jörn (Gast)


Lesenswert?

Timer besitzt er schon, defekt sind sie auch nicht und belegt ebenfalls
nicht. Allerdings halte ich die für relativ ungenau, außerdem soll er
ja auch die Uhrzeit mitspeichern, so dass man diese immer wieder neu
einstellen müßte, wenn der µC zum Beispiel zur Datenübertragung an den
PC angeschlossen wurde. Obendrein wäre mir ein Minutentakt am liebsten,
der mit den Timern schwierig zu realisiern ist, meine ich.

Gibt es keine elegantere Lösung?

Gruß,
Jörn

von edi.edi (Gast)


Lesenswert?

hat dein datenlogger einen grossen speicher und arbeitet unabhaengig vom
PC ?

falls PC immer -on- ist, kann er doch minuetlich die daten abfragen.

von Dieter B (Gast)


Lesenswert?

Hallo

Hier ein paar RTC IC von

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm


RTC-ICs: M41T00 (ST,0.8uA), PCF8563/8573/8583 PCA8565 (10-200uA, Alarm)
PCF8593 (wenig Strom, Alarm, Philips), DS1307 (Dallas)

Von Dallas gibt es aber auch fertige Datenlogger IC z.B.

http://para.maxim-ic.com/compare.asp?Fam=RTC&Tree=Sensors&HP=Sensors.cfm&ln=&SORD=638&FT_638=7251&ITEMLIST=121465,121466,121503,128290


MFG
Dieter

von Jörn (Gast)


Lesenswert?

Danke für die Hilfe!
Der Datenlogger soll über mindestens 32 KB Datenspeicher verfügen,
eventuell 64 KB. Er ist, wenn überhaupt, nur kurzzeitig an den PC
angeschlossen, so dass eine minütliche Abfrage durch den PC nicht
funktioniert.
Wie funktioniert die Zeitdatenübertragung bei einer Funkuhr? Könnte man
daraus vielleicht die Zeit aufnehmen und es dann doch mit dem internen
Timer realisieren?

Gruß,

Jörn

von Peter D. (peda)


Lesenswert?

@Jörn,

"...Allerdings halte ich die für relativ ungenau..."

"...Minutentakt am liebsten, der mit den Timern schwierig zu
realisiern ist..."

Wo hast Du denn bloß diese Märchen her ?


Die Timer arbeiten wie ein TTL-Zähler auf den Takt genau, bloß man kann
sie viel universeller an seine Anforderungen anpassen.

Mit nur 8 Bytes als zusätzliche Zählerstellen kannst Du sogar
Giga-Jahre zählen, Minuten sind daher völlig problemlos.


Sieh Dir mal diverse Uhrenprogramme an, wie einfach da alles ist.
Daß meine Uhrenprogramme nur bis zum 28.2.2100 den genauen Wochentag
und damit die genaue Sommerzeit machen, düfte heutzutage noch niemanden
stören.


Externe RTC-Steine machen ausschließlich dann Sinn, wenn geringste
Stromaufnahme im Batteriebetrieb gefordert ist.
Aber viele moderne µC haben schon Anschlüsse für ein 32kHz Quarz um
damit im Schlafmodus (wenige µA) selber die Zeit weiter zu zählen.


Peter

von Hagen (Gast)


Lesenswert?

Davon mal abgesehen, ich vermute das dein Datenlogger fast exakt immer
im gleichen Interval die Daten loggt, richtig ? Also ist die
Speicherung der Zeit zum Log garnicht nötig. Es reicht dann neben den
normalen Daten-Log-Packeten ein Zeit-Loh-Packet ins log zu speichern.
Ausgehende von dieser Startzeit hat der AVR dann zB. alle 100ms ein
neues Datenpacket geloggt. Die auswertende Software "rekalibriert"
dann beim sequentielle Lesen des Logs bei einem Zeit.Log-Packet dann
nur die interne virtuell Uhr. Bei jedem Daten-Log-Packet wird dann
dieses Zeit um ein festes Intervall erhöht, und schon hat man die Zeit
des Packetes. Dies spart natürlich ne Menge Speicher. Denn überlege mal
genau, bei einem RTC haste Jahr/Monat/Tag Stunde/Minute/Sekunde, also
meisten schonmal 6 Bytes, wenn du keine Tricks anwenden willst.

Sollten die Datenpacket nicht im gleichen Intervall kommen dann könnte
man einen Offset in Millisekunden/100 zum letzten Zeit-Packet
speichern. Angenommen 16 Bit wird dafür verwendet, so hast du dann 2^16
Millisekunden/100 (ca. 100 Minuten)  zeitspanne bis du das nächste
Zeit-Log-Packet im Log speichern müsstest.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

sehe gerade
>> möchte ich minütlich Daten aufnehmen und die Zeit

Also würde 1 Byte Zeitoffset in Sekunden von einem Datenpacket zum
nächsten ausreichen. D.h. im Log steht als erstes ein Zeitpacket das
die Beginzeit angibt. Dann wird nur der sekündliche Abstand von
Datenpacket zu Datenpacket als 1 Byte in den Datenpacketen gespeichert.
Somit verlagerst du den Aufwand und Speicherbrauch in die auswertende
Software. Die liest das Log sequentiell ein und addiert zu internen
virtuellen Zeit einfach die Sekunden aus dem Datenpacketen drauf.

Die Ermittlung des Abstandes in Sekunden zwischen zwei Packeten kannst
nun entweder absolut durch das Auslesen einer externen RTC berechnen,
oder einfach mit dem internen Timer. Ich würde den internen Timer
nehmen so wie Peter es schon vorgeschlagen hat. Überlege mal, du hast
zB. einen externen Quarz von 4.987.654 Hz am AVR dann ist der immer
"genauer" in seiner Auflösung als ein 32.768 Hz RTC Quarz.

Gruß Hagen

von ecki (Gast)


Lesenswert?

also ich hab mit einem 8515 eine uhr für einen laugenweckzähler
realisiert und die läuft schon seit anfang des jahres und hat so gut
wie keine zeitfehler ( wenige sec) der 8515 laeuft mit einem 8mhz quarz

von Hagen (Gast)


Lesenswert?

>Überlege mal, du hast zB. einen externen Quarz von 4.987.654 Hz am
> AVR dann ist der immer "genauer" in seiner Auflösung als ein
32.768
> Hz RTC Quarz.

Rechnerisch ist aber der kumulierte Fehler in Sekunden pro Jahr exakt
der gleiche wenn relativ zueinander die Quarze die gleiche
Fehlerabweichung besitzen ! Es dürfte also theroetisch keinerlei
Unterschiede machen ob man einen RTC Quarz oder jeden beliebig anderen
nimmt. Der Unterschied im tatsächlichen Fehler kommt nur daher das sich
die minimalen Taktabweichung in der Software kumulieren.

D.h. jede RTC ist wenn der Quarz, egal welche Taktfrequenz er hat,
absolut exakt läuft auch immer exakt. Es macht also, wie Peter treffend
sagte, keinen Unterschied ob man die RTC mit dem AVR oder externem RTC
Baustein baut.

Ich würde den AVR als Uhr benutzen und sicherstellen das exakt 1 mal
pro Minute ein Datenpacket geloggt wird. Nun brauch man beim Begin des
Loggings nur einmalig ein Zeit-Packet loggen, und die Zeiten der
Datenpackete in Minuten ergeben sich einfach durch Addition der
Datenpackete seit dem Zeit-Packet. Sollte mal beim AVR ein Aussetzer
vorkommen oder Zeitungenauigkeiten ausgeglichen werden, dann speichert
der AVR im Log einfach ein neues Zeit-Packet.

Gruß Hagen

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.