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.
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.
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.
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
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.
Wow... soviel schnelle antworten danke erstmal. Werde mir jetzt alle mal genauer ansehen.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.