Go Down

Topic: Funkuhr DCF77 (Read 2232 times) previous topic - next topic

komika

Nov 03, 2012, 04:45 pm Last Edit: Nov 08, 2012, 09:14 pm by komika Reason: 1
So ich hab jetzt meine Funkuhr getestet: http://www.machzin.de/portfolio/funkuhr-mit-arduino-und-dem-dcf-77-modul/ nun will ich das Teil auf eine Platine löten. Wie ich den Controller mit Minimalausstattung draufkriege weiß ich schon (Quarz, Kondensatoren, etc). Nun noch ein paar Fragen:

LEDs hab ich mir diese geholt: http://www.ebay.de/itm/260881373590?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649#ht_3655wt_906 , die haben 12 Pins und da ich ja die Analogen Eingänge des Atmega 328 auch als Digital Ein-/Ausgänge nutzen kann, brauch ich ja keine Porterweiterung, bzw. Schieberegister (wenn ich nur die Uhrzeit anzeigen lassen will)?
Mit welcher Frequenz steuert man die LEDs an (Multiplexing)?
Woher bekomme ich 3,3 Volt für das DCF77 Modul? Spannungsteiler?

mfg knuppel

uwefed

#1
Nov 04, 2012, 01:09 am Last Edit: Nov 04, 2012, 01:11 am by uwefed Reason: 1
Sie 3,3V bekommst Du vom Arduino vom PIN 3,3V. bist Du sicher daß das DCF-Modul nicht mit 5V funktioniert?

Die Pinbelegung des Displays:
http://www.aplomb.nl/Niels_skn/7-Segment_QRD%20Niels.pdf Seite 35 Display 410561X. Laut dieser Beschreibung hat das Modul keine Doppelpunkte in der Mitte. Das kannst Du aber mit einem Multimeter kontrollieren.

Du kannst das Display mit dem Arduino ansteuern, Du brauchst aber 4 PNP- Transistoren (oder einen A2981) um die Anoden des Displays treiben zu können (den Gesamtstrom von 7 Segmenten kann Arduino nicht bringen).

Leider kann ich Dir keinen MAX7219 raten da dieser ein Display mit gemeinsamer Kathode braucht.

Ich rate Dir eine RTC. Der Empfang des DCF-Signals ist alles andere als einfach, sicher und unterbrechungsfrei. Oft durch Störungen hast Du keinen Empfang. Da kannst Du die Zeit aus dem RTC holen und bei DCF-Empfang die RTC synchronisieren.

Die 4 Stellen mußt Du multiplexen. Die Wiederholzeit sollte über 30Hz besser 60Hz liegen damit sie nicht flimmern)

Grüße Uwe




komika

Das Datenblatt des DCF77 sagt 3,3 Volt. Die 3,3 Volt hab ich am Arduino Board, wenn der Controller aber auf ne Platine kommt hab ich keine 3,3 V mehr.

uwefed

Diese Kleinigkeit ist mir entfallen.

Ein Spannungsteiler mit 2 Widerständen ist eine schlechte Idee, weil die Spannung abhängig vom Strom ist und der Strom, den eine Schaltung braucht, nicht konstant ist.

Du brauchst einen Spannungsstabilisator, am besten eine Low-Dropout-Version.
Willst Du einen im SMD Gehäuße?

Grüße Uwe

komika

SMD Gehäuse: Kommt drauf an ob man ihn schön löten kann, bzw. ob es keine andere alternative gibt.

Udo Klein

Für die paar Mikroampere die das DCF Modul zieht würde ich einen Widerstand und eine 3.3V Zenerdiode nehmen. Im Vergleich zu den LEDs ist der zusätzliche Stromverbrauch zu vernachlässigen. Falls Du 5V hast, dann müssen am Widerstand 1.78 abfallen, für 1mA also 1.78 kOhm. Da Du aber eher weniger brauchst --> 2kOhm + 3.3V Zenerdiode und gut.
Check out my experiments http://blog.blinkenlight.net

komika

Dankeschön für den Hinweis!

komika

Noch mal eine Frage. Ich hab folgenden Code verwendet:

Code: [Select]
/*
* 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"
int hours;
int minutes;
int digits;

 

#define DCF_PIN 13          // 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();
  Serial.println("Waiting for DCF77 time ... ");
  Serial.println("It will take at least 2 minutes until a first update can be processed.");
}

void loop() {
  delay(1000);
  time_t DCFtime = DCF.getTime(); // Check if new DCF77 time is available
  if (DCFtime!=0)
  {
    Serial.println("Time is updated");
    setTime(DCFtime);
  }
  digitalClockDisplay(); 

}

void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
printDigits(second());

  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}


Wie kann ich den Minuten und Stunden eine Variable zuweisen?

Bei den Stunden müsste es ja so gehen:

stunden=hours();

aber wie geht das bei den Minuten?

uwefed

minuten=(minute(); geht nicht?

komika

Leider nein, hab ich schon probiert.

uwefed


Leider nein, hab ich schon probiert.

Und wie geht es nicht? Fehlermeldung oder kein vernünftiger Wert?
Grüße Uwe

komika

Es wird eine null ausgegeben.

Bin mir jetzt grad nicht sicher...

komika

Sorry, hab den Link oben aktualisiert:

http://www.machzin.de/portfolio/funkuhr-mit-arduino-und-dem-dcf-77-modul/

Go Up