Forum: HF, Funk und Felder Zeitsynchronisation per nrf24l01


von Paul H. (powl)


Lesenswert?

Hallo,

ich habe zwei Mikrocontroller, die beide einen Zähler haben, welcher die 
Millisekunden seit Einschaltung hochzählen. Ich würde diese Zähler nun 
gerne per Funk (nrf24l01) synchronisieren. Und das möglichst genau.

Ich würde dazu einfach einmalig ein paar Synchronisations-Pakete 
zwischen Sender und Empfänger austauschen und die Laufzeit messen.

Die Zeit die der nrf24l01 braucht um das Daten-Paket vom Sender aus zum 
Emfpänger zu schicken sowie die Zeit um das Ack-Paket vom Empfänger zum 
Sender zu schicken sollte ja deterministisch sein. Wenn Funkstörungen 
auftreten sollte das Paket gar nicht erst ankommen und muss nochmals 
gesendet werden.

Ist das richtig? Kann ich mich darauf einigermaßen verlassen? Wie 
deterministisch ist die ganze Sende-Empfangszeit nun wirklich? Weiß das 
jemand bzw. hat da jemand schon mal versuche gemacht?

Gibt es vielleicht sogar ein bereits ausgeklügeltes, standardisiertes 
Verfahren um eine Zeitsynchronisation über eine gelegentlich gestörte 
Funkstrecke durchzuführen?

lg

von oszi40 (Gast)


Lesenswert?

Paul H. schrieb:
> ein bereits ausgeklügeltes

Verstümmelte Pakete sollte Deine SW rechtzeitig prüfen/erkennen sonst 
gibt es höchst wunderliche Effekte. Lies mal wie die das machen.
https://de.wikipedia.org/wiki/Network_Time_Protocol

von Timmo H. (masterfx)


Lesenswert?

Paul H. schrieb:
> Die Zeit die der nrf24l01 braucht um das Daten-Paket vom Sender aus zum
> Emfpänger zu schicken sowie die Zeit um das Ack-Paket vom Empfänger zum
> Sender zu schicken sollte ja deterministisch sein
Ich glaube von Senden bis zum RX interrupt beim Empfänger waren es bei 
mir so ~400µs

Paul H. schrieb:
> Wenn Funkstörungen
> auftreten sollte das Paket gar nicht erst ankommen und muss nochmals
> gesendet werden.
Richtig, das nRF sortiert Pakete mit fehlerhafter CRC gleich aus.

von Forist (Gast)


Lesenswert?

Paul H. schrieb:
> Und das möglichst genau.

"Möglichst genau" willst du nicht wirklich bezahlen.
Also schreib da eine Zeitangabe ran. Zwischen ms und fs gibt es ein 
weites Feld - je genauer, umso teurer.

von Anti-Troll (Gast)


Lesenswert?

Er sagte, er möchte nrf24l01-Module verwenden. "Möglichst genau" bezieht 
sich offenkundig darauf, was mit vertretbarem Aufwand (=geschickter 
Algorithmus) und genau diesen Modulen machbar ist. Nix mit teuer. Nix 
mit pico- femto- oder atto-Sekunden. Wäre ich dein Chef wärst du mir mit 
einer derartigen Frage gehörig auf den Senkel gegangen.

von Forist (Gast)


Lesenswert?

Anti-Troll schrieb:
> Wäre ich dein Chef wärst du mir mit einer derartigen Frage gehörig
> auf den Senkel gegangen.

Mir gehen Leute auf den Senkel, die ohne Maßstab alles möglichst genau 
mit möglichst wenig Aufwand und mal eben schnell haben wollen.

von Anti-Troll (Gast)


Lesenswert?

Dir geht es also um so etwas wie mangelnden Respekt vor der Komplexität 
oder Großartigkeit der Technik? Dir geht es um Diletanten, die nicht in 
der Lage sind, ihre Vorhaben genau zu spezifizieren und die erwarten, 
dass man mal eben schnell alles easy erreichen könnte? Schön, dass du 
uns an deinen persönlichen Problemen teilhaben lässt. Ich kann dich 
sogar verstehen! Jedoch hat das nix mit der Fragestellung des TO zu tun. 
Der hat nämlich seine Anforderungen und seinen Maßstab klar formuliert.

Anforderung: Möglichst genaue Zeitsync. Maßstab: Was mit dem nrf24l01 
möglich ist. Was noch fehlt ist die Angabe der tatsächlichen Genauigkeit 
oder der maximal zur Verfügung stehenden Zeit, wie lange diese 
Zeitsynchronisation dauern darf. Hier hat man ein wenig Spielraum um ihm 
gängige Lösungen zu liefern. Offenbar will er sich erst mal einen 
Überblick über die Möglichkeiten verschaffen und die dürften ja nicht 
allzu vielfältig sein. Müsste man abschätzen würde man die gewünschte 
Genauigkeit der Zeitsynchronisation erst mal im Bereich von 1µ-1ms 
festlegen. Viel mehr als 1ms macht wenig Sinn denn ab da wird die 
Synchronisation ziemlich anpruchslos. Mit zunehmender 
Genauigkeitsanforderung dürfte der Aufwand steigen. Sobald sich eine 
klare Vorstellung entwickelt hat, mit welchem Aufwand man auf welche 
Genauigkeit kommt kann man dann weiter spezifizieren. Alles gut ;)

von Max D. (max_d)


Lesenswert?

Machs wie ntp und ping einmal hin&her und zieh dir da deine abgeschätzte 
Laufzeit raus...

von Ralphi M. (ralphi_m)


Lesenswert?

Hi paul,
welche Controller haste denn?
Wenn's ATTiny's sind, würd ich gern den Code für das Handshake mit dem 
nrf24l01 haben :-)

Test zur Zeit bei mir, erst mal eine Verbindung (Pi2-UNO) aufzubauen.
Beitrag "nRF24L01+ - Pi2 & Arduino UNO klappt nicht :-("
Bein den Demos wird die Transferzeit gemessen (allerdings msec).

Kommt etwas auf Deinen Bootloader an, ob du den Befehl
micros() - https://www.arduino.cc/en/Reference/Micros
verwenden kannst.
Grüße aus LA
ralphi

von Sven B. (scummos)


Lesenswert?

Wenn du das machen willst musst du aber das Auto Retransmit vom nRF24L 
ausschalten, sonst ist da gar nichts mehr deterministisch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.