Die Statelogger Firmware ist in C geschrieben und kann an die eigenen Bedürfnisse angepasst werden.
Sie steht hier zum Download bereit.
Nach einem langen Tastendruck leuchtet die LED auf, um eine Reaktion auf den Tastendruck anzuzeigen. Danach muss der Taster losgelassen werden. Jetzt wird per LED der aktuelle Zustand angezeigt (LED an, LED aus oder LED blinkend). Per Tastendruck kann der Zustand geändert werden. Wenn der Benutzer für fünf Sekunden keine Taste drückt, geht das Gerät nach einem Bestätigungs-Blinken in den neuen Zustand über. Der alte Zustand wird mit der dazugehörigen Zeitspanne im EEPROM abgespeichert.
Wenn das EEPROM einen gewissen Füllgrad erreicht, blinkt die LED im Normalbetrieb alle zwei Sekunden. Wenn das EEPROM fast voll ist, blinkt die LED einmal pro Sekunde. Dieses Blinken ist sehr kurz und verbraucht deswegen nur geringfügig mehr Strom.
Bevor man die im EEPROM gespeicherten Daten ausliest, muss man den letzten Zeitabschnitt durch Wechseln des Zustands noch einmal abspeichern. Danach liest man das EEPROM mit SP12 (bzw. einer anderen Software nach Wunsch) aus. Wenn man danach durch Abziehen des Kabels das Gerät wieder startet, werden neue Daten am Ende des beschriebenen Bereichs im EEPROM hinzugefügt. Will man dagegen alle Daten löschen, muss das EEPROM erst gelöscht werden.
| Auslesen des EEPROMS:
sp12 -refC eeprom.hex |
| Löschen des EEPROMS:
sp12 -wefC empty_eeprom.hex |
Address: Data in hex, dec, oct, bin 000000: 0x1b 27 033 00011011 0x0001: 0000 0 0 00000000 0x0002: 0xc0 192 0300 11000000 0x0003: 0x89 137 0211 10001001 0x0004: 0xff 255 0377 11111111 0x0005: 0x3f 63 077 00111111 0x0006: 0xc4 196 0304 11000100 0x0007: 0x2f 47 057 00101111 0x0008: 0xff 255 0377 11111111 0x0009: 0xbf 191 0277 10111111 0x000a: 0xb1 177 0261 10110001 0x000b: 0xa5 165 0245 10100101 0x000c: 0xb5 181 0265 10110101 0x000d: 0x10 16 020 00010000 0x000e: 0xff 255 0377 11111111 0x000f: 0xff 255 0377 11111111 ... |
Zustand 0 für 27 Sekunden Zustand 2 für 2496 Sekunden Zustand 0 für 16383 Sekunden Zustand 0 für 12228 Sekunden Zustand 2 für 16383 Sekunden Zustand 2 für 9649 Sekunden Zustand 0 für 4277 Sekunden noch nicht beschrieben ... |
Jeweils zwei Byte sind als ein Wert zu betrachten. In den höherwertigsten zwei Bits ist der Zustand gespeichert. Die restlichen 14 Bits geben die Zeit in Sekunden an. Wenn die maximal darstellbare Zeitspanne erreicht wird, wird diese ebenfalls abgespeichert und ein neuer Eintrag begonnen.
Mit einem kleinen Kommandozeilen-Programm, welches in Delphi geschrieben wurde (ebenfalls bei Bedarf abänderbar), kann man die Daten in CSV Dateien konvertieren. Das Programm faßt Zeitabschnitte, die durch "Überlauf" zustande kamen zusammen und rechnet von der Uhrzeit der EEPROM-Datei rückwärts die Uhrzeiten aus. Zum Schluss werden die Zeiten in den jeweiligen Zuständen pro Tag zusammenaddiert.
| Aufruf des Programms:
statelogger.exe eeprom.hex 1,0 statename1,statename2,statename3,statename4 |
Der zweite Parameter gibt einen Faktor an, mit dem die Zeiten "gestreckt" werden. Damit kann der berechnete Wert entsprechend dem zwar temperaturunabhängigen, aber nicht geeichten Takt des DS32KHZ angepaßt werden. Man mißt dazu einfach einmalig einen größeren Zeitabschnitt und rechnet den Faktor entsprechend aus. Bei mir ist der Faktor beispielsweise 1,0078.
ErgebnisDi;28.03.2006;00:52:39;00:53:06;state0;00:00:27 Di;28.03.2006;00:53:06;01:34:42;state2;00:41:36 Di;28.03.2006;01:34:42;09:31:33;state0;07:56:51 Di;28.03.2006;09:31:33;16:45:25;state2;07:13:52 Di;28.03.2006;16:45:25;17:56:42;state0;01:11:17 |
und als Zusammenfassung die Werte pro Tag:
Di;28.03.2006;7,92;0,00 |
Alle Befehle sind in einer Batchdatei report.cmd zusammengefasst. Alle Dateien inkl. Auswertungs-Programm und SP12 sind hier zum Download verfügbar.