Hallo, kurze Erklärung: Ich nutze einen Atmega32 mit externen 32,768kHz Uhrenquarz. Zum Programmieren nutze ich Bascom. Ich verwende in meinem Programm eine Uhrzeit. "Config Clock = Soft , Gosub = Sectic" habe ich integriert, um jede Sekunde in "Sectic" zu springen. Bis dahin funktioniert alles wunderbar. Nun möchte ich aber, dass zwei Mikrocontroller auf unterschiedlichen Leiterplatten synchron laufen. Über die serielle Schnittstelle übermittle ich via PC die aktuelle Uhrzeit für "time$". Dies geschieht genau in dem Moment, in dem die Sekunde (am PC) "umspringt". Das Problem liegt nun darin, dass "Sectic" bei beiden Platinen zu unterschiedlichen Zeiten angesprungen wird, wenn ich bei beiden nicht genau zur gleichen zeit die Spannungsversorgung herstelle. (Zeitdifferenz zwischen den beiden Platinen) Kurz: Mein Problem ist: Wie setze ich (wenn ich die Uhrzeit für "time$" übermittle) auch gleich den Timer zurück, den die Clock nutzt, damit zwischen den beiden Mikrcontrollern keine Differenz mehr vorhanden ist. Sprich: Da ich "zu Beginn einer Sekunde (am PC)" synchronisiere, müsste hier der Timer zurückgesetzt werden, damit von diesem Zeitpunkt an genau nach einer Sekunde Sectic erneut angesprungen wird. Diese Rücksetzung erfolgt nicht, wenn ich nur synchronisiere. Und daher haben beide Platinen eine Differenz (es sei denn ich stelle zur gleichen Zeit die Spannungsversorgung her, aber das ist nicht praktikabel) Ich hoffe das war einigermaßen verständlich. ;-) Danke!
>Nun möchte ich aber, dass zwei Mikrocontroller auf unterschiedlichen >Leiterplatten synchron laufen. Damit meine ich, dass die Uhrzeiten der beiden uC (auf die Sekunde) synchron laufen. Ich will hier keine hundertstel genauigkeit oder ähnliches erreichen...
So genau sind die Uhren nicht. Du kannst den Timer "zu Fuß" zurückstellen. (timer2=0). Wenn sie länger nicht gestellt werden, würde ich einen von beiden als Taktgeber einsetzen. Dann laufen sie stets syncron ( mit gleicher Abweichung).
Du merkst doch, wenn die Daten übermittelt werden. Da würde ich den Timer auf 0 setzen.
Timer2=0 funktioniert nicht. Das habe ich schon probiert. Gibt es eine andere Möglichkeit, den Timer der Clock zu manipulieren?
Thomas B.D. schrieb: > Timer2=0 funktioniert nicht. Dann wirst Du es nicht richtig gemacht haben, wo wird denn der Timer2 auf 0 gesetzt ? Ohne Code ist's ein Gerate. Wenn man ganz genau vorgehen würde: - Timer2 Interrupt sperren - Timer2 anhalten - Uhrzeit synchronisieren - Timer2 Prescaler Reset - Timer2 auf 0 - Timer2 Interrupt Flag löschen - Timer2 Interrupt erlauben - Timer2 starten
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.