Hallo zusammen, ich habe ein Master-Slave System mit einem Atmega128 als Master und mehreren ATTiny2313 als Slaves die über RS485 miteinander kommunizieren. Die Slaves sollen bei bestimmten Ereignissen einen Zeitstempel abspeichern der dann über RS485 zum Master übertragen wird. Dazu habe ich in jedem Controller einen Timer laufen um millisekundengenau zu Messen. Damit ich diese Zeitstempel aber ins Verhältniss setzen kann, müssen ja alle Controller mit der gleichen "Zeitbasis" arbeiten. Ich habe überlegt nach dem einschalten die Zählerstände der Slaves vom Master aus abzufragen um eine Art "Offset zu Master" für jeden Slave zu erhalten der dann in weitere Berechnungen einfliesst. Das ist aber denk ich recht umständlich und ungenau da die Kommunikationszeit auf dem Bus ja mit eingerechnet werden müsste. Zweiter Ansatz wäre eine zusätzliche Synchronisations Leitung zwischen allen Teilnehmern die die Controller sozusagen auf den gleichen Nenner bringt. Die Module sind je ca 10m voneinander entfernt und auf der RJ45 Leitung hätte ich auch noch Adern frei. Vielleicht weis aber von Euch noch jemand einen besseren Lösungsansatz auf den ich noch nicht gekommen bin. Gruß Hansjörg
Schick einfach per Broadcast an alle Slave, "Hallo, Uhrenvergleich, jetzt ist es 12:00". Beim Empfang dieses Datenpakets können alle Slave ihre interne Uhr neu stellen. Die Ungenauigkeit der Methode ist abhängig von der Baudrate sowie der Frage, wie zeitlich konstant deine Software die Datenpakete auswerten kann. MFG Falk
Über eine Broadcastadresse ein Synchronisationssignal senden?
Falk Brunner schrieb: > Zweiter Ansatz wäre eine zusätzliche Synchronisations Leitung zwischen > allen Teilnehmern die die Controller sozusagen auf den gleichen Nenner > bringt. Die Module sind je ca 10m voneinander entfernt und auf der RJ45 > Leitung hätte ich auch noch Adern frei. Das geht. Die zusätzliche Leitung löst an allen Controllern einen Interrupt aus. die Controller merken sich ihre interne Uhrzeit, zu diesem Zeitpunkt. Danach schickt der Master die Uhrzeit, zu der er den Interrupt ausgelöst hat. Jetzt können alle den Versatz der Uhren ausrechnen und die Zeitstempel entsprechend anpassen.
Stimmt, sorum gehts ja auch. Der Fehler sollte dann ja bei allen Slaves gleich sein. Und einmal ermittelt, kann ich ihn dann ja auch gleich im Slave beim Synchronisieren rausrechnen. Danke Euch beiden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.