Conard DCF

maikgen

Mitglied
24. März 2010
46
0
6
Sprachen
Hallo

habe mir nun mal eine Conrad DCF-77 modus geleistet und wollte es in mein Projekt einarbeiten. Aber ich bekomme keine empfan hin zumindest bekommt der Atmega kein Signal

Ich habe am Modul einen Pull up von 4,7k zwischen Spannung und Ausgang (nicht invertert) diesen hab ich mit pin F.0 am Atmega verbunden.
Zusätlich hab ich noch eine LED am selben ausgang des DCF moduls damit ich sehe ob das Modul Empfang hat und diese blinkt schön gemüdlich in Sekunden takt vor sich her.

Bei Status steht immer nur 48 ab und an kommt mal 49 aber eher ganz selten

Code:
$regfile = "m1280def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 8
$framesize = 24


Dim Takt As Byte , Takt_alt As Byte
Dim Sekunde1 As String * 8
Dim Tag1 As String * 8
Dim Sekunde As Integer
Dim Tag As Integer
Dim Status As Byte
Dim Parity As Byte
Dim Menge As Byte
Dim I As Integer
Dim Sec_old As Byte , Dcfsec_old As Byte

Config Timer1 = Timer , Prescale = 1024


Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.0 , _
Db7 = Porta.2 , E = Porta.3 , Rs = Porta.1
Initlcd
Cls

Config Dcf77 = Pinf.0 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Update = 0 , Check = 1 , Inverted = 0 , Gosub = Sectic
Config Date = Dmy , Separator = .

On Timer1 Sectic
Load Timer1 , 15625
Enable Interrupts
Enable Timer1
Start Timer1


Sec_old = 99 : Dcfsec_old = 99
                  
Do
    If Takt > 59 Then Takt = 00



For I = 1 To 78
      Waitms 10
      If Sec_old <> _sec Then
         Exit For
      End If
      If Dcfsec_old <> Dcf_sec Then
         Exit For
      End If
   Next
   Waitms 220
   Sec_old = _sec
   Dcfsec_old = Dcf_sec

Locate 1 , 1
Lcd Time$

Locate 2 , 1
Lcd Date$

   Sekunde = Time(dcf_sec)
   Sekunde1 = Str(sekunde)
   Tag = Date(dcf_day)
   Status = Bin(dcf_status)
   Parity = Bin(dcf_parity)
   Menge = Bin(dcf_bits)

Locate 1 , 15
Lcd Takt

Locate 1 , 10
Lcd "Takt"

Locate 2 , 15
Lcd Sekunde

Locate 2 , 10
Lcd "Sec"

Locate 3 , 15
Lcd Dcf_sec

Locate 3 , 1
Lcd "DCF Sec"

Locate 4 , 15
Lcd Status

Locate 4 , 1
Lcd "Status"

   If Dcf_sec > 10 Then
      Reset Dcf_status.7
   End If

   'Kontrolle mit der LED

   If Dcf_status.7 = 1 Then
      Portb.3 = 0                                          
   Else
      Portb.3 = 1                                           
   End If

Loop

End

Sectic:
Load Timer1 , 15625
Takt = Takt + 1
Return

End
 
Hallo Maikgen!

Du solltest mal alle manuellen "Timer1"-Anweisungen heraus nehmen.
Der Timer1 wird automatisch für das DCF77-Signal benutzt und darf daher nicht mehr manuel verwendet, oder eingestellt werden!

Die Subroutine "Sectic" wird ebenfalls automatisch jede Sekunde aufgerufen..... wenn du die Angabe in der Config-Zeile gemacht hast.

Dann wäre noch wichtig, alle Interrupts frei zu geben.
Ohne die globale Angabe "Enable Interrupts" werden diese nicht ausgeführt.
Das darfst du also beim Entfernen deiner Timer1-Einstellung nicht mit löschen.


Hier mal ein Beispiel für dich, dass ich eben mal "on the fly" zusammen geschrieben habe.
Sollte aber soweit passen. ;)


CodeBox bascom

Config Dcf77 = PINF.0 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Update = 0 , Check = 1 , Inverted = 0 , Gosub = Sectic

Config Date = Dmy , Separator = .

Enable Interrupts

Time$ = "01:01:01"
Date$ = "01.01.07"

Dim Takt As Bit


Do

If Takt = 0 Then
PORTB.3 = 0
Else
PORTB.3 = 1
Else
End if


Locate 1 . 1
Lcd Time$

Locate 1 . 9
Lcd Date$


Locate 2 . 1
Lcd Time(dcf_sec)

Locate 2 . 9
Lcd Date(dcf_day)


Locate 3 . 1
Lcd Bin(dcf_status)


Locate 4 . 1
Lcd Str(bdcf_impuls)

Locate 4 . 9
Lcd Str(bdcf_pause)

Loop


Sectic:
Toggle Takt
Return




Kannst es ja mal in deinen Code einbauen und schauen, ob du nun zum Erfolg kommst.
Dein DCF-Modul soll ja (auf Grund der binkenden LED) funktionieren!
Bedenke aber, dass du bei den Modulen den Signalausgang eigentlich nicht belasten darfst!

Eine mögliche Schaltung wäre diese hier:
DCF77-Modul-Schaltplan.JPG

Oder auch mit einem FET.... dann ist das Signal allerdings invertiert!
DCF77-BS170.gif


Schöne Grüße,
Cassio
 
Hi,

Dein DCF-Modul soll ja (auf Grund der binkenden LED) funktionieren!
Bedenke aber, dass du bei den Modulen den Signalausgang eigentlich nicht belasten darfst!
ich glaube das das Conrad-Modul da ein wenig robuster ist. Es hat ja keinen
Gegentakt-Ausgang sondern zwei OpenCollector-Ausgänge. Auf der Platine
sind normale SMD-npn-Transistoren die das Signal bereitstellen. Also ich glaube
das man sich da etwas weniger Gedanken machen muß. Mir scheint das Modul
so wie die anderen zu sein (also auch nen IC auf die Platine gebondet) allerdings
mit zusätzlichen Ausgangstreibern auf der Platine.

Gruß
Dino
 
ja super es geht ist ja echt geil irgendwie geht es anders wie bei der Pollin Uhr
die hab ich auch aber da ging das anders aber die Conrad Uhr ist mit der nicht zu vergleichen die brauch nur bruchteile von sekunden bis sie die Zeit findet ich sag mal nach 1 Minute ist alles da.
Super Danke.
Hoffe mal das das richtig ist das sie erst die Sekunden dann die Minuten und dann die Stunden findet und beim Datum das gleiche
 
Hallo Maikgen!

Na, dann ist ja alles bestens! :)

Ich weiß nur nicht, was du für ein Problem mit dem Pollinmodul hast?
Das setze ich bei mir ausschließlich ein und funktioniert auch tadellos!

Ich könnte mir aber vorstellen dass du beim Pollin-Modul nicht bedacht hast, dass du den Ausgang nicht einfach mit dem Pin des AVR verbinden darfst.
Dafür müsstest du dann eine der oben gezeigten Schaltungen benutzen.
Wie dem auch sei....
Hauptsache es funktioniert nun! ;)


Was die Reihenfolge der Daten betrifft.....
Das kannst du hiermit überprüfen:
dcf77kode2007.jpg
Dort kannst du sehen, wann welche BCD-Signale gesendet werden.

Gruß,
Cassio
 
Hoffe mal das das richtig ist das sie erst die Sekunden dann die Minuten und dann die Stunden findet und beim Datum das gleiche
Sieh dir doch einfach mal auf Wikipedia was zum DCF77 an.

Code:
Bit(s) 	Anzahl 	Bedeutung
20 		1 bit 	Beginn der Zeitinformation (ist immer „1“)
21–27 	7 bit 	Minute (Werte der einzelnen Bits: 1, 2, 4, 8, 10, 20, 40)
28 		1 bit 	Parität Minute
29–34 	6 bit 	Stunde (1, 2, 4, 8, 10, 20)
35 		1 bit 	Parität Stunde
36–41 	6 bit 	Monatstag (1, 2, 4, 8, 10, 20)
42–44 	3 bit 	Wochentag (1, 2, 4)
45–49 	5 bit 	Monat (1, 2, 4, 8, 10)
50–57 	8 bit 	Jahr (zweistellig; 1, 2, 4, 8, 10, 20, 40, 80)
58 		1 bit 	Parität Datum
Ab der Synchronisationsmarke (fehlende 60te Sekunde) kann man schon mit
dem Zählen der Sekunden anfangen. Dann kommen ab der 21en Sekunde die
Minuten-Infos und ab der 29en Sekunde die Stundeninfos. Dann kann man
sich zusammenreimen in welcher Reihenfolge bei gutem Empfang die Daten
auf dem Display erscheinen ;)

Und wenn man kurz vor der 60en Sekunde einschaltet hat man sehr schnell
die Daten. Wenn man natürlich bei der ersten Sekunde einschaltet muß man
selbst auf die Sekundenzählung ne knappe Minute warten.

EDIT: Ach was ... Cassio hat auch schon seinen Senf dazu gegeben :D

Gruß
Dino
 
EDIT: Ach was ... Cassio hat auch schon seinen Senf dazu gegeben :D

Hi Dino!

Jepp, hab ich! :D

Allerdings habe ich es nicht so ausführlich beschrieben wie du.....
sondern einfach nur ein Bild eingestellt. ;)

Erfüllt aber hoffentlich trotzdem seinen Zweck. :eek:


Gruß,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)