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/
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é
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.
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)
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!
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. :-)
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.
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.
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.
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.
#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.
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
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.
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.
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
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