Forum: Mikrocontroller und Digitale Elektronik clock / sectic / basom


von Thomas B.D. (Gast)


Lesenswert?

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!

von Thomas B.D. (Gast)


Lesenswert?

>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...

von Peter R. (peterfido)


Lesenswert?

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).

von mue-c (Gast)


Lesenswert?

Du merkst doch, wenn die Daten übermittelt werden.
Da würde ich den Timer auf 0 setzen.

von Thomas B.D. (Gast)


Lesenswert?

Timer2=0 funktioniert nicht.

Das habe ich schon probiert. Gibt es eine andere Möglichkeit, den Timer 
der Clock zu manipulieren?

von MWS (Gast)


Lesenswert?

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