RTC auf Millisekunden abgleichen

Was spricht dagegen, die RTC einmal mit einem speziellen Sketch zu setzen, der die Zeit per Serial-Input bekommt? Auf die Serielle Verbindung kannst Du dann z.B. mit Processing vom PC aus schreiben. Wenn die RTC einmal gesetzt ist, spielst Du dann deinen eigentlichen Sketch auf den Arduino, der dann die Zeit nur auslies, ohne sie zu setzen. Durch die Batterie auf der RTC sollte diese die gestellte Zeit behalten.
Du kannst das Zeit stellen ja auch in den eigentlichen Sletch einbauen. Wenn noch ein Pin-Frei ist, kann man den z.B. abfragen. Wenn der auf HIGH oder LOW (LOW ist einfacher, weil interner PullUP) gesetzt ist, wird auf dem seriellen Port auf eine Zeit gewartet und diese dann in die RTC geschrieben.

Buntmann:
Ein Versuch habe ich noch :slight_smile:

Kann man den DS1307 vielleicht direkt über die USB-Schnittstelle ansteuern ohne den Umweg des kompillerens?

Ja, kann man machen aber das löst nicht Dein Problem das Du im Titel geschrieben hast. Es bleibt immernoch eine Ungenauigkeit bis zu einer Sekunde zwischen Arduino und PC.
Grüße Uwe

Es bleibt immernoch eine Ungenauigkeit bis zu einer Sekunde zwischen Arduino und PC.

Wenn man die RTC stoppt und neu startet, kriegt dann nicht der interne 32786 - Zähler auch ein Reset ?
So kriegt man den Sekundenwechsel doch millisekundengenau hin, oder ?

Und die DS1307 hat auch einen Sekundentakt-Ausgang, damit kriegt man den sekundenwechsel auf die ms genau mit

Dann dürfte aber kein so großer Zeitversatz bei der Anzeige im ser. Monitor sein. Ich vergaß, das ganze sollte noch bedienerfreundlich sein und in drei oder sechs Monaten, wenn ich das Projekt übergeben habe auch noch funktionieren und laut Forum könnte ich pro Monat einen Zeitdifferenz von bis zur einer Sekunde haben, weil die Uhren halt nicht genau gleich gehen...

Ein DS1307 ist nicht soooo genau, die tägliche Abweichung dürfte im Sekunden-Bereich sein. Nach sechs Monaten kannst Du also Abweichungen im Minuten-Bereich erwarten. Deutlich genauer sind die DS323X-Chips vom selben Hersteller, da dort die Quartze temperaturkompensiert sind. Wenn Du aber eine zeitliche Übereinstimmung im Sub-Sekundenbereich auch nach Monaten haben willst, wirst Du um eine regelmässige Synchronisation nicht herumkommen. In diesem Bereich operieren übrigens auch die PC-RTC nicht, auch dort hast Du bis zu einigen Sekunden Abweichung pro Tag, wenn Du nicht eine Sychronisierung à la NTP benutzt.

Wenn es das Projekt erfordert und die Voraussetzungen gegeben sind (Netzwerk bis zum Arduino), dann verwende doch einen Arduino-Ethernet und synce dir Zeit per NTP. Das sollte zumindest auf die Sekunde genau werden. Täglich einmal (oder notfalls mehrmals) die Zeit per NTP holen und die Uhr wieder abgleichen.

Hatte mir auf Verdacht schon mal ein Arduino Ethernet Shield bestellt, mich da aber noch nicht richtig rangetraut, weil im Netz dazu noch nicht so viel gefunden hatte, muss wohl doch mal anfangen zu suchen, denn als absoluter Laie kann ich mir leider keine Programm selber schreiben, danke für die Tipps...

Bei der Ethernet-Lib der IDE ist doch ein UDP / NTP Client Beispiel dabei soweit ich weiss. Das kannst Du auf jeden Fall als Ausgangspunkt nehmen.

Schau mal bei "Datei -> Beispiele -> Ethernet" da muss es irgendwas mit NTP oder UDP geben. Ansonsten liefert "arduino NTP" bei google schon folgendes:

Meine Messdaten möchte ich später mit eine Bildverarbeitungssoftware abgleichen und zwar möglichst genau.
Jetzt habe ich festgestellt, dass der DS1307 beim Abgleich mit dem PC keine Millisekunden abgleicht.

Das sind zwei verschiedene Aufgaben:

  • eine Uhr auf eine Sekunde genau stellen ( synchron mit dem Rest der Welt) --> ntp
  • zwei Zeiten mit etwa gleicher Millisekunde (um ein Frame in einem Video wiederzufinden ?) zu synchronisieren. --> da ist engineering gefragt :~

alles klar, auf der Seite bin ich gerade dabei mich einzulesen, was es bei der IP-Adressierung zu beachten gibt, werde mich mal reinfuchsen.. auf jeden Fall hätte ich dann eine Referenzzeit auf die sich alle beziehen können... Spannung weg, soweit ich das im Moment beurteilen kann, heißt dann aber auch Zeit weg, bedeutet das muss als eine Art Routine vorweglaufen... bin auf den Abgleich mit dem seriellen Monitor gespannt...

Du stellst Dir das einfacher vor als es ist:

  1. Die serielle Schnittstelle hat eine begrenzte Übertragungsgeschwindigkeit
  2. Auf der PC Seite ist die Latenz der seriellen Schnittstelle grundsätzlich unbekannt
  3. Die Besten bezahlbaren RTCs die ich kenne sind DS323*. Die sind 2ppm genau. D.h. wenn Du garantiert auf 1 Millisekunde genau sein willst, dann mußt Du spätestens alle 500s nachstellen, besser wäre alle 250s.
  4. Damit beim Nachstellen nichts dazwischen kommt dürfen in der Zeit keine Interrupts (insbesondere die der seriellen Schnittstellen und Timer0) laufen
  5. Mit DCF77 auf 1/100s zu syncen ist leicht, auf 1/1000 schon schwieriger, aber möglich
  6. Mit GPS auf 1/1000s zu syncen ist für Timekeeping GPS leicht, für Navigations GPS ist unklar ob leicht oder schwer
  7. GPS geht nicht in Gebäuden

Meiner Meinung nach wäre die einfachste Lösung alles per Kabel synchron zu halten. Um Videoframes zu syncen wäre es vieleicht am einfachsten irgendwo EINEN ausreichend schnellen Zähler zu haben der per Definition richtig läuft und den einfach immer mal wieder mit der Kamera aufzunehmen.

Hallo Udo,

ich muss ehrlich sagen ich habe noch gar keine Vorstellung, ich muss mich da langsam rantasten, ich will ja eigentlich die Drück- und Rückholbewegung eines Inlineskaters erfassen, daher ist eine drahtgebundene Lösung unvorteilhaft wegen der verletzungsgefahr und der eingeschränkten Bewegung...

Viele Grüße

daher ist eine drahtgebundene Lösung unvorteilhaft

Wieso kommt dann aber eine Ethernet-Verbindung in Betracht (NTP)? Wenn es nur auf ein Video-Frame ankommt, sollte doch eine Auflösung von ca. 1/25s genügen (dazwischen ist ein Faktor 40!).

Also ich als Dummi habe gedacht, dass ich über Ethernet die Zeit synchronisieren kann und die dann auf dem Ethernet Shield weiterläuft (ich hatte in der Beschreibung da was von Clock gelesen), wahrscheinlich auch wieder falsch gedacht :~

Verstehe ich das richtig? Du willst einen Inline-Skater mit dem Drucksensor vor einer Videokamera durchfahren lassen und dann die Druckverhältnisse je einem Videoframe zuordnen?

In diesem Falle käme eine optische Synchronisation in Betracht. Einfach per IR-LED ein Synchronisationssignal aussenden und beim Fahrer empfangen. Damit sollte Du diese Genauigkeit locker erreichen. Dann würde ich noch einen Arduino mit Quartz nehmen (also keinen UNO), dann kannst Du Dir den RTC auch sparen. Sollte deutlich günstiger kommen.

Der Inlineskate hat im Schuh Drucksensoren, die mir über DMS-Verstärker eine Spannung 0-5V liefern für meinen Arduino. Diese Daten sollen auf SD Karte gespeichert werden und hinterhe Videobildernzugeordnet werden können... So ist der Plan...

Wie pylon sagt braucht es keien absolute Zeit sondern nur eine Zuodnung des Meßwerts auf ein bestimmtes Frame des Videos. Da kommt ein optisches Signal das mit dem Bild aufgenommen wird in Betracht. Einfach mehrere LED und in Binärcode blinken lassen. Das kannst Du auch am Anfang der Videosequenz machen und so eine Zuordnung haben.

Grüße Uwe

Dito, nur würde ich statt Binärcode Graycode nehmen. Z.B. so:

Shutter Speed | Blinkenlight.

Nachtrag: natürlich würde ich das dann nicht in "loop" hochzählen sondern per MsTimer2 jede Millisekunde den jeweils passenden Pin in einem Interrupt schalten. Dann bleibt die Hauptschleife frei um die Meßwerte zu erfassen und zu speichern. Wenn man dafür mit 16000 Takten auskommt könnte man die Meßwerte natürlich auch gleich im Interrupt erfassen und speichern. Dann sind die LEDs und die MEßwerte garantiert auf die Millisekunde synchron.