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 - 24.02.2010 19:47)
Als Antwort auf Re: Demoprogramm DCF: Timingprobleme von PeterS - 24.02.2010 12:05
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.
> > 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

Hallo Peter,

danke für die schnelle Antwort. Sorry, aber ich habe es leider noch nicht ganz verstanden.
Wo muss ich den Befehl "Clock_GetVal()" im Demoprogramm einfügen?
AuÃ?erdem habe ich auch den gesamten Ablauf noch nicht ganz erfasst.
Die oben beschriebenen Ã?nderungen beziehen sich doch rein auf die DCF-Synchronisation, oder?
Diese Synchronisation funktioniert aber aus meiner Sicht noch. Das heiÃ?t nach Programmstart
wird die richtige DCF-Zeit erfasst und übergeben.
Ich habe das DCF-Programm so verstanden:
Erst wird die aktuelle Zeit über die DCF-Antenne empfangen und anschlie�end nur noch über den
10ms-Interrupt aufaddiert (RTC-Routine). Nur bei der angegebenen Zeit, wird erneut die
Synchronisation durchgeführt(Im Demo-Porgramm um 1:15 Uhr).
Mir scheint als ob rein der Interrupt der alle 10ms die RTC-Routine aufrufen soll nicht genau
stimmt (z.B. 12ms anstatt 10ms), oder einige male verloren geht. Daher läuft die angezeigte
Zeit mehr und mehr der tatsächlichen Zeit hinterher je länger die Synchronisation her ist.
Erst mit der erneuten Syncronisation, wird das scheinbar wieder behoben.
Habe ich das falsch verstanden?
Danke.
Ben


    Antwort schreiben


Antworten:

Re: Demoprogramm DCF: Timingprobleme (von PeterS - 25.02.2010 11:58)