Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > 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