Hallo!
Vor einigen Jahren wunderte ich mich schon, kann mich aber gerade nicht erinnern ob ich damals eine Lösung fand:
Ich brauche auf einem ATmega1284 eine möglichst exakte Uhrzeit, sollte eine maximale Abweichung von 0,x Sekunden haben, gerne im ein- bis zweistelligen ms-Bereich. Sinn ist es das mehrere Geräte sequentiell in exakten Timeslots über RFM69-Funkmodems kommunizieren soll.
Aus diesem Grund nutzen die Slaves alle ein 32kHz-Quarz am TOSC und Timer2 wird asynchron als RTC benutzt.
Funktioniert mit Config Timer2 und Config Clock hinreichend gut - soll heißen: <1 Sekunde Abweichung nach gut 3 Tagen.
Die Gegenstelle aller Slaves, der Master soll nun als Referenzuhr minütlich einen Referenz-Zeitstempel aussenden, um alle Slaves möglichst exakt synchron zu halten.
Daher besitzt der Master exakt wie alle Slaves den gleichen 32kHz-Quarz und folgendes Progrämmchen:
Alles anzeigen
DCF77-Empfang klappt phasenweise und eher wackelig. Wie das halt so ist in der heutigen schaltnetzteilverseuchten Zeit.
Egal, denn alle 20-24h mal nachts sauberen Empfang würde mir ja schon reichen, wenn die RTC mit dem 32kHz-Quarz genau so gut laufen würde wie in den Slaves.
Genau das tut sie aber nicht!
Vielmehr habe ich den Eindruck als ob die Zeile:
"Config Timer2 = Timer , Async = On , Prescale = 128"
von der Config DCF77 überlagert wird, und als RTC-Takt in Timer2 offenbar die MainClock genutzt wird.
Und da der Haupttakt des ATmega1284 nur der interne RC-Oszillator mit 8MHz ist, eiert die "RTC" extrem umher.
Bereits 30 Minuten Empfangsausfall DCF77 und die Systemzeit hinkt 29 Sekunden nach.
Woher kommt dieser dämliche Fehler?
Ich lese die Bascom-Hilfe bezüglich DCF77 so, das man Timer2 mit der DCF regelmässig (in meinem Fall Permanent wenn DCF-Zeit valide) synchronisieren kann.
Aber das Timer2 dann das 32kHz RTC-Quarz und den asynchronen Betrieb verweigert, sobald Config DCF77 aufgerufen wird, finde ich nirgendwo im Handbuch.
Wie bekomme ich das in den Griff das trotz DCF77 der Timer2 asynchrom mit dem Uhrenquarz läuft?
Und wo ich gerade bei DCF77 bin:
Ich habe im LIB-Ordner von Bascom folgende Dateien zu DCF77:
dcf77.lbx Version 1.04 vom 27.04.2007
dcf77.lib Version 1.04 vom 27.04.2007
dcf77_2010.lib Version 4.11 vom 15.01.2010
Welche dieser Dateien/Versionen benutzt Bascom bei Config DCF77?
Zur neueren dcf77_2010.lib finde ich keine .lbx
Wie stelle ich sicher das Bascom die neuere nimmt?
Grüße
Jürgen
Vor einigen Jahren wunderte ich mich schon, kann mich aber gerade nicht erinnern ob ich damals eine Lösung fand:
Ich brauche auf einem ATmega1284 eine möglichst exakte Uhrzeit, sollte eine maximale Abweichung von 0,x Sekunden haben, gerne im ein- bis zweistelligen ms-Bereich. Sinn ist es das mehrere Geräte sequentiell in exakten Timeslots über RFM69-Funkmodems kommunizieren soll.
Aus diesem Grund nutzen die Slaves alle ein 32kHz-Quarz am TOSC und Timer2 wird asynchron als RTC benutzt.
Funktioniert mit Config Timer2 und Config Clock hinreichend gut - soll heißen: <1 Sekunde Abweichung nach gut 3 Tagen.
Die Gegenstelle aller Slaves, der Master soll nun als Referenzuhr minütlich einen Referenz-Zeitstempel aussenden, um alle Slaves möglichst exakt synchron zu halten.
Daher besitzt der Master exakt wie alle Slaves den gleichen 32kHz-Quarz und folgendes Progrämmchen:
BASCOM-Quellcode
- $Regfile="m1284def.dat"
- $Crystal=8000000
- $hwstack=400
- $swstack=160
- $framesize=320
- $Baud=38400
- Config Timer2 = Timer , Async = On , Prescale = 128
- Enable Timer2
- config DCF77 = PinA.4, timer = 1, Inverted = 1 , Timer1sec = 2 , CHECK = 2 , UPDATE = 0 , GOSUB = Sectic , Debug = 1
- config Date = DMY , Separator = DOT
- Date$ = "00.00.00"
- enable Interrupts
- print "Initialisierung Repeater Version 0.0"
- do
- waitms 200
- loop
- Sectic:
- '_sec = _sec + 1
- 'Print Date$ , Time$
- print Time$ ; " " ; Date$ ; " " ; Time(dcf_sec) ; " " ; Date(dcf_day) ; " " ; Bin(dcf_status) ; " " ;Bin(dcf_bits) ; " " ; bDCF_Pause ; " " ; bDCF_Impuls
- return
DCF77-Empfang klappt phasenweise und eher wackelig. Wie das halt so ist in der heutigen schaltnetzteilverseuchten Zeit.
Egal, denn alle 20-24h mal nachts sauberen Empfang würde mir ja schon reichen, wenn die RTC mit dem 32kHz-Quarz genau so gut laufen würde wie in den Slaves.
Genau das tut sie aber nicht!
Vielmehr habe ich den Eindruck als ob die Zeile:
"Config Timer2 = Timer , Async = On , Prescale = 128"
von der Config DCF77 überlagert wird, und als RTC-Takt in Timer2 offenbar die MainClock genutzt wird.
Und da der Haupttakt des ATmega1284 nur der interne RC-Oszillator mit 8MHz ist, eiert die "RTC" extrem umher.
Bereits 30 Minuten Empfangsausfall DCF77 und die Systemzeit hinkt 29 Sekunden nach.
Woher kommt dieser dämliche Fehler?
Ich lese die Bascom-Hilfe bezüglich DCF77 so, das man Timer2 mit der DCF regelmässig (in meinem Fall Permanent wenn DCF-Zeit valide) synchronisieren kann.
Aber das Timer2 dann das 32kHz RTC-Quarz und den asynchronen Betrieb verweigert, sobald Config DCF77 aufgerufen wird, finde ich nirgendwo im Handbuch.
Wie bekomme ich das in den Griff das trotz DCF77 der Timer2 asynchrom mit dem Uhrenquarz läuft?
Und wo ich gerade bei DCF77 bin:
Ich habe im LIB-Ordner von Bascom folgende Dateien zu DCF77:
dcf77.lbx Version 1.04 vom 27.04.2007
dcf77.lib Version 1.04 vom 27.04.2007
dcf77_2010.lib Version 4.11 vom 15.01.2010
Welche dieser Dateien/Versionen benutzt Bascom bei Config DCF77?
Zur neueren dcf77_2010.lib finde ich keine .lbx
Wie stelle ich sicher das Bascom die neuere nimmt?
Grüße
Jürgen