Hi,
Ich schreibe derzeit im Zuge einer studienarbeit einen datenlogger auf
basis eines AT324P. Die Funktionalitaet ist nahezu fertig jedoch haenge
ich jetzt vor einem problem, was mir persoenlich trivial erscheint, aber
einfach nicht funktionieren will.
Das Problem ist folgendes:
Um in regelmaessigen Intervallen die Eingaenge abzuspeichern habe ich
eine Uhr die mit dem DCF77 Signal syncronisiert ist. Beim starten der
Aufnahme speichere ich mir also die aktuelle zeit ab, und beim schreiben
jedes datensatzes auch. Ist die differenz meiner aktuellen uhrzeit
gegenueber des letzten datensatzes >= des intervalls, wird ein neuer
datensatz geschrieben. Das ganze ist so ausgelegt, dass die Intervalle
in 10ms schritten angepasst werden koennen.
Ich habe folgenden Codeabschnitt zum testen geschrieben (ergibt wenig
sinn ;)
1 | double micro = getMicroTime();
|
2 | double unix = (double)getUnixTime();
|
3 | double diff = micro - unix;
|
4 |
|
5 | char buf[16];
|
6 | dtostrf((subcount/100.0), 13, 2, buf);
|
7 | lcd_set_cursor(1,0);
|
8 | lcd_string(buf);
|
9 |
|
10 | dtostrf(micro, 13, 2, buf);
|
11 | lcd_set_cursor(2,0);
|
12 | lcd_string(buf);
|
13 |
|
14 | dtostrf(unix, 13, 2, buf);
|
15 | lcd_set_cursor(3,0);
|
16 | lcd_string(buf);
|
17 |
|
18 | dtostrf(diff, 13, 2, buf);
|
19 | lcd_set_cursor(4,0);
|
20 | lcd_string(buf);
|
getMicroTime() - double - representiert die Unix Timestamp bis auf 1ms
genau (z.B. 1268008800.120)
getUnixTime() - long - gibt die Unix Timestamp zurueck
diff - sollte nun logischerweise die anzahl der millisekunden sein.
subcount ist eine globale variable und enthaelt die millisekunden.
Das merkwuerdige ist ... subcount/100.0 zaehlt schoen zwischen 0 und 1
Die Unix Timestamp hat einen wert, der sich nicht veraendert (wenn ich
sie mit ltoa ausgebe funktioniert alles)
Die MicroTime hat den selben wert wie die unix time, obwohl sie
berechnet wird aus:
1 | double getMicroTime()
|
2 | {
|
3 | return ((double)getUnixTime()) + (subcount/100.0);
|
4 | }
|
so wie ich das anschaue funktioniert also die addition der beiden double
werte nicht, bzw. der cast von long zu double um dann damit zu rechnen.
Hat jemand ne Idee was falsch ist?