Forum: Mikrocontroller und Digitale Elektronik DCF77 von ELV


von Ole (Gast)


Lesenswert?

Hallo,
ich habe mir das DCF77 Modul von ELV geholt, nachdem ich bei einem 
schlecht verarbeitetem von ebay immer wieder Probleme mit dem Empfang 
hatte. Das neue Modul hat meistens ziemlich guten Empfang allerdings hat 
es mit keiner Library funktioniert, die ich probiert habe. Es kommt mir 
so vor als wäre das Signal von dem neuen Modul invertiert zu dem alten. 
Das Modul soll an einem Arduino Uno laufen und eine Nixie Uhr auf dem 
neuesten Stand halten. Die Nixie Uhr läuft auch schon mit einem RTC.

Das ist das Modul
https://www.elv.de/dcf-empfangsmodul-dcf-2.html
Das ist die Library, die ich versuche zu verwenden
http://thijs.elenbaas.net/downloads/

Hat noch wer das ELV Modul an einem Arduino und hat eine passende 
Library oder weiß was an der oben genannten Lib geändert werden muss? 
Ich habe selber schon ein bisschen an der Lib rum gespielt, aber da ich 
nur Hobby mäßig überhaupt was mit Etechnik und Informatik zu tun habe, 
lief das bis jetzt nicht so gut.
Das Signal habe ich übrigens mit einem Beispiel Code von der gennanten 
Lib getestet:

#define BLINKPIN 13
#define DCF77PIN 2

int prevSensorValue=0;

void setup() {
  Serial.begin(9600);
  pinMode(DCF77PIN, INPUT);
  pinMode(13, OUTPUT);
  Serial.println("0ms       100ms     200ms     300ms     400ms 
500ms     600ms     700ms     800ms     900ms     1000ms    1100ms 
1200ms");
}

void loop() {
  int sensorValue = digitalRead(DCF77PIN);
  **if (sensorValue==1 && prevSensorValue==0) { Serial.println("");   }
  digitalWrite(BLINKPIN, sensorValue);
  Serial.print(sensorValue);
  prevSensorValue = sensorValue;
  delay(10);
}

Bei mir sind die Zyklen aber nicht 1 Sekunde lang sondern schwanken gut 
100 ms darum, ausser ich tausche in ** die 1 mit der 0.
Dann kommt sowas raus:
111111111111111111111111111111111111111111111111111111111111111111111111 
1111111100000000000000000000
Bei ihm sind die 1 und 0 dann allerdings vertauscht.
http://thijs.elenbaas.net/2012/04/arduino-dcf77-radio-clock-receiver-signal/

von René H. (Gast)


Lesenswert?

Ich habe nicht geschaut was der AM Receiver liefert, aber ein NPN am 
Ausgang lässt auf invertiertes Signal schliessen. Sonst mach mal ein LED 
ran mit 10k Pullup (Opencollector) dann solltest du das schnell sehen.

Grüsse,
René

von Auch gast (Gast)


Lesenswert?

Signal invertieren, dann klappt's

von Manfred (Gast)


Lesenswert?

Ole schrieb:
> es mit keiner Library funktioniert, die ich probiert habe.

Was hat des Empfangsmodul mit der Library zu tun? Das Teil hat einen 
ordentlichen Takt auszugeben, alle Sekunde mit 0,1 oder 0,2 Sekunden 
Länge - kann man mit einer LED testen.

> Es kommt mir so vor als wäre das Signal
> von dem neuen Modul invertiert zu dem alten.

Au man, ein Arduino aus dem Bilderbuch, Library kopieren, Shields 
aufstecken und keinerlei Denkvermögen. Du hast zwei Module, da kann man 
binnen weniger Minuten gucken, ob das Signal andersherum ist.

von Harry D. (harry_d)


Lesenswert?

Die Signalinvertierung ist in der Lib von Thijs vorgesehen.
Rufe einfach das DCF77 Objekt auf mit

DCF77 DCF = DCF77(DCF77PIN, 0, LOW);

LOW sorgt für die Invertierung, (HIGH oder weglassen = nicht-invertiert)

von Stefan F. (Gast)


Lesenswert?

Der Typische Arduino User scheint neuerdings nicht nur auf Grundlagen zu 
verzichten, sondern auch noch auf das Lesen der Dokumentation.

Sowohl in der Beschreibung der Library als auch in der Beschreibung ddes 
Funkmoduls wird auf die eventuell vorhandene Invertierung mitsamt 
Lösungsvorschlag hingewiesen!

von Harald W. (wilhelms)


Lesenswert?

Manfred schrieb:

> Au man, ein Arduino aus dem Bilderbuch, Library kopieren, Shields
> aufstecken und keinerlei Denkvermögen.

Gibts für das Denken denn noch kein Denkshield mit passender
Libary? Dann würde ich reklamieren und zuückschicken. :-)

von Ole (Gast)


Lesenswert?

René H. schrieb:
> Ich habe nicht geschaut was der AM Receiver liefert, aber ein NPN
> am
> Ausgang lässt auf invertiertes Signal schliessen. Sonst mach mal ein LED
> ran mit 10k Pullup (Opencollector) dann solltest du das schnell sehen.
>
> Grüsse,
> René

Hab die LED jetzt von GND auf den Signal Ausgang gelegt, und die blinkt 
schön im Sekundentakt mit 0.1-0.2s Pause. Das bestätigt jetzt, dass das 
Signal invertiert ist oder?

Auch gast schrieb:
> Signal invertieren, dann klappt's

Ich habe auch schon versucht das Signal Hardware mässig zu invertieren, 
aber da ich nur begrenzte Materialien zur Verfügung habe und nicht weiss 
welche Sachen äquivalent zueinander sind lief auch das nicht so 
erfolgreich. Außerdem fände ich eine Software Lösung attraktiver und ist 
wahrscheinlich auch einfacher.

Manfred schrieb:
> Ole schrieb:
>> es mit keiner Library funktioniert, die ich probiert habe.
>
> Was hat des Empfangsmodul mit der Library zu tun? Das Teil hat einen
> ordentlichen Takt auszugeben, alle Sekunde mit 0,1 oder 0,2 Sekunden
> Länge - kann man mit einer LED testen.
>
>> Es kommt mir so vor als wäre das Signal
>> von dem neuen Modul invertiert zu dem alten.
>
> Au man, ein Arduino aus dem Bilderbuch, Library kopieren, Shields
> aufstecken und keinerlei Denkvermögen. Du hast zwei Module, da kann man
> binnen weniger Minuten gucken, ob das Signal andersherum ist.

Das Teil gibt einen ordentlichen Takt aus aber den kriege ich leider 
nicht ausgewertet. Ich bin mir ziemlich sicher, dass das Signal 
invertiert ist nur leider hilft mir das nicht.

Harry D. schrieb:
> Die Signalinvertierung ist in der Lib von Thijs vorgesehen.
> Rufe einfach das DCF77 Objekt auf mit
>
> DCF77 DCF = DCF77(DCF77PIN, 0, LOW);
>
> LOW sorgt für die Invertierung, (HIGH oder weglassen = nicht-invertiert)

Habe ich grade probiert, funktioniert leider auch nicht aber danke. Ich 
finde es sehr schwer nach zu vollziehen was die Library macht/ woran es 
denn grade scheitert. Ich hatte 1 Semester Informatik und bei Eclipse 
konnte man da wenigstens ein bisschen mit dem Debugger verstehen was 
grade passiert, aber sowas geht bei Libraries nicht oder?

Stefan U. schrieb:
> Der Typische Arduino User scheint neuerdings nicht nur auf
> Grundlagen zu
> verzichten, sondern auch noch auf das Lesen der Dokumentation.
>
> Sowohl in der Beschreibung der Library als auch in der Beschreibung ddes
> Funkmoduls wird auf die eventuell vorhandene Invertierung mitsamt
> Lösungsvorschlag hingewiesen!

Ich habe weder in der Beschreibung der Library noch in der von dem 
Funkmodul irgendetwas dazu gefunden, vielleicht habe ich aber auch 
einfach nicht genau verstanden was genau da stand. Also wenn du mir 
zeigen könntest, was ich nochmal lesen sollte, sehr gerne.

Sind Arduinos und deren User der running Gag der Microcontroller 
Gemeinde, weil Arduinos einen einfachen Einstieg bieten und viele dann 
mit Halbwissen hier rum rennen oder was geht hier ab? Ich hatte leider 
nur ein Semester Informatik und 1 Semester Elektrotechnik, aber wenn ich 
alles studieren und verstehen wollte, was mich interessiert würde ich 
die Uni wahrscheinlich nicht wieder verlassen.

von Stefan F. (Gast)


Lesenswert?

Ob das Signal invertiert ist kommt darauf an, was du denn für die 
normale Polarität hälst. Beide Varianten sind nämlich üblich.

> Sind Arduinos und deren User der running Gag der Microcontroller Gemeinde

Ja, das liegt an den auffälligen fragen, die sie hier immer wieder 
stellen.

> Ich habe weder in der Beschreibung der Library noch in der von dem
> Funkmodul irgendetwas dazu gefunden,

Zur Library hat jemand weiter oben etwas geschrieben. Ich wiederhole 
nochmal:

> Die Signalinvertierung ist in der Lib von Thijs vorgesehen.
> Rufe einfach das DCF77 Objekt auf mit
> DCF77 DCF = DCF77(DCF77PIN, 0, LOW);
> LOW sorgt für die Invertierung, (HIGH oder weglassen = nicht-invertiert)

In der aktuellen Beschreibung von ELV steht tatsächlich nichts mehr 
drin. Ich hatte vor etwa 15 Monaten eins gekauft, da war die Doku noch 
doppelt so umfangreich. Das Modul ist immer noch das selbe, nur nicht 
die Doku dazu. Wie ärgerlich.

von Manfred (Gast)


Lesenswert?

Ole schrieb:
> Sind Arduinos und deren User der running Gag der Microcontroller
> Gemeinde, weil Arduinos einen einfachen Einstieg bieten und viele dann
> mit Halbwissen hier rum rennen oder was geht hier ab?

Hier sind mehrere Arduino-Anwender im Forum und werden nicht belästert.

Der einfache Einstieg ist eine gute Sache, übel sind die Anwender, die 
unwillig sind, eigene Grundlagen zu erarbeiten. Ich habe in meinen 
Aufbauten viel Zeit mit Fehlersuche verbracht, war aber meistens 
schneller am Ziel, als hier irgendwelche Problemchen zu posten.

> Ich hatte leider nur ein Semester Informatik
> und 1 Semester Elektrotechnik, aber wenn ich
> alles studieren und verstehen wollte, was mich interessiert würde ich
> die Uni wahrscheinlich nicht wieder verlassen.

Na hoffentlich hast Du die Uni verlassen und einen Weg eingeschlagen, 
der sich mehr auf die Hände fokussiert.

Bei Dir vermisse ich eine logische Vorgehensweise. Du hast Eingangs eine 
simples Programm gepostet, wo per serial.print die Bits ausgegeben 
werden. Das DCF-Protokoll aka Datenmuster lässt sich im Internet klaglos 
finden.

Ein Datenmuster 
"11111111111111111111111111111111111111111111111111111111111111111111111 
1
1111111100000000000000000000" ist ganz sicher unsinnig, also stimmt 
bereits vorne beim Empfang etwas nicht.

von Marco H. (damarco)


Lesenswert?

Er tastet das Signal ab, die Serial Ausgabe zeigt den Pegel nur Zeit 
bezogen an. Die Ausgabe deutet darauf hin das dass Signal invertiert 
werden muss. Die eins muss 100ms bzw 200ms vorhanden sein. Der Abstand 
zwischen der ersten 1 sollte genau 1sec.

Viele Empfänger verschleißen den Impuls so das dieser nicht mehr 
wirklich 100ms,200ms oder 1000ms ist. Deswegen lässt sich auch hier ein 
gewisses Fenster einstellen.
1
#define DCFRejectionTime 700  // Pulse-to-Pulse rejection time. 
2
#define DCFRejectPulseWidth 50  // Minimal pulse width
3
#define DCFSplitTime 180    // Specifications distinguishes pulse width 100 ms and 200 ms. In practice we see 130 ms and 230
4
#define DCFSyncTime 1500    // Specifications defines 2000 ms pulse for end of sequence

vermutlich passt das zu seinen Empfänger nicht mehr ganz so gut womit 
die Auswertung nicht mehr funktioniert.

Anhand der Serial Ausgabe kann man ungefähr abschätzen ob diese 
Parameter passen.

Wie immer mit vorgefertigten Code man muss sich damit beschäftigen und 
auch das Prinzip verstehen ;) und wenn dir das gelungen ist kannst du 
durch mit zählen das Signal sogar auswerten.

: Bearbeitet durch User
von Hansi (Gast)


Lesenswert?

Hallo,
weil der DCF-Empfängers einen Open-Collector-Ausgang hat braucht man 
eine Versorgungsspannung.

Ändere deshalb bitte im Programm die Zeile:
pinMode(DCF77PIN, INPUT);
in
pinMode(DCF77PIN, INPUT_PULLUP);
ab.

Gruß Hansi

von Ole (Gast)


Lesenswert?

Harry D. schrieb:
> Die Signalinvertierung ist in der Lib von Thijs vorgesehen.
> Rufe einfach das DCF77 Objekt auf mit
>
> DCF77 DCF = DCF77(DCF77PIN, 0, LOW);
>
> LOW sorgt für die Invertierung, (HIGH oder weglassen = nicht-invertiert)

Hat jetzt doch noch funktioniert. Vielen vielen Dank dafür. Woher 
wusstest du das denn? Weil ich hab das echt nirgendwo gesehen.

von Harry D. (harry_d)


Lesenswert?

ab und zu in den Quelltext solcher Librarys schauen.
Hier speziell: DCF77.h am Ende, hinter
public:

von Jörg R. (joggel67)


Angehängte Dateien:

Lesenswert?

Ole schrieb:
> Hallo,
> ich habe mir das DCF77 Modul von ELV geholt, nachdem ich bei einem
> schlecht verarbeitetem von ebay immer wieder Probleme mit dem Empfang
> hatte. Das neue Modul hat meistens ziemlich guten Empfang allerdings hat
> es mit keiner Library funktioniert, die ich probiert habe. Es kommt mir
> so vor als wäre das Signal von dem neuen Modul invertiert zu dem alten.
> Das Modul soll an einem Arduino Uno laufen und eine Nixie Uhr auf dem
> neuesten Stand halten. Die Nixie Uhr läuft auch schon mit einem RTC.
>

Hi Ole,

vergesse mal bitte ganz schnell was hier geschrieben wurde so von wegen 
Library suchen oder umschreiben.
Auch wenn du dein Problem schon selbst gelöst hast und eine Lösung 
geboten wurde, hier noch eine Lösung.

Ich bin mit Sicherheit KEIN Programmierer. Ehrlich gesagt kenne ich 
mich in dieser Materie auch keineswegs großartig aus. Aber ich hatte das 
gleiche Problem wie du.
Aus lauter Verzweiflung habe ich mir sogar noch ein Modul von Conrad 
geholt, der hat zwei Ausgänge, einen mit invertiertem und einen ohne 
invertiertem Signal.
Ich hatte ein einfaches Sketch, habe zuerst den ELV Empfänger dran und 
nichts kam raus außer Signale....
Conrad Modul dran und das Ding ging, sehr seltsam.....

Nimm einfach den angehängten Sketch, dieser wurde schon so umgeschrieben 
dass damit ein ELV Modul läuft.
Der Witz an diesem Sketch ist folgender Eintrag:
DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT, false); // false wird 
gesetzt bei invertiertem Signal ,z.B ELV-Modul. Conrad hat 
invertiertes und nicht invertiertes Signal. Nicht invertiertes Signal 
wird mit true aktiviert.

Ganz einfach, true und false. Das hat mich Stunden an Nerven gekostet.
Ich hab diesen Sketch mit beiden Modulen getestet, sogar das Conrad 
Modul mit und ohne invertiertem Signal, jeweils dementsprechend 
abgeändert.

Was auch wichtig beim ELV Modul ist: Mindestens ein 10k PullUp 
Widerstand, besser noch 20k. Auch beim Conrad Modul, ich habe aktuell 
bei beiden Modulen 20k und einen 100nF Kerko zwischen Signal und GND!

Den Rest des Sketches musst du deinem Programm halt dementsprechend 
anpassen.

: Bearbeitet durch User
von Dominik (Gast)


Lesenswert?

Jörg R. schrieb:
> Was auch wichtig beim ELV Modul ist: Mindestens ein 10k PullUp
> Widerstand, besser noch 20k. Auch beim Conrad Modul, ich habe aktuell
> bei beiden Modulen 20k und einen 100nF Kerko zwischen Signal und GND!

Das Datenblatt vom DCF-2 (ELV) sagt 1k bis 500k, der verbaute BC848 darf 
max. 200mA. Demnach bezieht sich der 1k wohl auf 15V UB +25% Sicherheit.
Also sind 10 oder 20k eine gute Wahl, es sei denn die Stromversorgung 
erfolgt per Akku oder Batterie, dann wird man sicher noch etwas höher 
gehen wollen.

Der letzte Satz ist etwas missverständlich: gemeint ist sicher 20k 
zwischen Signal und UB, Kerko zwischen Signal und GND.

Frage hierzu: Ist das 1Hz Signal Deiner Erfahrung nach so schlecht, dass 
es hier eines Kondensators bedarf?
(Wobei ein Tau von 2ms beim DCF ja nicht stört)

Gruß Dominik

von Holm T. (Gast)


Lesenswert?

Ole schrieb:
[..]
> Sind Arduinos und deren User der running Gag der Microcontroller
> Gemeinde, weil Arduinos einen einfachen Einstieg bieten und viele dann
> mit Halbwissen hier rum rennen oder was geht hier ab?

Die Leute haben ein Problem mit dummen und faulen Leuten, da scheint es 
in der Arduino-Ecke Einige zu geben.

> Ich hatte leider
> nur ein Semester Informatik und 1 Semester Elektrotechnik, aber wenn ich
> alles studieren und verstehen wollte, was mich interessiert würde ich
> die Uni wahrscheinlich nicht wieder verlassen.

Nee..ne? Ein Semester Informatik und ein Semester Elektrotechnik...nur?
Was hast Du studiert? Die Studentenkneipe oder die Weiber?

Für dich scheint der Fall klar zu sein, Du brauchst entweder ein 
Negator-Shield oder einen Negator-Sketch..oder wie das heißt...

Gruß,

Holm

von carlos (Gast)


Lesenswert?

gracias

Beitrag #6235025 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.