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 PeterS - 24.02.2010 12:05)
Als Antwort auf Demoprogramm DCF: Timingprobleme von Melcher - 23.02.2010 19:50

> 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.
> Ben

Hallo Ben,

es gibt eine Ungenauigkeit vom Quarz, und das Problem, das bei DCF manchmal zuviel in der
10ms Routine abgearbeitet wird. Dabei gehen vielleicht einzelne Interrupts verloren. Aus
diesem Grunde gibt es die Clock Bibliotheks Routinen. Die sind in Assembler und es werden
garantiert alle 10ms Interrupts durchgeführt. Für die Ungenauigkeit des Quarzes kann man
einen Korrekturfaktor angeben. Des ist auch dort genau beschrieben.

Da die DCF Routinen (die nicht von mir sind) aus einer älteren Zeit stammen, sollten diese
so umgestellt werden, das die Clock Funktionen genutzt werden. Da ich keine DCF Antenne
habe, kann ich es nicht selbst testen, aber hier ein Vorschlag, wie die nötige �nderung
aussehen könnte:

Alter Code in DCF_Lib.cc:

if (DCF_ARRAY[6]==0)             // DCF ok
{
    Minute=BCD2DEC(DCF_ARRAY[0]);         // Uhrzeit übernehmen
    Stunde=BCD2DEC(DCF_ARRAY[1]);
    Tag=BCD2DEC(DCF_ARRAY[2]);
    Monat=BCD2DEC(DCF_ARRAY[4]);
    Jahr=BCD2DEC(DCF_ARRAY[5]);
    Sekunde=0;
    cnt1=0;
}

Neuer Code:

if (DCF_ARRAY[6]==0)             // DCF ok
{
    Clock_SetTime(BCD2DEC(DCF_ARRAY[1]), BCD2DEC(DCF_ARRAY[0]), 0, 0);
    Clock_SetDate(BCD2DEC(DCF_ARRAY[2]), BCD2DEC(DCF_ARRAY[4]), BCD2DEC(DCF_ARRAY[5]));
}


Die aktuelle Zeit mu� dann natürlich mit Clock_GetVal() später abgeholt werden.

Gruss Peter


    Antwort schreiben


Antworten:

Re: Demoprogramm DCF: Timingprobleme (von Joerg - 25.02.2010 8:53)
    Re: Demoprogramm DCF: Timingprobleme (von PeterS - 25.02.2010 11:51)
Re: Demoprogramm DCF: Timingprobleme (von Ben - 24.02.2010 19:47)
    Re: Demoprogramm DCF: Timingprobleme (von PeterS - 25.02.2010 11:58)