Ich wollte eine Uhr mit DCF77-Empfänger bauen, aber der Empfang hat nicht funktioniert.
Daraufhin habe ich mir zum Testen meinen eigenen Sender programmiert.
Natürlich wird hier nichts gesendet, das Programm stellt aber das DCF77-Signal bereit, so wie es vom Zeitzeichensender bei Frankfurt kommt.
So kann man in Ruhe seine Uhren testen und auich beliebige Zeiten einstellen.
Alles anzeigen
Daraufhin habe ich mir zum Testen meinen eigenen Sender programmiert.
Natürlich wird hier nichts gesendet, das Programm stellt aber das DCF77-Signal bereit, so wie es vom Zeitzeichensender bei Frankfurt kommt.
So kann man in Ruhe seine Uhren testen und auich beliebige Zeiten einstellen.
BASCOM-Quellcode: DCF77-Sender
- 'Testprogramm für DCF77 Programme
- 'stellt ein DCF77-Signal an PortD.1 zur Verfügung
- 'Dieser Quelltext steht unter der CC-Lizenz
- 'Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen
- 'http://creativecommons.org/licenses/by-nc-sa/3.0/de/
- 'Michael bascomforum.de
- $regfile = "M8def.dat"
- $crystal = 16000000
- $hwstack = 64
- $swstack = 32
- $framesize = 40
- Enable Interrupts
- Config Timer1 = Timer , Prescale = 256
- On Timer1 T1_isr
- Enable Timer1
- Start Timer1
- Timer1 = 3036
- Ddrd = 2 'an PortD.1 liegt das DCF77 Signal
- Dim Temp As Byte
- Dim Temp_s As Byte
- Dim Parity As Bit
- Dim L2 As Long
- Dim Sec_alt As Byte
- Dim _sec As Byte
- Dim _min As Byte
- Dim _hour As Byte
- Dim _day As Byte
- Dim _month As Byte
- Dim _year As Byte
- _sec = 57
- _min = 5
- _hour = 15
- _day = 31
- _month = 8
- _year = 9
- Do
- If _sec <> Sec_alt Then
- If _min > 59 Then
- Incr _hour
- _min = 0
- End If
- Gosub Sectic
- Sec_alt = _sec
- End If
- Loop
- End
- '---------------------------
- Sectic:
- If _sec < 18 Then 'bis zur 17.Sekunde "unwichtige" Daten
- Gosub Null
- End If
- If _sec = 18 Then 'Sekunde 18 = MEZ
- Gosub Eins
- End If
- If _sec = 19 Then 'Schaltsekunde ankündigen
- Gosub Null
- End If
- If _sec = 20 Then 'Beginn der Zeitinfo, immer 1
- Gosub Eins
- Parity = 0
- End If
- Temp = Makebcd(_min)
- If _sec < 28 Then 'Minutenausgabe
- If _sec > 20 Then
- Temp_s = _sec - 21
- If Temp.temp_s = 0 Then
- Gosub Null
- Else
- Gosub Eins
- Toggle Parity
- End If
- End If
- End If
- If _sec = 28 Then 'Parität Minuten
- If Parity = 0 Then
- Gosub Null
- Else
- Gosub Eins
- End If
- Parity = 0
- End If
- Temp = Makebcd(_hour)
- If _sec < 35 Then 'Stundenausgabe
- If _sec > 28 Then
- Temp_s = _sec - 29
- If Temp.temp_s = 0 Then
- Gosub Null
- Else
- Gosub Eins
- Toggle Parity
- End If
- End If
- End If
- If _sec = 35 Then 'Parität Stunden
- If Parity = 0 Then
- Gosub Null
- Else
- Gosub Eins
- End If
- Parity = 0
- End If
- Temp = Makebcd(_day)
- If _sec > 35 Then 'Ausgabe Tag
- If _sec < 42 Then
- Temp_s = _sec - 36
- If Temp.temp_s = 0 Then
- Gosub Null
- Else
- Gosub Eins
- Toggle Parity
- End If
- End If
- End If
- If _sec > 41 Then 'Wochentag
- If _sec < 45 Then
- Gosub Null
- End If
- End If
- Temp = Makebcd(_month)
- If _sec > 44 Then 'Ausgabe Monat
- If _sec < 50 Then
- Temp_s = _sec - 45
- If Temp.temp_s = 0 Then
- Gosub Null
- Else
- Gosub Eins
- Toggle Parity
- End If
- End If
- End If
- Temp = Makebcd(_year)
- If _sec > 49 Then 'Ausgabe Jahr
- If _sec < 58 Then
- Temp_s = _sec - 50
- If Temp.temp_s = 0 Then
- Gosub Null
- Else
- Gosub Eins
- Toggle Parity
- End If
- End If
- End If
- If _sec = 58 Then 'Parität Datum
- If Parity = 0 Then
- Gosub Null
- Else
- Gosub Eins
- End If
- Parity = 0
- End If
- Return
- Null:
- Portd.1 = 1
- Waitms 100
- Portd.1 = 0
- Return
- Eins:
- Portd.1 = 1
- Waitms 200
- Portd.1 = 0
- Return
- T1_isr:
- Timer1 = 3036
- Incr _sec
- If _sec > 59 Then
- _sec = 0
- Incr _min
- End If
- Return