Hallo,
ich habe eine ältere und geschlossene Diskussion zum Thema gefunden, die leider meine Fragen nicht beantwortet. Deshalb dieser Beitrag und am Ende meine Fragen.
Ich nutze einen MEGA 2560 mit RTC unter Anderem zur zeitlichen Integration eines Wertes. Dieser kann sich von Zeit zu Zeit sprungweise ändern.
Beim "ersten" Sprung merke ich mir Zeit (millis()) und Wert. Beim nächsten Sprung dann wieder die beiden neuen Daten. Dann nehme ich den ersten Wert und multipliziere ihn mit der Differenz der beiden Werte aus millis().
Da immer Minutenwerte gewünscht sind, wird am Minutenende (von RTC-Zeit her) für die Restdauer seit der letzten Werteänderung genau so gehandelt. Die neue Minutenperiode startet dann mit genau diesem Wert aus millis().
Für die zeitliche Integration werden also immer die Werte aus millis() verwendet. Die RTC triggert nur, dass die Minute abzuschließen ist. Der Zeitwert aus der RTC selber geht nicht in die Integration ein.
Bei einem Test hatte ich den zu integrierenden Wert exakt konstant gehalten. Somit war der zu erwartende Integralwert einer Minute einfach zu berechnen. Hier fiel mir eine Abweichung auf. Alle aufeinander folgenden Minutenintegralwerte waren ca. 0,6 % zu niedrig. Nach viel Sucherei blieb eigentlich nur noch eine Abweichung der Werte aus millis() übrig.
Ein weiterer Test sah so aus. Bei jedem Minutenwechsel der RTC wurde ein Wert aus millis() ermittelt und über Serial ausgegeben. Benachbarte Werte hätten im Mittel 60.000 ms Abstand haben müssen. Nur im Mittel deshalb, weil der Minutenwechsel der RTC über Polling über die Bibliotheksfunktionen der RTC erkannt wird und in der Schleife noch einige andere Dinge erledigt werden. Da kann es jedes mal zu unterschiedlichen Verzögerungen zwischen dem tatsächlichen Minutenwechsel in der RTC und dem Aufruf von millis() kommen. Das muss sich aber über mehrere Minuten auf 60.000 ms ausmitteln.
Hier fand ich wieder die bekannte Abweichung von ca. -0,6 %.
Ich nutze im Programm keine Interrupts. Es laufen nur die "unter der Motorhaube" vom Arduino.
Der Mega hat, soweit sichtbar, einen Schwingquartz.
Die RTC läuft deutlich genauer, so mit einigen Sekunden Abweichung pro Tag.
-0,6 % wäre eine Abweichung von 6.000 ppm, viel zu viel für einen Schwingquartz. Selbst für einen einfachen Resonator wäre das recht viel.
Hat jemand eine Idee, woher diese Abweichung noch kommen könnte?
Hat jemand ähnliche Erfahrungen?
Nachtrag:
Hatte gerade mit einem Funkempfänger nach einem Signal bei 16 MHz (Taktfrequenz) gesucht. Fündig wurde ich bei 15,895 MHz. Das wäre genau die fragliche Abweichung von -0,6 %. Diese Abweichung ist ja schon heftig. Was haben die da nur verbaut?