Go Down

Topic: Wie Empfangskontrolle für DCF77 auf LCD Display darstellen? (Read 7040 times) previous topic - next topic

-Micky

Wie kann man eine Empfangskontrolle für DCF77, neben Zeit und Datum,  auf einem LCD Display darstellen?


Micky

sth77

Am einfachsten ist es wohl, sämtliche übertragene Prüfbits auszuwerten und die neu ermittelte Zeit mit der Zeit der letzten Minute zu vergleichen. Wenn das stimmig ist, ist auch Empfang da.
Du könntest auch testen, ob irgendwelche kurzen Peaks im Signalverlauf auftreten, je nach Filtermethode in der Software zeigen dir diese an, dass der Empfang schlecht ist.
Mein verwaister Arduino-Blog: http://www.sth77.de/ - letzter Eintrag: Diamex-ISP in der irgendwann mal aktuellen Arduino-IDE 1.6.4

Enam

#2
Nov 26, 2013, 03:03 am Last Edit: Nov 26, 2013, 04:23 pm by Enam Reason: 1
Empfangskontrolle im Sinne, dass das Signal entschlüsselt wurde, oder dass überhaupt ein Signal da ist?

-Micky

Das überhaupt ein Signal da ist. Wie bei den Funkuhren, wo zum Beispiel ein Funkturm angezeigt wird wenn die Uhr Empfang hat.


Micky

uwefed

Einfach auf das Ausgangssignal des Empfängers triggern und das Symbol für 2 bis 3 Sekunden im Display belassen. Bei jedem neuen Impuls des DCF77 die 3 Sekunden neu starten.
Grüße Uwe

sth77


Einfach auf das Ausgangssignal des Empfängers triggern und das Symbol für 2 bis 3 Sekunden im Display belassen. Bei jedem neuen Impuls des DCF77 die 3 Sekunden neu starten.

Damit stellt man aber nur fest, dass etwas am Ausgang des DCF-Moduls passiert. Und das hat häufig nichts mit dem eigentlichen Funksignal zu tun, sondern mit daneben liegenden Schaltnetzteilen, Invertern von Kaltlichtkathoden etc..
Mein verwaister Arduino-Blog: http://www.sth77.de/ - letzter Eintrag: Diamex-ISP in der irgendwann mal aktuellen Arduino-IDE 1.6.4

Enam

#6
Nov 26, 2013, 04:27 pm Last Edit: Nov 26, 2013, 04:38 pm by Enam Reason: 1
Afair, kommt das DCF77 Signal regelmäßig (sekündlich?)
Wenn die empfangenen Signale regelmäßig angezeigt werden, ist die wahrscheinlichkeit hoch, dass es das DCF77 Signal ist.


Ob jetzt Störungen die Entschlüsselung behindern müßte man anders feststellen.
Ob überhaupt ein Signal ankommt sollte gut erkennbar sein.

Vielleicht helfen die Infos hier weiter:
http://arduino-hannover.de/2012/06/14/dcf77-empfanger-mit-arduino-betreiben/

Quote

  Hier hatte ich ein ernstes Problem. Zunächst rauschten bei mir die 0 und 1 nur so durch. Also nicht 2 Pegeländerungen pro Sekunde sondern eher so 3-6. Des Rätsels Lösung: Ich hatte den Arduino über den USB Anschluss mit Strom versorgt, zwar über einen Hub mit eigenen Netzteil, aber letztendlich über das PC Netzteil. Offenbar sind in den 5V des PC Netzteils so starke Störungen, die den Empfang unmöglich machen. Nach dem ich das Arduino Netzteil eingesteckt hatte, hab ich wie erwartet die 2 Pegeländerungen pro Sekunde bekommen.


uwefed


Afair, kommt das DCF77 Signal regelmäßig (sekündlich?)

Ja, fast. Der Impuls für die 59. Sekunde fehlt.
Besserungsvorschlag.
Wenn nach ca 2  Sekunden ein Impuls kommt und kein oder max 1 Impuls dazwischen ist dann ist der Empfang gut.   
Grüße Uwe

-Micky

Ist ja alles toll. Wie bitte programmiert man nun sowas?


Micky

Enam

#9
Nov 27, 2013, 03:30 pm Last Edit: Nov 27, 2013, 03:34 pm by Enam Reason: 1
Das war aber nicht deine ursprüngliche Frage...

Hat der link dich weiterbringen können?

Was genau möchtest du wie und wann darstellen?
Wie soll das auf dem LCD aussehen?

Was hast du schon, was brauchst du noch?

MfG
Enam

-Micky

#10
Nov 27, 2013, 06:42 pm Last Edit: Nov 29, 2013, 12:44 pm by -Micky Reason: 1
Ist habe eine funktionierende DCF77 Uhr. Nur würde ich halt ein Zeichen auf dem Display haben wollen was anzeigt das Empfang da ist.

Ich nehme dieses Programm.

Code: [Select]
/**
* Example sketch for the Funkuhr Arduino library
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Für I2C LCD Display

LiquidCrystal_I2C lcd(0x27,16,2);  // I2C LCD Adresse auf 0x20 gesetzt, 16 Zeichen / 2 Zeilen LCD

//#define DS1307_I2C_ADDRESS 0x68                          // I2C Adresse
#include "Funkuhr.h"

Funkuhr dcf(0, 2, 13, false);
struct Dcf77Time dt = { 0 };

uint8_t curSec;


void dumpTime(void)
{
Serial.println("DCF77 Time");

// Print date
lcd.print(" ");
lcd.setCursor(3, 0);
if(dt.day < 10)
lcd.print("0");
lcd.print(dt.day, DEC);
lcd.print(".");

if(dt.month < 10)
lcd.print("0");
lcd.print(dt.month, DEC);
lcd.print(".");

if(dt.year == 0)
{
lcd.print("000");
}
else
{
lcd.print("20");
}

lcd.print(dt.year, DEC);

if(dcf.synced())
{
lcd.print(" ");
}
else
{
Serial.println(" ");
Serial.print("~");
}

// Print Time
lcd.setCursor(4, 1);
if (dt.hour < 10)
lcd.print("0");

lcd.print(dt.hour, DEC);
lcd.print(":");

if (dt.min < 10)
lcd.print("0");

lcd.print(dt.min, DEC);
lcd.print(":");

if (dt.sec < 10)
lcd.print("0");

lcd.print(dt.sec, DEC);

Serial.println(" ");
}


void setup(void)
{
// LCD I2C Initilaisieren und Hintergrundbeleuchtung aktivieren
  lcd.init();
  lcd.backlight();                  
 
 Wire.begin();                                      // I2C-Bus einrichten
 
 lcd.init();                                        // LCD-Anzeige initialisieren
 lcd.clear();
 
 Serial.begin(9600);
dcf.init();
}


void loop(void)
{
dcf.getTime(dt);

if(dt.sec != curSec)
{
dumpTime();
}

curSec = dt.sec;
}


Die DCF77 Uhr ist von Conrad. Das ganze läuft mit einem UNO.


Micky

-Micky

Nun funktioniert es. Wird immer 0 und 1 im Wechsel dargestellt. 

Code: [Select]
/**
* Example sketch for the Funkuhr Arduino library
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Für I2C LCD Display

//Für Empfanganzeige
#define DCF77PIN 2
unsigned char signal = 0;
unsigned char buffer;

LiquidCrystal_I2C lcd(0x27,16,2);  // I2C LCD Adresse auf 0x20 gesetzt, 16 Zeichen / 2 Zeilen LCD

#include "Funkuhr.h"

Funkuhr dcf(0, 2, 13, false);
struct Dcf77Time dt = { 0 };

uint8_t curSec;

void dumpTime(void)
{
Serial.println("DCF77 Time");

// Print date
lcd.print(" ");
lcd.setCursor(3, 0);
if(dt.day < 10)
lcd.print("0");
lcd.print(dt.day, DEC);
lcd.print(".");

if(dt.month < 10)
lcd.print("0");
lcd.print(dt.month, DEC);
lcd.print(".");

if(dt.year == 0)
{
lcd.print("000");
}
else
{
lcd.print("20");
}

lcd.print(dt.year, DEC);

if(dcf.synced())
{
lcd.print(" ");
}
else
{
Serial.println(" ");
Serial.print("~");
}

// Print Time
lcd.setCursor(4, 1);
if (dt.hour < 10)
lcd.print("0");

lcd.print(dt.hour, DEC);
lcd.print(":");

if (dt.min < 10)
lcd.print("0");

lcd.print(dt.min, DEC);
lcd.print(":");

if (dt.sec < 10)
lcd.print("0");

lcd.print(dt.sec, DEC);

Serial.println(" ");
}

void setup(void)
{
  //Für Empfanganzeige
  pinMode(DCF77PIN, INPUT);


// LCD I2C Initilaisieren und Hintergrundbeleuchtung aktivieren
   lcd.init();
   lcd.backlight();                   
 
  Wire.begin();                                      // I2C-Bus einrichten
 
  lcd.init();                                        // LCD-Anzeige initialisieren
  lcd.clear();
 
  Serial.begin(9600);
dcf.init();
}


void loop(void)
{
//Für Empfanganzeige
signal = digitalRead(DCF77PIN);
if (buffer != signal) {
lcd.setCursor(0, 1);
lcd.print(signal);
buffer = signal;
}
 
dcf.getTime(dt);

if(dt.sec != curSec)
{
dumpTime();
}

curSec = dt.sec;
}


Micky

-Micky

Wie kann ich eigentlich andere Zeichen als 0 oder 1 verwenden?


Micky

sschultewolter

Code: [Select]
lcd.print(signal);
Code: [Select]
if(signal == true) lcd.print("Signal");
else lcd.print("Kein Signal");
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

-Micky

Funktioniert soweit, nur sobald man eine Empfangskontrolle mit einbaut, neigt die DCF77 zum nachgehen und hat einen schlechteren Empfang.

Woran kann denn das nun wieder liegen?


Micky

Go Up