Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Demoprogramm DCF: Timingprobleme Kategorie: Programmierung Basic (von Ben - 26.02.2010 20:50)
Als Antwort auf Demoprogramm DCF: Timingprobleme von Melcher - 23.02.2010 19:50
Ich nutze:
C-Control Pro Mega32
> Hallo,
> ich habe folgendes Problem:
> Ich habe das Demo-Programm DCF in Basic (Demo original Version 1.6) auf mein
> Projekt Board (Mega32) gespielt. Anfänglich läuft es auch einwandfrei.
> Doch nach einigen Stunden merkt man, dass die angezeigt Uhrzeit bereits einige Minuten
> hinter der wirklichen Zeit (ca. 8 Minuten nach ca. 14,5 Stunden) nachläuft.
> Scheinbar ist mit dem 10ms-Interrupt nicht ok.
>
> Hier noch die verwendete Hard-und Software:
> C-Control Pro Mega 32 (Best. 198206)
> C-Control Pro 32 Mega Projektboard (Best. 197287)
> DCF-Empfangsplatine von Conrad (Best. 641138)
> IC-74HC164 zur Ansteuerung eines 4-zeiligen Displays
>
> C-Control IDE Version:2.1.0.0
> Compact-C Compiler Version:1.51.0.51
> Demo origignal Version 1.6 => DCF Programm
>
> Wer kann mir helfen?
>
> Danke.

Hallo,
ich habe weiter rumgespielt und folgendes herausgefunden:
Ich habe anscheinend zwei Probleme. Das erste mit dem kontinuirlichen Versatz, habe ich
scheinbar wie folgt gelöst:Wenn ich in der RTC-Routine den Sekundenzähler nicht
bei 100 Counts erhöhe, sondern schon bei 99, ist der oben beschrieben zeitliche Versatz weg.
Nun habe ich allerdings noch das zweite Problem: Sporadisch bleibt die Uhr wieder kurz stehen.
Meine Frage nun: WeiĂ? jemand wofĂĽr bei der Routine "INT_10ms" die Befehle "DCF_Puls",
"DCF_SYNC" und "DCF_FRAME" gut sind.
Dachte eigentlich, dass die erneute Synchronisation nur zu einer bestimmten Zeit (hier
1:15 Uhr) und direkt aus der RTC-Routine gestartet wird. Wieso werden die oben genannten Befehle
dann alle 10ms gestartet?

Sub INT_10ms()
    Dim irqcnt As Integer
    RTC(&H01,&H15)                          ' DCF Update um 01:15
    DCF_PULS()                              ' DCF_MODE=1 Puls suchen
    DCF_SYNC()                              ' DCF_MODE=2 Synchronisation
    DCF_FRAME()                             ' DCF_MODE=3 Datenaufnahme

    irqcnt=Irq_GetCount(INT_TIM2COMP)       ' Interrupt Request Counter
End Sub

Den Vorschlag von Peter die anderen Befehle aus der Bibliothek zu verwenden muss ich mir dann
auch noch anschauen.

Besten Dank fĂĽr Eure Hilfe im Voraus.

Ben


    Antwort schreiben


Antworten: