Du fragst da ab, ob die Impulse kürzer oder länger als 100ms sind.
Beim DCF Signal sind die Impulse aber (im Idealfall) 100ms oder 200ms
lang. Also macht ein Vergleich mit 150 eher Sinn.
Nun ist es aber auch so, daß jeder DCF Empfänger die Impulse mehr oder
weniger verzerrt. Deswegen ist es besser, die tatsächliche Pulsbreite
deines konkreten Empfängers zu messen und dann genau die Mitte
dazwischen als Schwellwert zu verwenden.
Dann noch etwas zu dem 10k Pull-Up Widerstand: Die Ausgänge der gängigen
DCF-77 Empfänger Chips kann man nur ganz schwach belasten. Eine typische
Datenblatt-Angabe dazu wäre z.B. >5µA, was bedeutet, daß der Hersteller
5µA Belastbarkeit garantiert. Mit Glück geht auch mehr.
5V / 10k Ohm = 500µA, als das hundertfache!
Viele DCF-Empfänger haben daher zusätzlich noch einen Transistor drauf,
meistens als Open-Collector geschaltet. Der Invertiert dann das Signal,
so dass es jede Sekunde einen Low-Impuls liefert.
Aber es gibt auch Ausnahmen. Es gibt Chips, die einige mA ohne
zusätzlichen Transistor schalten können. Und was die Polarität des
Signals angeht, macht auch jeder was er will.
Also: Miss erst mal nach, was aus deinem Modul raus kommt und ob sein
Ausgang für deine Anwednung ausreichend belastbar ist.
Dann möchtre ich noch etwas zur Nutzung des Timers sagen: Da der µC nur
wenige Timer hat, ist das eine kostbare Ressource. Du wirst schnell auf
den bedarf stoßen, einen Timer für mehrere Zwecke gleichzeitig zu
verwenden.
Das ist auch ganz einfach. Beim Start des Impulses sollst du ihn nicht
zurück setzen, sondern den aktuellen Wert in eine Variable kopieren.
Beim Ende des Impulses holst du nochmal den aktuellen Timer-Wert und
subtrahierst beide voneinander.
1 | if (steigende Flanke)
|
2 | {
|
3 | startZeit=getMilliseconds();
|
4 | }
|
5 | else // fallende Flanke
|
6 | {
|
7 | pulsLaenge=getMilliseconds()-startZeit;
|
8 | }
|
Die Variable starZeit muss den gleichen Typ haben, wie der Rückgabewert
von getMilliseconds(). Dann liefert die Subtraktion sogar dann noch den
richtigen Wert, wenn der Timer zwischenzeitlich einmal überläuft.
Der Vorteil dieser Vorgehensweise ist, daß du den selben
Millisekunden-Timer auch für andere Messungen verwenden kannst, die sich
mit diesem DCF Empfang zeitlich überlappen.
Da der DCF-Empfang nicht sehr zuverlässig ist, wäre es auch eine gute
Idee, die Uhr primär mit einem Quarz zu takten. Das DCF Signal kann man
dann zum Synchronisieren der Uhrzeit zu verwenden, wenn die empfangenden
Daten denn plausibel sind.