Erzeugung eines synchronen Sekunden-Pulses (PPS)

  • Guten Tag,

    ich betreibe einen Raspberry Pi 3+, dessen Systemzeit über einen externen Zeitserver (möglichst) präzise geführt ist.

    Ich möchte nun den Raspi als Quelle für einen möglichst präzisen 1-Sekunden-Puls nutzen, welcher mit der Systemzeit synchron läuft. Das bedeutet, dass an einem beliebigen GPIO-Pin zum Beginn jeder Sekunde ein kurzer Puls erzeugt werden soll.

    Ich weiß natürlich, dass ich mit Python o.ä. beim Wechsel jeder Sekunde in einer Endlossschleife einen Puls ausgeben kann, allerdings ist das viel zu ungenau, da es von der Laufzeit abhängt und davon, wann das Betriebssystem dem Programm Ressourcen zuteilt. Ich benötige eine möglichst hardwarenahe, möglichst präzise Ausgabe dieses Sekundenpulses, synchronisiert mit der Systemzeit.

    Hat jemand Ideen? :conf:

    Vielen Dank für Euer Feedback.

    PS: ich finde im Netz viele Infos, die den Raspi als Empfänger solcher Impulse definieren, um seine eigene Zeit einzustellen. Hier geht es aber darum, ihn umgekehrt als Quelle zu nutzen.

  • Ungefähr so, nur bedeutend weniger komplex. Ich benötige wirklich nur den kurzen Puls zum Beginn jeder Sekunde, mehr nicht. Ich kann mir einfach nicht vorstellen, dass das nicht (verhältnismäßig) einfach gelöst werden könnte.

    Ich habe bereits den Hinweis gefunden, dass man per Eintrag von

    dtoverlay=pps-gpio

    in die Datei '/boot/config.txt' einen solchen Puls an GPIO Pin 18 erzeugen kann, aber das hat bei mir nicht funktioniert.

  • Moin Arrowdynamics ,

    erstmal: Herzlich Willkommen im Forum!

    Das von dir probierte Overlay  pps-gpio ist eine Funktion, die den GPIO-Pin als Eingang für ein PPS-Signal schaltet.

    Dort würde man dann einen GPS-Signal anschliessen.

    Aber du willst ja, das der RPi so ein Signal ausgibt.

    So wie ich das gelesen habe, kann man es durch Änderungen im Kernel realisieren.

    Ich denke das du dir eine andere Lösung suchen must.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Eine Echtzeituhr haben Raspberries ja auch nicht, nur per Zusatzmodul, welches man auch für den Arduino verwenden kann.

    Und es geht bestimmt auch Arduino Stand alone, man könnte sich per WLAN regelmäßig zur Synchronisation die Zeit aus dem Internet holen und die Microsekunden dazwischen zählen.

    "Probleme kann man meist nicht mit derselben Denkweise lösen, durch die sie entstanden sind."

    Wetterstation Nievenheim

  • Ich denke, die kostengünstigste Wahl wäre ein Arduino Nano oder besser ein ESP32 mit einem Assembler oder C Programm das so kalibriert ist, dass es durch Zählen der Microsekunden einen sehr genauen Takt abgeben kann.

    Was ist für Deine Lösung wichtiger, eine konstante Anzahl der Pulse in einem definierten längeren Zeitraum, oder ein möglichst gleicher Abstand von Puls zu Puls ?

    "Probleme kann man meist nicht mit derselben Denkweise lösen, durch die sie entstanden sind."

    Wetterstation Nievenheim

  • Vielen Dank für Eure Antworten. Ich habe mittlerweile ein kleines Python-Script geschrieben, welches einfach in einer Endlosschleife den Sekundenbeginn der Systemzeit überwacht und einen Puls ausgibt, wenn dieser erfolgt. Die Genauigkeit ist im Rahmen der Genauigkeit der Systemuhr per NTP ausreichend, ich habe mit einem Referenz-Sekundenpuls direkt aus einem Meinberg-Zeitserver verglichen (Oszilloskop) und war mit dem Ergebnis zufrieden.

    Noch höhere Genauigkeiten wären dann wohl nur per PTP (Precision Time Protocol) erreichbar.

    insight-er: weder noch. Für dieses Projekt ist die absolute Lage der Impulse in Bezug auf die Atomzeit wichtig. Anders: Der "echte" Sekundenbeginn der Atomzeit soll möglichst genau mit dem Sekundenbeginn des Raspberrys zusammenfallen.

    HINTERGRUND: ich will in einem Projekt die unterschiedliche Behandlung von Schaltsekunden durch Google NTP und normale NTP Server veranschaulichen. Hierzu wird ein Raspy A über einen normalen Zeitserver via GPS geführt und ein zweiter Raspy B über den Google Zeitserver, der eine Smear Leap Second ausführt. Wenn nun eine Schaltsekunde eintritt, werden die Sekundenpulse langsam auseinanderdriften, über einen Zeitraum von 24 Stunden. Die Differenz zwischen diesen Pulsen sollte Null sein, wird aber während der 24 Stunden um die Schaltsekunde deutlich sein. Das liegt daran, dass Google die Schaltsekunde nicht als Sprung durchführt, sondern "verschmiert". Um das sichtbar (und messbar) zu machen, baue ich dieses Projekt.

    Hinweis: Natürlich könnte ich das auch einfacher machen und einfach per Software den Unterschied zwischen zwei NTP-Zeitservern ermitteln. Aber dazu bin ich erst recht zu blöd weil ich mich mich Software nicht so gut auskenne :) Also wer einen Befehl dafür kennt, das würde ich auch gerne lernen :)

  • Bisher ging ich davon aus, dass Arduinos keine eigene Systemuhr haben, die man per NTP führen kann

    das stimmt, aber es gibt DCF77 Routinen die bei gutem DCF77 Empfang on the fly dekodieren können ohne das ein OS dazwischenfunkt und somit mit der Übernahme Lücke Sekunde 59 einen Puls ausgeben können und ab da zählen können, aber erst nach der Auswertung vom Sekundenpuls 100ms oder 200ms und ohne Störungen wie Paritätserror weiss man erst ob die gezählten Sekunden die ja pulsen sollen ja erst danach weiss man das die Sekunden richtig waren!, vorher pro Sekunden Puls weiss man es eigentlich nicht

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Manche GPS-Module haben einen Pulsausgang der jede Sekunde getriggert wird.

    wenn das so zuverlässig ist wie DCF77 na dann Mahlzeit

    soweit ich weiss ist die GPS Genauigkeit abhängig von der Anzahl der eingeloggten Satelliten, dann von der Korrektur und dann kann das ja jederzeit falsch gedeutet werden, IMHO war da mal was das das ferngesteuert werden kann damit im Kriegsfall der Feind die Position nicht kennt.

    Dann gibt es noch ein Netz US amerikanischer Satelliten und irgendwo hiess es mal es gibt ein eigenen europäisches Satelliten Netz, wo loggt sich also wer ein?

    Position glaub ich ja aber sekundengenaue Zeit?

    Mein DCF77 Empfang ist jedenfalls Mist, wenn ich jedem DCF77 Trigger hier glauben würde hätte eine Minute 180 Sekunden :lol:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!