clock / sectic / basom

Gast #2530827
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!
Gast #2530831
>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...
#2531048
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).
Gast #2531662
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.