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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum