Firmware

Die Statelogger Firmware ist in C geschrieben und kann an die eigenen Bedürfnisse angepasst werden.

Sie steht hier zum Download bereit.


Bedienung

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.


Auslesen der Daten

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


Beispieldatei

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.


Auswertung der Daten

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.

Ergebnis
Di;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.