🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.sci.electronics
Article #1479

Re: DCF-Decodierung

#1479
From: Matthias Hanke
Date: Tue, 14 Oct 1997 00:00
60 lines
3485 bytes
Marc 'Nepomuk' Heuler wrote:
> 
> In article <343fdf25.806551@steinfurt.westfalen.de>, Olaf Hellmann writes:
> 
> > >Mich  w�rde  ein  '51  Code interessieren, der die DCF77 Datenfelder in die
> > >Anzahl   der  Sekunden  seit  1.   Januar  1997  (oder  ein  anderes  Jahr)
> > >Mitternacht  umrechnet.   Diese  Anzahl  k�nnte  ich dann per Timerint jede
> > >Sekunde  um  1  erh�hen  und h�tte so einen immer stimmigen Zeitstempel f�r
> > >Logzeilen, auch wenn das DCF77 Signal mal nicht empfangen wird.  Hast Du so
> > >eine Funktion?
> >
> > [...]
> >
> > Wenn du das wirklich mit einen 10 ms Interrup machst kannst du auch
> > sehr einfach die Uhr auch bei Nichtempfang weiterrechnen lassen denn
> > zumindest bei meinen 80535 war der Interrup so genau das ich einen
> > Abweichung von 3 Sekunden pro Tag bei Nichtempfang der DCF-Zeit hatte
> > was IMHO ein sehr guter Wert ist der voll und ganz ausreicht.
> 
> Genau  das ist ja der Punkt.  Es geht n�mlich nicht so einfach.  Ich mu� in
> der  Funktion  ber�cksichtigen,  wieviele Sekunden eine Minute hat usw, und
> insbesondere,  wieviel  Tage  welcher Monat, wieviel Tage welches Jahr hat.
> Dann  kommen  die  Regeln  f�r's  Schaltjahr  dazu, jedes volle Jahrhundert
> wieder nicht, das Jahrtausend dann doch wieder usw.  All diesen Kram k�nnte
> ich  mir sparen, wenn ich oben beschriebene Funktion h�tte.  Dann reduziert
> sich der ganze Kram auf einen einfachen x-Bit Z�hler.
> 
> Hat jemand eine solche Funktion?

Nee, leider nicht. Das ist aber doch ganz einfach zu realisieren: Man
kann z.B. fuer jede Stelle einen BCD-Zaehler einrichten (SE, SZ, ME, MZ,
HE, HZ..., je nachdem wieviel Speicher Dir zur Verfuegung steht. Dann
bastelst Du Dir Funktionen, die jeweils eine Stelle incrementieren, z.B.
se() erhoeht die einerstelle der Sekunden um 1. Das sieht dann etwa so
aus:
se(){
sek++;
if(sek>9){
   sek=0;
   sz();	// Zehnerstelle erhoehen
   }
}

Und so weiter. Damit erleichtert sich auch die Ausgabe aufs Display.
Zwei Punkte sind zu beachten: 

1. Man darf nicht so tief verschachteln, dass der Stack ueberlaeuft.
2. Die Funktion muss auf jeden Fall (also worst case: Ueberlauf aller
Stellen)
   vor dem naechsten Interrupt zurueckkehren.

Dein Verfahren funktioniert natuerlich ach. Dann hast Du aber fuer jede
Zeitausgabe viel zu rechnen.

Das Datum (Schaltjahr und so) ist doch wohl nicht unbedingt noetig,
oder? Wenn Du das dennoch implementieren moechtest musst Du auch noch an
die Umschaltung Sommerzeit/Normalzeit denken.

Hanky
Technical Details
Message-ID: <344349D6.366B75D@heh.uni-osnabrueck.de>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <343d443c.1437672@steinfurt.westfalen.de> <rpscB*NTd@aargh.mayn.de> <343fdf25.806551@steinfurt.westfalen.de> <nIudB*TWd@aargh.mayn.de>

Show Full Headers
Complete Article Headers
X-Google-Language: GERMAN,ASCII
X-Google-Thread: 112e71,ad6ee8c0941936ad
X-Google-Attributes: gid112e71,public
X-Google-Thread: 105dc7,991f831314cdee3d
X-Google-Attributes: gid105dc7,public
X-Google-Thread: 10ba43,991f831314cdee3d
X-Google-Attributes: gid10ba43,public
X-Google-Thread: fa709,991f831314cdee3d
X-Google-Attributes: gidfa709,public
X-Google-Thread: f637a,991f831314cdee3d
X-Google-Attributes: gidf637a,public
From: Matthias Hanke <hanky@heh.uni-osnabrueck.de>
Subject: Re: DCF-Decodierung
Date: 1997/10/14
Message-ID: <344349D6.366B75D@heh.uni-osnabrueck.de>
X-Deja-AN: 280457448
References: <343d443c.1437672@steinfurt.westfalen.de> <rpscB*NTd@aargh.mayn.de> <343fdf25.806551@steinfurt.westfalen.de> <nIudB*TWd@aargh.mayn.de>
Organization: HEHOS-NET
Newsgroups: de.sci.electronics,fido.ger.elektronik,maus.elektronik,t-netz.elektronik,z-netz.alt.elektronik