PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : config DCF77 ausprobieren.....



Micralestes
07.05.2007, 06:14
Hallo

ich wollte mal die config DCF77 Routine ausprobieren, bin aber schon auf meine erste Hürde gestoßen. Ich habe folgende Zeile in mein Programm für den Mega128 eingebaut:
Config Dcf77 = Pina.3 , Timer = 0 , Inverted = 0 , Check = 1 , Update = 2 , Updatetime = 1 , Gosub = Sectic

und erhalte folgende Fehlermeldung in der Zeile:

Unknown Interrupt [Compare0]

wobei der Timer0 asynchron, also mit Uhrenquarz läuft. Aber es ist egal welchen Timer ich nehme, der Fehler bleibt der selbe.

Hat jemand eine Idee???

Gruß Mirko

Micralestes
07.05.2007, 06:23
Ok, ich nehme alles zurück.... Wenn ich Timer = 1 eingebe, dann kommt keine Fehlermeldung. Aber entweder habe ich das nicht richtig verstanden oder wie??? Ich brauche doch den Timer0. Wegen Uhrenquarz usw. oder nicht ???

oe9vfj
07.05.2007, 07:51
Vorerst wird nur Timer=1 unterstützt.
Laut MCSELEC ist für die anderen Timer ist noch eine Überarbeitung der DAT - Files notwendig.

for_ro
07.05.2007, 10:28
Ok, ich nehme alles zurück.... Wenn ich Timer = 1 eingebe, dann kommt keine Fehlermeldung. Aber entweder habe ich das nicht richtig verstanden oder wie??? Ich brauche doch den Timer0. Wegen Uhrenquarz usw. oder nicht ???

Darum brauchst du dich nicht zu kümmern, das macht Config DCF77 für dich. Auch die Softclock mit allen Variablen wird erzeugt, also keine mehr konfigurieren. Über die Angabe Gosub Sectic im Config wird dann auch im Sekundentakt das Sectic Label angesprungen, genau wie früher bei der Softclock.
Ich würde übrigens nicht einmal täglich um 1.00 Uhr morgens die Zeit synchronisieren, sondern um 3.00 Uhr. Dann bekommst du den Wechsel zwischen Sommer- und Winterzeit immer sofort mit, der ja zu dieser Zeit durchgeführt wird.

Gruß

Rolf

Micralestes
07.05.2007, 11:24
Danke für die Antworten!

Ich habe mir die Hilfe dazu noch mal angesehen und musste feststellen, wenn ich richtig gelesen hätte, hätte ich Euch die Arbeit sparen können.

Erstmal vielen Dank.....

Gruß Mirko

Danke für den Tipp mit 3 Uhr, das ist wirklich gut......

Dirk
08.05.2007, 16:38
Beim Ausprobieren von CONFIG DCF77 haben sich bei mir noch drei Fragen ergeben:

1. Lt. Anleitung wird bei UPDATE=1 die Softclock stündlich nach DCF gestellt. Der Parameter UPDATETIME muss dann 0..23 sein. Warum?
Wenn stündlich gestellt werden soll, macht UPDATETIME doch nur Sinn, wenn man die Minute angeben kann, in der jede Stunde gestellt werden soll. Also müßte UPDATETIME 0..59 sein.
Genauso liegt es bei UPDATE=2. Da wird einmal pro Tag nach DCF gestellt. UPDATETIME kann lt. Anleitung 0..59 sein. Das macht aber wenig Sinn, weil ich wahrscheinlich die Stunde angeben möchte, zu der täglich gestellt werden soll, also 0..23.

Oder habe ich da was falsch verstanden?


2. Zum Parameter TIMER1SEC:
Wenn er 1 ist, wird die Softclock durch den internen 1-Sekunden-Interrupt betrieben. Dann darf ich CONFIG CLOCK = SOFT/USER nicht einfügen, oder?
Ist er 0, muss ich dann CONFIG CLOCK = SOFT zusätzlich einfügen (Hardware: Uhrenquarz an TOSC)?


3. Zu den Variablen:
Welche Variablen werden durch CONFIG DCF77 zusätzlich zu den Softclock-Variablen noch angelegt? Eine Liste wäre schön.

Gruß Dirk

oe9vfj
08.05.2007, 19:08
Hallo Dirk,

UPDATE/UPDATETIME
Du hast recht, hier ist in der Hilfe etwas falsch vermerkt.
UPDATE = 1 ist stündliches Update und damit der Parameter UPDATETIME zwischen 0 und 59 zu setzen. Damit wird die Minute angegeben, bei welcher die DCF77 Auswertung gestartet wird.
UPDATE = 2 ist tägliches Update und damit der Parameter UPDATETIME zwischen 0 und 23 zu setzen. Hier ist es die Stunde bei welcher die Auswertung gestartet wird.

TIMER1SEC
Es wird immer nur ein Timer verwendet. Derzeit wird nur Timer = 1 unterstützt, es sollen aber in zukünftigen Releases alle Timer incl. RTC-Quarz (32.768Hz) unterstützt werden. Der Timer wird im CTC-Mode betrieben. Der Timer zählt bis zum Compare-Wert hoch, löst einen Interrupt aus, stellt sich auf 0 und beginnt wiederum mit dem Hochzählen. Wird der Parameter TIMER1SEC = 1 gesetzt, wird während der synchronisationsfreien Zeit der Compare-Wert so verändert, dass nur mehr 1 Interrupt pro Sekunde ausgelöst wird. Wird der DCF-Teil zur nächsten Zeit-Synchronisation wieder gestartet, wird dieser Compare-Wert wieder zurückgestellt.
Wird CONFIG DCF77 = .... verwendet, werden alle CLOCK - relevanten Variablen und Konstanten gesetzt. Eine zusätzlichens Kommando CONFIG CLOCK = SOFT|USER ist daher nicht notwendig.

Variablen:
Die erzeugten Variablen sind im Compiler-Report ersichtlich.


DCF_TIMERCOUNT - Hier wird die Impuls- und Pausenlänge gezählt bis zur nächsten Pegeländerung.

DCF_SEC - Zähler für DCF77 Impulse beginnend beim Minuten-Impuls

Die empfangenen DCF77 Zeitwerte werden in die entsprechenden Variablen geschrieben.
DCF_MIN
DCF_HOUR
DCF_DAY
DCF_MONTH
DCF_YEAR
DCF_WEEKDAY
DCF_FLAGS - Bit 13 bis 20 (Winterzeit, Sommerzeit, Ankündigungbits)

DCF_PARITY - Variable zur Parity-Auswertung
DCF_BITS - Hier werden die empfangenen Bit-Werte links eingeschoben. Ein Zwischenspeicher der Bits bis zur Abspeicherung in den DCF-Variablen DCF_Min ... DCF_FLAGS
DCF_STATUS - Siehe Hilfe-Beschreibung
_WEEKDAY - Wochentag aus DCF-Empfang wird bei Zeitsynchronisation hier hineinkopiert.
CLOCK_SECPART - Bei jedem Timer-Interrupt wird auch der CLOCK-Teil angesprungen. Hier werden die Interrupts mitgezählt, um feststellen zu können, wann eine Sekunde um ist.

Und hier die bekannten CLOCK-Variablen
_SEC
_MIN
_HOUR
_DAY
_MONTH
_YEAR
DATE$
TIME$

Bei DEBUG=1 werden die Variablen
BDCF_IMPULS
BDCF_PAUSE
erstellt. Hier wird die Interruptanzahl für Impuls und Pause eingeschrieben.

Dirk
09.05.2007, 19:54
Hallo Josef,

vielen Dank für die ausführliche Antwort!
Ich denke, jetzt kann das Testen weiter gehen.

Gruß Dirk