Könnte man auch mit Folgendem etwas anfangen. Denn das habe ich momentan in Gebrauch um das DCF-Signal besser kennenzulernen.
Code:
Cls 'LCD-Display löschen und Meldung ausgeben.
Locate 3, 1 'Textposition auf LCD-Display festlegen
Lcd "Minutenl{245}cke suchen" 'und Text Minutenlücke suchen ausgeben
signalgap = 0 'Signalbreite löschen
While signalgap < 1700 'Solange empfangen bis Minutenlücke gefun-
'den ist.
' Ende der Sekundenmarke suchen, DCF-Signal wird "0"
While dcf77inp = 1 'Ende der Sekundenmarke suchen, DCF-Signal
Waitms 1 'wird 0. Im ms-Takt abfragen
Wend
' Breite der Lücke messen (Zeit während der das DCF-Signal "0" bleibt)
signalgap = 0 'Signalbreite löschen
While dcf77inp = 0 'Neue Signalbreite messen in dem der Ein-
Incr signalgap 'gang im 1ms-Abstand abgefragt wird.
Waitms 1 'Solange Signal Low ist, Zähler erhöhen
Wend 'Solange wiederholen bis Signal 1 ist.
Locate 3, 1 'Textposition auf LCD-Display festlegen
Lcd " " 'und alten Text löschen.
Locate 3, 1 'Textposition wieder auf Anfang 3. Zeile
Lcd "L{245}cke: "; signalgap; " " 'und Text + Signallänge ausgeben
Wend
' *****************************************************************
' * Minutenlücke gefunden (Signalgap >= 1700ms) *
' *****************************************************************
Cls 'LCD-Display löschen.
Locate 3, 1 'Textposition auf LCD-Display festlegen.
Lcd "Bits empfangen..." 'Und Text ausgeben.
Reset signalerror 'Fehlerflag für Signalempfang löschen
bitcount = 1 'Bitzähler auf 1 setzen
While BitCount <= 59
If BitCount >= 59 Then BitCount = 0 'Test um die Zeiten auf dem Display zu sehen
' While signalerror = 0 AND bitcount <= 59
' Breite der Sekundenmarke messen: <70ms = Störpuls, 100ms = "0", 200ms = "1"
signalwidth = 0
While dcf77inp = 1
Incr signalwidth
Waitms 1
Wend
' Die erste Sekundenmarke (Minutenanfang) wird immer wesentlich kürzer gemessen.
' Grund unbekannt. Daher wird hier die erste Marke künstlich um 20ms verlängert.
If bitcount = 1 Then signalwidth = signalwidth + 30 '1. Marke verlängern
Locate 2, 1 'Alten Text auf dem LCD-Display
'Lcd " " 'löschen.
'Lowerline
Select Case signalwidth
Case Is < 65: Set signalerror 'Sekundenmarke ist zu schmal
Lcd "error"; signalwidth
Case 65 TO 110: dcfbit(bitcount) = 0 'Signalbreite ergibt "0"
Lcd "(0) "; signalwidth; " "
Case Is > 110: dcfbit(bitcount) = 1 'Signalbreite ergibt "1"
Lcd "(1) "; signalwidth; " "
End Select
Incr bitcount 'read next bit
' Lücke überspringen
signalgap = 0
Locate 2, 12
While dcf77inp = 0
Incr signalgap
Waitms 1
Wend
Lcd SignalGap; " "
Locate 3, 1
I = SignalWidth + SignalGap
LCD I; " "
If signalgap < 700 Then Set signalerror 'Lücke war zu kurz
Wend
Lesezeichen