Forum: Mikrocontroller und Digitale Elektronik Synchronisierung mehrere AVR Controller


von Tek (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von Flo (Gast)


Lesenswert?

Über eine Broadcastadresse ein Synchronisationssignal senden?

von Thomas S. (klegom)


Lesenswert?

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.

von Tek (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.