Forum: Mikrocontroller und Digitale Elektronik Zeitstempel beim Loggen, Speicherbedarf


von Rudolf Z. (rudolf_z37)


Lesenswert?

Hallo Fachleute,

ich brauche eine Bestätigung meiner Überlegungen zu einem Schulprojekt.
habe schon den ganzen tag im Netzt gestöbert aber keine schönen 
Beispiele gefunden.

Wir wollen einen Messwert loggen, 1Byte groß.
Zu jedem Messwert soll ein Zeitstempel hinzu kommen, 
Tag/Monat/Stunde/Minute.

Ich habe mir das jetzt einfach gemacht und für jeden Mess punkt 
insgesamt 5 Byte angedacht.

1byte --> Messwert
1byte --> Tag    (eigentlich 5bit ausreichend, ich mache es mir einfach)
1byte --> Monat  (eigentlich 4bit ausreichend)
1byte --> Stunde (eigentlich 5bit ausreichend)
1byte --> Minute (eigentlich 6bit ausreichend)

Wie ihr seht bin ich nicht sehr sparsam mit der Speichervergabe. So ist 
es im Moment halt einfacher :)

Die Daten werde wahrscheinlich in einem I2C EEPROM 32kb gespeichert, da 
der Mega8 Speicher doch recht klein für meine großzügige vergabe ist.

Wenn ich also 5byte nutze, kann ich mit dem EEPROM 6.400 Messungen 
speichern.

Ich denke dass es hier doch einiges zu verbessern gibt. Deshalb hoffe 
ich auf eure Tipps oder informative Links. Oder sogar simple 
Beispielprojekte :)

Vielen Dank im Voraus.

von STK500-Besitzer (Gast)


Lesenswert?

Guck mal, wieviele Bytes hier gebraucht werden:

http://de.wikipedia.org/wiki/Unixzeit

Du musst das Datum einfach nur "verpacken". Es muss ja nich unbedingt im 
EEPROM von Menschen lesbar sein. Es reicht, wenn man bei der Auswertung 
das Datum wieder entpackt (Datum im Sinne von Tag, Monat, Jahr + 
Uhrzeit).
Mit deinen 4 Byte kämst bei sekündlicher Ausflösung auf +/- 68 Jahre...

Wenn du in regelmäsigen Intervallen (z.B. pünktlich jede Minute) einen 
Wert speicherst, dann brauchst du auch nur Datum der ersten Messung 
speichern, weil die restlichen Messungen in fest vorgegeben Abständen 
durchgeführt wurden.

von Fred (Gast)


Lesenswert?

Nimm einfach 2 Byte als Minutenzähler und merk dir den definierten 
Anfang,
dann kannst du bis 45 Tage weiterzählen.
Mit 3 Bytes wären dann 10922 Messwerte möglich.

von Martin B. (martin_b97)


Lesenswert?

Du könntest Unix-Time als Zeitstempel benutzen 
http://en.wikipedia.org/wiki/Unix_time, da reicht bis 2038 
http://en.wikipedia.org/wiki/Year_2038_problem noch ein signed 32 Bit 
Wert aus.

Ansonsten könntest du Überlegen, dir am Anfang des Logfiles die Absolute 
Zeit zu speichern, und dann für jeden Messwert die Differenz in 
[Sekunden|Minuten] dazu.

Kommt alles darauf an wie lange die Messung dauert und wie oft Messwerte 
aufgenommen werden.

Martin

von Dr G. Reed (Gast)


Lesenswert?

Ich hab das mal so gelöst:

Für jeden Tag brauchst Du 1440 Bytes, gibt also Platz für etwa 22 Tage, 
wenn man den Speicherplatz in Bereiche zu 1440 Bytes einteilt.

In einem Inhaltsverzeichnis wird festgehalten, welcher der Bereiche zu 
welchem Tag gehört.

Um einen Wert abzuspeichern, musst Du also zuerst im Inhaltsverzeichnis 
nachschauen, ob es schon einen reservierten Bereich für diesen Tag gibt.
Wenn ja, Wert an passender Stelle abspeichern (pos=Stunde*60+Minute)

Ansosnten nächsten freien Bereich feststellen und den Tag im 
Inhaltsverzeichnis eintragen.

Somit können 22 verschiedene Tage komplett aufgezeichnet werden.
Reicht meist, weil man den Logger üblicherweise irgendwo für ein paar 
Tage hinlegt und dann ausliest.

von Rudolf Z. (rudolf_z37)


Lesenswert?

Wow...

soviel schnelle antworten danke erstmal.
Werde mir jetzt alle mal genauer ansehen.

von amateur (Gast)


Lesenswert?

Wenn ich davon ausgehe, dass Du nicht Zyklisch messen tust, so würde ich 
die "Zeitstempel" abhängig davon machen wie lange Du messen willst. Du 
packst die Startzeit an den Anfang deiner Daten und vor oder hinter 
jeden Messwert einen Zähler. 1 Tag mit 1 Sekunde Auflösung benötigt 24 * 
60 * 60 = 86400 als Maximum. Das passt in eine 3 Byte Zahl und die 
reicht notfalls 1/2 Jahr.

von Jürgen (Gast)


Lesenswert?

Ob du da jetzt mehr machen solltest, hängt von den Anforderungen ab, 
z.B. wieviele Meßwerte gespeichert werden sollen.
Wenn dein einfaches Schema für die Anforderungen reicht, dann solltest 
du es so machen, Einfachheit ist gut (weniger Arbeit, weniger Fehler).

Du hast ja schon gemerkt, dass 20 Bit für den Zeitstempel reichen, also 
reichen 4 Bytes für einen Eintrag.  Das ist immer noch sehr einfach zu 
programmieren, aber man sieht den Daten nicht mehr sofort die Zeit an, 
ein kleiner Nachteil.

Ansonsten könnte man noch verschiedene Arten von Logeinträgen machen, 
z.B. einen für volle Zeitstempel und einen für Zeitdifferenz zum letzten 
Logeintrag + Meßwert, und die an einem Typ-Byte unterscheiden (oder auch 
nur an einem Typ-Bit). Da sind der Fantasie dann keine Grenzen gesetzt.

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.