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







Zitieren

Lesezeichen