DCF77 Signalgenerierung

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • DCF77 Signalgenerierung

      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.

      BASCOM-Quellcode: DCF77-Sender

      1. 'Testprogramm für DCF77 Programme
      2. 'stellt ein DCF77-Signal an PortD.1 zur Verfügung
      3. 'Dieser Quelltext steht unter der CC-Lizenz
      4. 'Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen
      5. 'http://creativecommons.org/licenses/by-nc-sa/3.0/de/
      6. 'Michael bascomforum.de
      7. $regfile = "M8def.dat"
      8. $crystal = 16000000
      9. $hwstack = 64
      10. $swstack = 32
      11. $framesize = 40
      12. Enable Interrupts
      13. Config Timer1 = Timer , Prescale = 256
      14. On Timer1 T1_isr
      15. Enable Timer1
      16. Start Timer1
      17. Timer1 = 3036
      18. Ddrd = 2 'an PortD.1 liegt das DCF77 Signal
      19. Dim Temp As Byte
      20. Dim Temp_s As Byte
      21. Dim Parity As Bit
      22. Dim L2 As Long
      23. Dim Sec_alt As Byte
      24. Dim _sec As Byte
      25. Dim _min As Byte
      26. Dim _hour As Byte
      27. Dim _day As Byte
      28. Dim _month As Byte
      29. Dim _year As Byte
      30. _sec = 57
      31. _min = 5
      32. _hour = 15
      33. _day = 31
      34. _month = 8
      35. _year = 9
      36. Do
      37. If _sec <> Sec_alt Then
      38. If _min > 59 Then
      39. Incr _hour
      40. _min = 0
      41. End If
      42. Gosub Sectic
      43. Sec_alt = _sec
      44. End If
      45. Loop
      46. End
      47. '---------------------------
      48. Sectic:
      49. If _sec < 18 Then 'bis zur 17.Sekunde "unwichtige" Daten
      50. Gosub Null
      51. End If
      52. If _sec = 18 Then 'Sekunde 18 = MEZ
      53. Gosub Eins
      54. End If
      55. If _sec = 19 Then 'Schaltsekunde ankündigen
      56. Gosub Null
      57. End If
      58. If _sec = 20 Then 'Beginn der Zeitinfo, immer 1
      59. Gosub Eins
      60. Parity = 0
      61. End If
      62. Temp = Makebcd(_min)
      63. If _sec < 28 Then 'Minutenausgabe
      64. If _sec > 20 Then
      65. Temp_s = _sec - 21
      66. If Temp.temp_s = 0 Then
      67. Gosub Null
      68. Else
      69. Gosub Eins
      70. Toggle Parity
      71. End If
      72. End If
      73. End If
      74. If _sec = 28 Then 'Parität Minuten
      75. If Parity = 0 Then
      76. Gosub Null
      77. Else
      78. Gosub Eins
      79. End If
      80. Parity = 0
      81. End If
      82. Temp = Makebcd(_hour)
      83. If _sec < 35 Then 'Stundenausgabe
      84. If _sec > 28 Then
      85. Temp_s = _sec - 29
      86. If Temp.temp_s = 0 Then
      87. Gosub Null
      88. Else
      89. Gosub Eins
      90. Toggle Parity
      91. End If
      92. End If
      93. End If
      94. If _sec = 35 Then 'Parität Stunden
      95. If Parity = 0 Then
      96. Gosub Null
      97. Else
      98. Gosub Eins
      99. End If
      100. Parity = 0
      101. End If
      102. Temp = Makebcd(_day)
      103. If _sec > 35 Then 'Ausgabe Tag
      104. If _sec < 42 Then
      105. Temp_s = _sec - 36
      106. If Temp.temp_s = 0 Then
      107. Gosub Null
      108. Else
      109. Gosub Eins
      110. Toggle Parity
      111. End If
      112. End If
      113. End If
      114. If _sec > 41 Then 'Wochentag
      115. If _sec < 45 Then
      116. Gosub Null
      117. End If
      118. End If
      119. Temp = Makebcd(_month)
      120. If _sec > 44 Then 'Ausgabe Monat
      121. If _sec < 50 Then
      122. Temp_s = _sec - 45
      123. If Temp.temp_s = 0 Then
      124. Gosub Null
      125. Else
      126. Gosub Eins
      127. Toggle Parity
      128. End If
      129. End If
      130. End If
      131. Temp = Makebcd(_year)
      132. If _sec > 49 Then 'Ausgabe Jahr
      133. If _sec < 58 Then
      134. Temp_s = _sec - 50
      135. If Temp.temp_s = 0 Then
      136. Gosub Null
      137. Else
      138. Gosub Eins
      139. Toggle Parity
      140. End If
      141. End If
      142. End If
      143. If _sec = 58 Then 'Parität Datum
      144. If Parity = 0 Then
      145. Gosub Null
      146. Else
      147. Gosub Eins
      148. End If
      149. Parity = 0
      150. End If
      151. Return
      152. Null:
      153. Portd.1 = 1
      154. Waitms 100
      155. Portd.1 = 0
      156. Return
      157. Eins:
      158. Portd.1 = 1
      159. Waitms 200
      160. Portd.1 = 0
      161. Return
      162. T1_isr:
      163. Timer1 = 3036
      164. Incr _sec
      165. If _sec > 59 Then
      166. _sec = 0
      167. Incr _min
      168. End If
      169. Return
      Alles anzeigen