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?
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)
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?
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.
Noch mal eine Frage. Ich hab folgenden Code verwendet:
/*
* 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?