Forum: Mikrocontroller und Digitale Elektronik RTC in Beaglebone durch DCF77 - Problem mit dem Signal


von Majd (Gast)


Lesenswert?

Hi Leute,

um eine RTC in meinem BBB zu haben, will ich das Zeitsignal aus einer 
DCF77 bekommen und dekodieren. Problem dabei:

Ich verbinde die DCF-Empfängerplatine (GND VCC 3,3V UART4). Durch ein 
Skript zum Dekodieren bekomme ich fehlerhafte Ergebnisse. Grund dafür 
ist, dass das Signal das ich bekomme kein binäres Signal ist:

screen /dev/ttyO4 gibt mir Wörter ab und nicht eine Reihe von 1 und 0.
Wie z.B. : ôâôôôôôâòá

Danke !

von Jim M. (turboj)


Lesenswert?

Das IST ein binäres Signal. Screen kann Dir das nur nicht korrekt 
anzeigen, denn das will ASCII.

Schau Dir mal an wie man binäre Daten einliesst und in lesbare Zeichen 
konvertiert.

von Majd (Gast)


Lesenswert?

Danke für deine Rückmeldung Jim. Ich werde es versuchen.

Ich habe es auch anders versucht, indem ich den Ausgang des UART Pins in 
einer Variable eintrage und sie dann printe durch

ser = serial.Serial(port = "/dev/ttyO4")
...
old_state = ser.read(59)
print(old_state)
...
--> print(ser.read(10))


Das hat auch das gleiche wie screen abgegeben.

Danke für die Unterstützung. Bin neulich in dem Bereich eingestiegen...

von Sauger (Gast)


Lesenswert?

Nabend,

Info zum DCF77 Empfänger (Typ) wäre hilfreich

MfG

von Guido L. (guidol1970)


Lesenswert?

Majd schrieb:
> Ich verbinde die DCF-Empfängerplatine (GND VCC 3,3V UART4). Durch ein
> Skript zum Dekodieren bekomme ich fehlerhafte Ergebnisse.

Das Problem ist, dass so ein normaler DCF77 Empfaenger keine seriellen 
Daten im Format einer RS232 oder serial-TTL ausgibt, sondern nur eine 
Art 0 und 1 indem es digitale High und Low Signale in entsprechender 
Laenge ausgibt.

D.h. man braucht anstatt eines seriellen Ports einen freien GPIO, den 
man auf digital und Eingang stellt und dann den Wert (0 oder 1) ausliest 
und die Laenge misst.

Bis jetzt kenne ich zusaetzlich nur Bausteine, die DCF77 selber 
dekodieren und dann seriell die Uhrzeit ausgeben.

Ausserdem gibt es meist Probleme, wenn der BB (oder sonstige Rechner) 
die Spannung fuer den DVF77 Empfaenger liefern, weil dann das Signal 
gestoert empfangen wird.

von Teo D. (teoderix)


Lesenswert?

Guido L. schrieb:
> Das Problem ist, dass so ein normaler DCF77 Empfaenger keine seriellen
> Daten im Format einer RS232 oder serial-TTL ausgibt, sondern nur eine
> Art 0 und 1 indem es digitale High und Low Signale in entsprechender
> Laenge ausgibt.

https://de.wikipedia.org/wiki/DCF77#Zeitinformation

von Majd (Gast)


Lesenswert?

Guido L. schrieb:

> D.h. man braucht anstatt eines seriellen Ports einen freien GPIO, den
> man auf digital und Eingang stellt und dann den Wert (0 oder 1) ausliest
> und die Laenge misst.

Danke Guido.. Wie sind die Werte eines gpios auszulesen? Am meisten dass 
es sich hier nicht nur um ein Bit sondern um >58 handelt?

wDanke im Voraus

von Joachim B. (jar)


Lesenswert?

Majd schrieb:
> Wie sind die Werte eines gpios auszulesen?

angenommen positive Logik, Sekunden Puls ist 100ms oder 200ms für 1/0

1. hi oder low feststellen
2. die Länge von hi und von low ermitteln
3. die Abstände von hi zu hi ermitteln

wenn alles passt auswerten!

Beispielprogramme und Erklärung gibts doch oft im Netz

https://de.wikipedia.org/wiki/DCF77
http://www.hopf.com/pics/dcf77-time-code-format.jpg
https://www.ptb.de/cms/ptb/fachabteilungen/abt4/fb-44/ag-442/verbreitung-der-gesetzlichen-zeit/dcf77.html
https://www.elv.de/elektronikwissen/das-dcf77-zeitsignal.html

Beitrag "Re: DCF77 Code von Peter Dannegger?"

von G. H. (schufti)


Lesenswert?

die Referenzimplementierung des ntp Protokolls
(https://www.eecis.udel.edu/~mills/ntp/html/refclock.html#list)
bietet unter Typ8 sogar mehrere RAWDCF Modelle an, die eine breite 
Auswahl von Modulen unterstützen (Eingang, div. Ausgänge in bestimmten 
Pegeln zur Versorgung). Natürlich muß man sich einlesen um sein 
"Spezialmodul" zuordnen zu können oder eben pasend zu adaptieren.
Läuft der ntp-demon mal, ist die lokale Zeit gesichert.

von Guido L. (guidol1970)


Lesenswert?

Majd schrieb:
> Danke Guido.. Wie sind die Werte eines gpios auszulesen? Am meisten dass
> es sich hier nicht nur um ein Bit sondern um >58 handelt?

Fuer den Beaglebone kann ich es Dir nicht direkt schreiben...
Beim GPIO muesstest Du dann die Wechsel und Laenge messen/pruefen, denn 
DCF77 hat auch eine Pruefsummem und am Anfang der Minute eine Pause, die 
muss man erkennen und dann im Programm mitzaehlen.

Alternativ kann man eine Universal-Moeglichkeit nutzen und einen Arduino 
beauftragen, der dem BBB dann die Daten gibt:
http://ahsoftware.de/dcf77-hid-usb-rtc/

von btp (Gast)


Lesenswert?

Mit einem negierten DCF Signal auf dem Rx Pin einer UART ging das doch 
auch?!
Die Bitrate muß auf ~50 BPS konfiguriert werden, IIRC.

von Majd (Gast)


Lesenswert?

btp schrieb:
> Mit einem negierten DCF Signal auf dem Rx Pin einer UART ging das
> doch
> auch?!
> Die Bitrate muß auf ~50 BPS konfiguriert werden, IIRC.

Nein .. es hat mit dem UART nicht geklappt. Mit den Gpios leider auch 
nicht. Hatte als signal nul "NULLen" .

von btp (Gast)


Lesenswert?

ASCII oder so darf man dann aber auch nicht erwarten.

Bei einem 100ms low Puls und 50bps sollte dann die Bits 0 bis ~3 low 
sein. (LSB first!)

Bei einem 200ms sollte alle Bits  low sein.

von G. H. (schufti)


Lesenswert?

alternativ läßt sich eventuell auch das Projekt vom RasPi auf BBB 
übertragen:

http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-DCF77/index.html

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.