DCF77 DCF1 Arduino Pollin : Und die Zeit tickt

Das könnte Dich auch interessieren …

33 Antworten

  1. Daniel sagt:

    Mit welchem Code kann ich den in der Zeile (//—> hier könnte man die Ausgabe auch auf ein LCD schicken.
    }) eine / Segmentanzeige ansteuern, welche mit die Uhrzeit in Stunden und Minuten anzeigt, programmieren.

  2. Marcel sagt:

    Hallo, ich habe auch das Programm runtergeladen.

    Leider habe ich folgendes Problem: im dritten sketch kommt immer eine Fehlermeldung wo er über das time_t meckert.

    Hat da jemand eine Idee? Bin am verzweifeln

    Liebe Grüße

  3. Max sagt:

    Hallo zusammen, ich habe alle 3 sketches ohne Probleme zum laufen bekommen. ich möchte nun noch zusätzlich zum seriellen Monitor ein LCD laufen lassen, wo es die Uhrzeit und das Datum ausgibt. Soweit auch kein Problem. allerdings möchte ich gerne die sekunden mitlaufen lassen… das bekomme ich leider nicht zum laufen. hat jemand einen Sketchausschnitt wo das beinhaltet? lg max

  4. Ulf Böhme sagt:

    Habe mir alles soweit durchgeschaut und ein Programm gebastelt, wo ich durchblicke.
    #include "Arduino.h"
    #define DCF77PIN 2

    int bitnr = -1;
    int bitvalue = -1;
    int dcfValue = 0;
    bool newMinute = false;
    bool signal = false;

    int signalHIGHBegin = 0;
    int signalHIGHEnd = 0;

    int signalLOWBegin = 0;
    int signalLOWEnd = 0;

    int signalLOWTime = 0;
    int signalHIGHTime = 0;

    int minute = 0;
    int minute_new = 0;
    int hour = 0;
    int hour_new = 0;

    int zero_count = 0;

    void setup()
    {
    Serial.begin(9600);
    pinMode(DCF77PIN, INPUT);
    Serial.println("Wait for start of a minute...");
    }

    void loop()
    {
    dcfValue = digitalRead(DCF77PIN); //Wert am PIN einlesen

    if (dcfValue == HIGH && signal == false)
    {
    signal = true;

    signalLOWEnd = signalHIGHBegin = millis();

    signalLOWTime = signalLOWEnd - signalLOWBegin;

    if(signalLOWTime >= 1750)
    {
    bitnr = 0;
    zero_count = 0;
    Serial.print("Begin of minute found. LowTime: ");
    Serial.println(signalLOWTime);
    }
    else
    {
    bitnr++;
    bitnr%=60;
    }
    }

    if (dcfValue == LOW && signal == true)
    {
    signal = false;

    signalHIGHEnd = signalLOWBegin = millis();

    signalHIGHTime = signalHIGHEnd - signalHIGHBegin;

    Serial.print(bitnr);
    if(signalHIGHTime>130)
    {
    bitvalue=1;
    Serial.print(": 1 | Hightime: ");
    }
    else
    {
    bitvalue=0;
    zero_count++;
    Serial.print(": 0 | Hightime: ");
    }
    Serial.print(signalHIGHTime);
    delay(950-signalHIGHTime);
    Serial.println(" | delay-end.");
    showTime();
    }
    }

    void showTime()
    {
    if(bitnr==20) minute_new=0;
    if(bitnr>20 && bitnr 28 && bitnr <35) { if(bitnr==29 && bitvalue==1 ) hour_new+=1; if(bitnr==30 && bitvalue==1 ) hour_new+=2; if(bitnr==31 && bitvalue==1 ) hour_new+=4; if(bitnr==32 && bitvalue==1 ) hour_new+=8; if(bitnr==33 && bitvalue==1 ) hour_new+=10; if(bitnr==34 && bitvalue==1 ) hour_new+=20; } if(bitnr==58 && zero_count<55 && minute_new<60 && hour_new<24) { minute=minute_new; hour=hour_new; Serial.println(); Serial.print("Time: "); Serial.print(hour); Serial.print(":"); Serial.println(minute); } }

  5. Mirko sagt:

    Hallo Ralf,
    herzlichen Dank für Deinen Beitrag zum DFC-Modul von Pollin!
    Das Teil ist bei mir heute angekommen und ich hab ne ganze Weile versucht, bei Step2 vernünftige Werte zu bekommen.
    Erst als ich den Code leicht geändert hatte, so dass der Wert für SignalHIGHZeit auf dem Seriellen Monitor mit ausgegeben wurde, merkte ich, dass das nicht mit den Werten in Deinem Sketch zusammenpasste. Ich hab untere Werte von etwa 115 bis 117 und obere Werte von etwa 219, also leicht über den von Dir gewählten Bereichen.
    Habs also angepasst:
    ———-
    if (SignalHIGHZeit >= 90 && SignalHIGHZeit = 190 && SignalHIGHZeit <= 225) {return 1;} //war 190..210
    ———-
    Et voilá: es lief ab diesem Zeitpunkt völlig problemlos und stabil.
    Leider klappts mit der Library in Step3 irgendwie nicht (Arduino UNO, IDE 1.6.12). Wenn Du nen Tip für was Aktuelles hast…gerne her damit 😉

    Jedenfalls hab ich jetzt verstanden, wie das alles funktioniert und wie das DCF-Signal codiert ist. Hatte die ganze Zeit den Denkfehler, dass ich dachte, es wechseln sich jede Sekunde immer ein langes (200ms) und ein kurzes Signal (100ms) ab. In allen Beispielen, die ich fand, war genau das der Fall. Hab mich dann immer gefragt, wie da dann nochmal was codiert sein soll. Für alle, die den selben Denkfehler machen: je nachdem, ob das Bit gesetzt ist oder nicht, ist das Signal im betrachteten Takt länger oder kürzer. Es können also mehrere Takte mit kurzem bzw mehrere mit langem Signal am Anfang aufeinanderfolgen. DER Knoten ist bei mir jetzt also geplatzt 😉
    Grüße

  6. Mattze sagt:

    Hallo,

    ich bin leider momentan ziemlich am verzweifeln mit dem DCF-Empfänger.
    Sämtliche Schaltungen funktionieren und ich bekomme über den Serial Monitor mit dem oben vorgestellten Sketch auch die korrekte Uhrzeit angezeigt. Ich betreibe einen Arduino Nano mit externer Stromversorgung, da es bei Stromversorgung über USB offenbar zu starke Interferenzen mit dem Empfänger gibt. USB-Kabel ist dennoch angeschlossen, um den Serial Output auszulesen. Soweit so gut.

    Nun habe ich das Skript minimal erweitert, dass eine LED leuchtet, sobald ein Zeitsignal vorliegt. Ziel ist, das Vorliegen auch ohne Auslesen des Serial Output zu erkennen.

    if (DCFtime!=0)
    {
    setTime(DCFtime); //Neue Systemzeit setzen
    Serial.print(„Neue Zeit erhalten : „); //Ausgabe an seriell
    Serial.print(sprintTime());
    Serial.print(“ „);
    Serial.println(sprintDate());

    digitalWrite(BLINK_PIN,HIGH);
    }

    Im Betrieb mit Serial Monitor funktioniert alles nach wie vor. Nach ca. 2 Minuten erhalte ich regelmäßig ein Zeitsignal, die LED beginnt zu leuchten.

    Wenn ich nun aber die USB-Verbindung trenne (nur noch externe Stromversorgung, kein Serial Monitor mehr), erhalte ich offenbar kein Signal mehr. Zumindest leuchtet die LED auch nach längerer Zeit und mehreren Versuchen nicht. Gegenprüfungen mit Serial Monitor funktionieren hingegen dann wieder…

    Habt ihr eine Idee, woran das liegen könnte…?

    Vielen Dank!

    LG Mattze

    • Ralf sagt:

      Hi,
      an der seriellen Ausgabe liegt es nicht, denn der Arduino weiß nicht das
      das der PC keine Daten empfängt.

      Start mal alles mit USB Verbindung und warte bis die LED blinkt.
      Dann steckst du das Netzteil dazu. Hörte es auf zu blinken, dann ist das Netzteil das Problem.

      Läuft es weiter (mit USB und Netzteil) zieh den USB ab, hört es auf zu blinken, dann ist das Netzteil schult.

      Ändere bei Allem die Lage der Antenne nicht, damit wir ein Empfangsprobleme ausschließen können.

      mfg
      Ralf

  7. Ralph sagt:

    Hallo zusammen, ich rolle das Ding hier nochmal auf.
    Am Arduino UNO bekomme ich alle drei steps wunderbar zum laufen, funktioniert einwandfrei und echt zügig.
    Am Arduino MEGA jedoch, sehen die Werte in Step 2 schon deutlich anders aus und Step3 läuft überhaupt nicht.
    Bin schon den ganzen Tag am probieren und finde nicht woran es liegt.
    Hat jemand eine Lösung dafür?

    Vielen Dank und viele Grüße
    Ralph

  8. Markus sagt:

    Moin,

    ich habe jetzt auch angefangen, mit dem Pollin Modul zu arbeiten. Ich nutze es in Verbindung mit einem Arduino Nano und einer 7-Segment-Anzeige, die über einen MAX7219 angesteuert wird.
    Eigentlich funktioniert alles hervorragend. Wenn es funktioniert. Dann läuft die Uhr Tag und Nacht durch. Wenn ich dann allerdings ein wenig an einem der Dräthe wackel, die zwischen Ardino und DCF77 Modul bzw vom DCF77 Modul zur Antenne verlaufen, kann plötzlich tote Hose sein.

    So richtig kann ich mir diesen Effekt nicht erklären. Einen Wackelkontakt würde ich ausschließen, weil das Problem mit zwei Modulen auftritt.

    Für Tips wäre ich dankbar.

    Markus

  9. Paul sagt:

    Hi,
    danke erst mal für die Anleitung.
    Mein Pollin-Modul funktioniert prima. Die ersten beiden Scripts laufen wie gewollt. Eine ans Modul angeschlossene LED blinkt gleichmässig im sec-Takt.
    Aber das 3. Script zum holen der Zeit scheint nicht zu funktionieren:
    Nach der Ausgabe von „Dies kann 2 oder mehr Minuten dauern“ passiert nichts mehr (auch nach längerem Warten). Eine Ausgabe von DCFtime zeigt, dass diese immer 0 ist.
    Es wäre klasse, wenn jemand einem absuten Neuling einen Hinweis geben könnte.

    • Paul sagt:

      Hi,
      habe als Neuling leider erst jetzt gecheckt, dass man nicht jedes Pin für den DCF-Empfänger nehmen kann.
      Das von mir genutzte Pin 9 ist offenbar nicht interruptfähig 🙁
      Mit Pin 2 (welches aber bei mir besetzt ist) klappt alles. Muss also bissel umbauen oder ich muss mich ans selber programmieren machen.
      Aber ich glaube, so schnell krieg ich das nicht hin, einen Timerüberlauf zum checken einer Flanke anstelle eines Interrupts zu nehmen…
      Paul

  10. Andy sagt:

    Hallo an alle!

    Versucht mal PON mit 10k gegen Gnd und zwischen VDD und PON 10µ
    Kondensator.
    Das RC-Glied erzeugt nach dem Anlegen der Betriebsspannung eine negative Flanke am PON (PowerON) – Pin und schaltet das Modul ein!

    MfG.Andreas

    • Florian sagt:

      Hi,
      echt cooles Projekt. Würde es gerne nutzen um mir einen Wecker zu bauen.
      Habe allerdings das Problem dass die Files von http://thijs.elenbaas.net/downloads
      als library nicht mehr akzeptiert werden (Wenn ich das zip File zu den libraries adden will kommte ne Fehlermeldung). Kenn jemand ne andere easy to use lib die auch mit der heutigen Arduino Umgebung konform sind?

      Gruß vom Arduino-newbie Florian

  11. Christoph sagt:

    Hallo zusammen,

    hat jemand von euch Erfahrung mit der Kombination DCF77-Modul mit einem Arduino DUE. Wir bekommen die oben dargestellten Programme ohne Probleme an einem UNO zum laufen, aber bis auf die Empfangsanzeige keines am DUE. Wir haben auch noch andere Testprogramm probiert, gleiches Ergebnis. Die Bibliotheken haben wir für den DUE entsprechend aktualisiert. Da sollte das Problem nicht liegen. Die Pin-Belegung ist gleich am DUE und am UNO.

    Gruß Christoph

  12. Daniel Daniel sagt:

    Ich bin am verzweifeln!!

    Also mein Signal ist gut, aber wenn
    DCFPulse drauf spiel kommt nur Mist:
    Die Werte passen nicht.
    Was habe ich falsch gemacht?

    „Warte auf Start einer neuen Minute…

    ### S T A R T N E U E M I N U T E
    BitNr.:0 Wert :-207

    ### CODIERTE WETTERDATEN
    BitNr.:1 Wert :0
    BitNr.:2 Wert :-205
    BitNr.:3 Wert :1
    BitNr.:4 Wert :-205
    BitNr.:5 Wert :-123
    BitNr.:6 Wert :-203
    BitNr.:7 Wert :-204
    BitNr.:8 Wert :-123

  13. Claudi sagt:

    Und wenn mir jetzt noch jemand erklärt, wie ich dem Arduino UNO im 3. Sketch beibringen kann, den Analogeingang 2 fürs Signal auszulesen und nicht den Digitaleingang, dann wäre es perfekt.
    Die Digitaleingänge brauche ich nämlich für die 7-Segment-Anzeige, die angesteuert werden soll. Bei den ersten beiden Sketches konnte ich das digitalread einfach in ein analogread umsetzen und HIGH und LOW über Min- und Maxpegel für die Zustände definieren. Aber beim 3. Sketch blick ich noch nicht so durch, auch weil ich noch nicht mit Biblis gearbeitet hab.
    Ansonsten aber trotzdem VIELEN lieben Dank an dich Ralf, dass du dir hier die Mühe für diesen Beitrag gemacht hast. Das hilft mir ungemein weiter. *thumbs up*

    • Claudi sagt:

      Ich habs gefunden, in zeile 44 steht das digitalread
      hab den wald vor lauter bäumen nicht gefunden
      kurz vor feierabend noch nen erfolg *freu*

      also danke nochmal und frohe weihnachten sowie guten rutsch
      grüße Claudi

      • Ralf sagt:

        Hi,
        falls du doch noch Digitaleingänge brauchst, google doch mal nach „7-Segment-Anzeige multiplex“.

        • Claudi sagt:

          Frohes neues allen Lesern.
          Nach der Beschreibung von meinem Grundlagen-Buch nutze ich sogar Doppelmultiplex, also zusätzlich die 4 Anzeigen schnell hintereinander angesteuert. Noch weniger als 12 Ausgänge nutzen geht da glaube ich nicht mehr.
          Und DigiPort 0 und 1 soll ich laut Auftrag nicht nutzen, also bleibt kein Digiport mehr über.

          Das mit Zeile 44 war im 1. Sketch, dummerweise in der Seite vertan. In der „DCF77.cpp“ steht „digitalread(DCF77PIN)“, funzt bis jetzt aber nur im Original… Vllt muss ich ja mit dem analogen Wert noch etwas spielen, wenn ich den zum digitalen umdefiniere.

  14. Hartmut sagt:

    Hallo,
    will alles auf dem Arduino uno laufen lassen.
    Sketch1 läuft. Sketch 2 auch. Nur im sketch 3 erhalte ich eine Fehlermeldung. Liegt es am UNo?
    Mfg Hartmut

  15. Andreas sagt:

    Hallo,

    kann es sein das DCF-77 und vw_send nicht zusammen in einem Programm gehen?

    • Ralf sagt:

      Huhu,
      mit „vw_send“ meinst du glaub ich einen Befehl aus der VirtualWire Lib (?)
      Ich geh nun mal davon aus das du die VirtualWire Lib zusammen mit der DCF77 Lib meinst…
      Kann ich dir so gar nicht sagen, wäre schön wenn du mal den Code und die Fehlermeldung postes,
      evtl. kann dir dann geholfen werden.

  16. René sagt:

    Hallo,

    Versuche schon etwas länger ein DCF Empfänger am Arduino Due zum laufen zu bekommen. Habe schon einige Testprogramme versucht. Hier habe ich endlich ein Programm gefunden mit den ich auch die Bit auswerten kann. Musste leider feststellen das ich nicht nur 0 und 1 bekommen habe. Hier auch ein Dank an Ralf.
    Das mit den 0 und 1en konnte ich beheben indem ich die Zeiten so geändert habe.

    //Gebe den Wert zurück den das Bit aufgrund der HIGH Zeit-Länge haben muss
    int werteBitAus (int SignalHIGHZeit) {
    //mit den Zeiten ein wenig größzügig sein, die schwanken um den Optimalwert
    if (SignalHIGHZeit >= 80 && SignalHIGHZeit = 180 && SignalHIGHZeit <= 220) {return 1;}
    }

    Hier jetzt meine Frage:
    Welche Auswirkung hat dies in der DCF77.h?

    Meine aktuellen Werte sind:

    #define DCFRejectionTime 700
    #define DCFRejectPulseWidth 80
    #define DCFSplitTime 180
    #define DCFSyncTime 1500

    Wie muss ich sie einstellen?

    Danke schon mal.

    • Ralf sagt:

      Hi,
      ohne nun geprüft zu haben ob die DCF77 library überhaupt mit dem Due läuft, kann dein Problem schon mit der Zuweisung des Interrupt Pin zusammen hängen.
      /*
      * InternalClockSync.pde
      * example code illustrating time synced from a DCF77 receiver
      * Thijs Elenbaas, 2012
      * This example code is in the public domain.

      This example shows how to fetch a DCF77 time and synchronize
      the internal clock. In order for this example to give clear output,
      make sure that you disable logging from the DCF library. You can
      do this by commenting out #define VERBOSE_DEBUG 1 in Utils.cpp.
      */

      #include "DCF77.h"
      #include "Time.h"

      #define DCF_PIN 2 // Connection pin to DCF 77 device
      #define DCF_INTERRUPT 0 // Interrupt number associated with pin

      time_t time;
      DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);

      void setup() {
      Serial.begin(9600);
      DCF.Start();

      http://arduino.cc/de/Reference/AttachInterrupt#.UzsDdfkRdmM

      Beim Due muss „DCF_PIN“ 3 sein, oder auf 2 lassen und „DCF_INTERRUPT“ auf 1 stellen.

      Und mach nicht den Fehler und schließe den Data Pin (wenn du den DCF77 über 5V betreibst) sofort an den Arduino Due an,
      die I/O Pins können nur 3.3V, der 5V DCF77 liefert aber 4.9V, da könnte dein Timing Problem auch herkommen.

      Siehe dazu : http://www.mikrocontroller.net/articles/Pegelwandler#5_V_.E2.87.92_3.2C3_V

      Wenn ich Zeit bekomme werde ich das DCF77 mal an den Due klemmen.

      • René sagt:

        Hallo,

        Ich benutze den DCF77 von Conrad (Nr.: 641138) der ist von 2,5V bis 15V geeignet, so kann ich die 3,3V vom Board Nutzen.
        In deinem Testprogramm auf Page 2 Empfange ich ja die Werte aber mit der +10ms je Auswertezeit.
        Benutze die lip „DCF77.0.9.8.zip“ die mit dem Due geht!

        Ein guter Vergleich ist die Webseite „http://www.dcf77logs.de/WebConsole.aspx“ hiermit vergleiche ich die Empfangenen Daten und sie sind richtig.
        Also ist mein Empfang von DCF77 erst mal richtig.

        Wenn ich dann das Programm von der Page 3 benutze bekomme ich halt keine Zeit!

  17. Andreas sagt:

    Hallo,

    danke für die Hilfe, es ist immer wieder schön wenn man es mit Leuten zu tun hat die wissen was sie machen, etwas was man von Demjenigen der diesen Schaltplan bei Pollin „gemalt“ hat leider nicht behaupten kann.
    Es funktioniert jetzt wunderbar.

    Andreas

  18. Hansen sagt:

    Ich hatte auch das andere Pollin Modul, hier stand in der Anleitung
    3,3 Volt. Das Funktioniert so nicht.
    Also no RISC no FUN einfach mal an 5 Volt angeschlossen und siehe da, es läuft. Hier muss Pollin die Anleitung schnell nachbessern.

  19. FrankWL sagt:

    Ich habe das Pollin Modul DCF1 Best-nr.: 810 054
    Leider lief das ganze bei mir nicht gleich.
    Das Anschlussbild bei meinem Modul ist falsch.
    http://www.jogis-roehrenbude.de/forum/forum/forum_entry.php?id=40180

    Scheinbar braucht das Modul auch einen high-low Wechsel an PON.
    Dieser „reset“ sollte 1 Sekunde nach dem Einschalten erfolgen.
    http://www.mikrocontroller.net/topic/97295

    Das lässt sich einfach mit einem RC-Glied aufbauen
    http://www.b-redemann.de/sp-project-dcf77.shtml

    Nach dem ich das geändert habe, lief auch das Modul einwandfrei.

    • Ralf sagt:

      Danke Frank für den Hinweis.

      Auf der Eingangsseite hatte ich schon in roten Lettern erwähnt das es eine zweite Version des Moduls gibt, evtl. hast du Diese, ich habe Sie bis Dato noch nicht gehabt, deswegen kann ich dazu nichts sagen.

      Aber danke für die Links, Diese werden einigen Usern helfen die das selbe Problem haben wie du.

    • Uli sagt:

      Hallo allerseits!

      Hatte mir im Mai per Amazon das Pollin-Modul geordert.

      Die Pin-Belegung gleicht der von FrankWL beschriebenen.

      Also genau anders herum.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.