clock / sectic / basom

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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.