Forum: Mikrocontroller und Digitale Elektronik Datum und Uhrzeit auf Mikrocontroller


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jens (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie bekommt/behaltet/verarbeitet ihr eine Uhrzeit auf einem 
Mikrocontroller?
Es muss ja initial eine Uhrzeit übergeben werden. Oder per 
DCF-Empfänger?
Wenn ihr Strom weg nimmt, wie behaltet ihr eure Uhrzeit?

Wie macht ihr es, wenn ihr auch Datum haben wollt?

von Moko (Gast)


Bewertung
1 lesenswert
nicht lesenswert

von Karl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Uhr programmieren
nach Bedarf mit DCF77 sychronisieren

von Matze (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Meine Glaskugel ist gerade beim Kundendienst...

Kommt bisschen auf die Aufgabe an,
Wenn du einen uC hast der ewig im Sleep mode ist, kurz aufwacht und evtl 
Daten loggt o. ä und dannach wieder weiter schläft wäre ein DCF77 
bisschen Suboptimal. Beim 3231 ist die Zeit sofort verfügbar. Dafür muss 
man eben alle heiligen Zeiten das Ding mal nachstellen

Auch von den Kosten her, in der Bucht gibt's fertige Ds3231 oder deren 
Brüder für wenig Geld.

DCF77 sind etwas teurer...

von Nick M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich mach das per NTP und PCF2127.
Den PCF (mit internen XTal) bekommt man in weniger als 8 Stunden auf +/- 
2 Sekunden / Monat Abweichung. Nur mit NTP und etwas Software 
(hauptsächlich serverseitig).

von Alex D. (allu)


Bewertung
0 lesenswert
nicht lesenswert
Nach dem Einschalten holt sich der Mikrocontroller Datum und Uhrzeit von 
einem DFC77-Emfänger und stellt damit sein eigene Uhr. Danach wird der 
DCF-Empfänger abgeschaltet, da der Takt von einem 12,8Mhz-TCXO geliefert 
wird.
Strom weg, Uhrzeit und Datum weg.
Uhrzeit, Datum und Winter/Sommerzeit berechnet das Uhrenprogramm selbst.

von Nick M. (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Alex D. schrieb:
> Winter/Sommerzeit berechnet das Uhrenprogramm selbst.

Abgesehen davon, dass es keine Winterzeit gibt, ist es auch fraglich wie 
lange es noch eine Sommerzeit gint.

Man soll sich also sehr gut überlegen um man local time verwendet und 
nicht doch lieber UTC. Letzteres insb., wenn die Daten an einen Server 
gehen.

von Axel S. (a-za-z0-9)


Bewertung
0 lesenswert
nicht lesenswert
Jens schrieb:
> wie bekommt/behaltet/verarbeitet ihr eine Uhrzeit auf einem
> Mikrocontroller?

Verschieden. Je nachdem, wie die Umgebung aussieht.

Ohne Anspruch auf Vollständigkeit:

- gepufferte Echtzeituhr
- DCF77-Empfänger
- GPS-Empfänger
- Netzwerkverbindung zu NTP-Server
- den Nutzer nach der Zeit fragen ;)

von Alex D. (allu)


Bewertung
0 lesenswert
nicht lesenswert
Nick M. schrieb:
> Abgesehen davon, dass es keine Winterzeit gibt, ist es auch fraglich wie
> lange es noch eine Sommerzeit gint.

Da ich das Uhrenprogramm selbst geschrieben habe, ist eine Anpassung 
kein Problem.

Nick M. schrieb:
> Man soll sich also sehr gut überlegen um man local time verwendet und
> nicht doch lieber UTC. Letzteres insb., wenn die Daten an einen Server
> gehen

Was hilft mir im täglichen Leben UTC, wenn alle anderen sich nach der 
lokalen Uhrzeit richten?

von Wolfgang (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Nick M. schrieb:
> Abgesehen davon, dass es keine Winterzeit gibt, ist es auch fraglich wie
> lange es noch eine Sommerzeit gint.

Woher dieser Optimismus.

Die Aktivität unserer gewählten Volksvertreter hält sich diesbezüglich 
in sehr engen Grenzen.

von Schlaumaier (Gast)


Bewertung
-5 lesenswert
nicht lesenswert
Kauf dir in China ein DCF-77 Empfänger mit 2032 Schacht. Dann lebt die 
Uhr bis die Batterie leer ist.

Ebay-Artikel Nr. 283837128557

So was z.b. Da ist wie man sieht der Halter für die Batterie schon drin. 
Aber ich weiß nicht ob die ein Arduino starten kann. Hab ich nie 
benötigt. Ich frage das Modul nur ab, um die aktuelle saubere Zeit zu 
haben.

von Axel S. (a-za-z0-9)


Bewertung
3 lesenswert
nicht lesenswert
Schlaumaier schrieb:
> Kauf dir in China ein DCF-77 Empfänger mit 2032 Schacht. Dann lebt
> die Uhr bis die Batterie leer ist.
>
> Ebay-Artikel Nr. 283837128557

In welchem Universum ist das ein DCF77-Empfänger?

von Jacko (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Einfache Antworten gibt es (wie immer, wenn man keinem
Marktschreier aufsitzen will) nicht!

Mach dir eine Bewertungsliste!
- Wie genau muss die Zeit-/Datumsangabe sein?
- Wieviel Strom steht zur Verfügung?
- Wie schnell muss die die Zeit-/Datumsangabe mit welcher
  Genauigkeit zur Verfügung stehen.
- Wie schnell / wie oft kannst du korrigierend eingreifen?

Extremfälle sind die Energieverbrauchsklassen "ZZZ" und "AAA":

ZZZ:
Jederzeit (zur Not mit USV) verfügbar, Versorgung vom Netz,
DCF, GPS oder NTP für die Synchronisation und eine RTC
(z.B. DS3231) mit Backup-Batterie für Stromausfall (oder
Transport).

AAA:
Nur ganz selten von Hand eingeschaltet, Batteriebetrieb.
Dann müssen aber etwa 5 Minuten DCF-Empfang (0,1 mA * 1/12 h = 0,8 mAh),
oder 20 Minuten GPS-Empfang (z.B. 40 mA * 1/3 h = 13,3 mAh) abgewartet
werden, bis Datum und Zeit (bei gutem Empfang) exakt zur Verfügung
stehen.

Irgendwo dazwischen liegt DEINE optimale Lösung, die du dir aber
leider SELBST berechnen musst.

von Jacko (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Und für die SUPERSCHLAUEN Halbwissen-Verbreiter noch diese
Anmerkungen:

In den Sekunden 17 (LSB) und 18 (MSB) wird jede Minute (!) der
Abstand zwischen dcf-Zeit und utc (in Stunden) übermittelt.

Bei GPS hat man Wartezeiten im 12,5 Minuten-Raster, bis die
Zeitangabe alle Schaltsekunden seit Erstellung der Firmware
des GPS-Receivers berücksichtigt...
Im Extremfall hat man 12,5 Minuten lang eine Uhr, die etliche
Sekunden (auf < 1µs genau) "daneben" liegt.

von Bauform B. (bauformb)


Bewertung
0 lesenswert
nicht lesenswert
Alex D. schrieb:
> Nick M. schrieb:
>> Man soll sich also sehr gut überlegen um man local time verwendet und
>> nicht doch lieber UTC. Letzteres insb., wenn die Daten an einen Server
>> gehen
>
> Was hilft mir im täglichen Leben UTC, wenn alle anderen sich nach der
> lokalen Uhrzeit richten?

UTC, vor allem als reiner Sekundenzähler, ist einfach viel einfacher. 
Entscheidend ist, man muss eine UTC-Uhr niemals stellen. Wenn jemand im 
Sommer eine andere Zeit sehen möchte als im Winter, wird das einfach so 
ausgerechnet wie der Benutzer das mag.

Dass DCF die gesetzliche Zeit liefert, ist kein Problem. Man ignoriert 
einfach Datum, Wochentag und Stunde. Minuten und Sekunden alleine 
reichen ja, um die eigene RTC zu korrigieren. Wenn die erstmal eine 
halbe Stunde falsch geht, hat es sowieso keinen Zweck mehr. Überhaupt 
sollte man der eigenen RTC immer mehr vertrauen, als DCF- oder 
GPS-Empfängern (wegen der Differenz zwischen der GPS-Zeit und UTC). 
Profis trauen auch der NTP-Zeit nicht.

Auch wenn die RTC den Kalender kennt, kann sie genauso gut UTC zählen. 
Wie gesagt, man will sie nicht stellen. Sehr nützlich ist eine RTC, die 
man trimmen kann. Die muss man wirklich nie stellen, nur schneller oder 
langsamer laufen lassen.

Wenn jemand meint, er brauchte keine RTC mit Batterie, dann ist das ein 
anderes Thema. Entweder die Anwendung braucht die Uhrzeit oder nicht. 
Oder kann man irgendwo Minuten bis Stunden warten, bis alles 
funktioniert? Selbst mit NTP kann das passieren. Selbst mit einer guten 
GPS-Antenner auf dem Dach muss man eine Viertelstunde einkalkulieren.

Ich werde nie verstehen, warum heute noch jemand einen RTC-Chip mit 
externem Quarz einsetzt. Der PCF2129T kostet bei Mouser einzeln 2.79€, 
inklusive Quarz, Temperaturkompensation und ist fertig abgeglichen. Aus 
der Schweiz kommen ähnliche Chips, die gibt's sogar bei Reichelt. Wer 
nicht weiß, wohin mit dem Geld, kann natürlich auch Dallas kaufen, die 
sind sogar ein klein wenig genauer.

von XYZ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> ein klein wenig genauer

Wenn man es ein wenig ungenauer sein darf, kann man ueber die
Tage den Helligkeitsverlauf messen, und sich darauf synchronisieren.
Dann hat man quasi die lokale Sonnenzeit :-).
Funktioniert garantiert ohne NTP, GPS, Glonass, DCF oder
anderen Kram.

von Joachim B. (jar)


Bewertung
-2 lesenswert
nicht lesenswert
Moko schrieb:
> DS3231

mit Übergabe als Modul mit EEPROM für die Speicherung, DCF77 als 
Ergänzung wo möglich.
Noch besser, mit ESP32/8266 und NTP

Alex D. schrieb:
> Da ich das Uhrenprogramm selbst geschrieben habe, ist eine Anpassung
> kein Problem.

Tasten zum Stellen wenn der Strom weg war, habe ich auch eingebaut!

: Bearbeitet durch User
von Georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bauform B. schrieb:
> Man ignoriert
> einfach Datum, Wochentag und Stunde. Minuten und Sekunden alleine
> reichen ja, um die eigene RTC zu korrigieren

Und wie nimmt man sie beim ersten mal in Betrieb, ohne das Datum zu 
kennen?

Georg

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Georg schrieb:
> Und wie nimmt man sie beim ersten mal in Betrieb, ohne das Datum zu
> kennen?

wer hat je eine alte Aufzieharmbanduhr in Betrieb genommen ohne die 
aktuelle Uhrzeit zu kennen?

Wer die Zeit nicht kennt braucht keine!

von Bauform B. (bauformb)


Bewertung
0 lesenswert
nicht lesenswert
Georg schrieb:
> Bauform B. schrieb:
>> Man ignoriert
>> einfach Datum, Wochentag und Stunde. Minuten und Sekunden alleine
>> reichen ja, um die eigene RTC zu korrigieren
>
> Und wie nimmt man sie beim ersten mal in Betrieb, ohne das Datum zu
> kennen?

In einer Anwendung hängt sowieso ein PC dran und der kennt sowieso die 
genaue Zeit. Man muss es nur anklicken. Dabei ist die Unix-Zeit der 
gesetzlichen Zeit 6-fach überlegen: der PC muss nur eine Zahl senden 
;)

Auf einer anderen Platine gibt es tatsächlich einen freien Taster. Den 
könnte man als jetzt-bitte-die-Uhr-nach-GPS-stellen (oder so) definieren 
(falls ich das jemals brauchen sollte). Der Vorteil vom Taster ist, man 
hat einen Schuldigen, wenn die Zeit danach nicht stimmt ;)

Momentan darf das Programm auch alleine stellen. Es weiß ja, wenn die 
RTC keinen Strom hatte (Oszillator-Stop-Flag). Dann muss es die Daten 
vom Funk "nur" besonders gewissenhaft prüfen.

von svensson (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich nutze dafür einen DS1307 im 8pol-DIL. Dann braucht man nur noch 
einen Uhrenquarz und eine 2032 mit Lötpins sowie einen 10k Pullup für 
den I2C-Bus.

Uhr wird einmalig per Software über USB gestellt durch die Uhr vom 
Rechner. Nachdem die Uhr gestellt wurde, kommt dann erst das Programm 
auf den MC.

Ist nicht hypergenau, aber für Schaltaufgaben reicht es.

von Wilhelm S. (wilhelmdk4tj)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.
@  svensson

> Uhr wird einmalig per Software über USB gestellt durch die Uhr vom
> Rechner.

Und wie machst du das? Für etwas mehr Info wäre ich dir dankbar.

73
Wilhelm

von svensson (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Durch ein kleines Programm.

von Georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
svensson schrieb:
> Uhr wird einmalig per Software über USB gestellt durch die Uhr vom
> Rechner

Und die läuft dann jahrzehntelang ohne Nachstellen genau? Sehr 
optimistisch.

Georg

von Axel S. (a-za-z0-9)


Bewertung
0 lesenswert
nicht lesenswert
Georg schrieb:
> svensson schrieb:
>> Uhr wird einmalig per Software über USB gestellt durch die Uhr vom
>> Rechner
>
> Und die läuft dann jahrzehntelang ohne Nachstellen genau?

Hat 1. keiner behauptet. Und 2. hat jeder eine andere Vorstellung davon, 
wie "genau" die Uhrzeit sein muß.

von Schlaumaier (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Georg schrieb:
> Und die läuft dann jahrzehntelang ohne Nachstellen genau? Sehr
> optimistisch.

Die Frage ist wie hoch ist die Abweichung. Das kann man mein Hersteller 
des Chips nachlesen.

Was das stellen angeht. Da alle meine Projekte ein Display haben (2 x 16 
am i2c) und auch einige Taster, ist es einfach eine kleine 
Programmroutine zu schreiben, mit der man die Uhr stellen kann.

Ich brauche nicht einmal die Sekundenanzeige da es Projekt bedingt 
völlig unwichtig ist. Davon abgesehen. Wenn es wirklich auf so feinste 
Zeitmessungen ankommen würde würde ich das nicht mit einen China-Clone 
für 2 Euro lösen.

von Joachim B. (jar)


Bewertung
2 lesenswert
nicht lesenswert
svensson schrieb:
> Ich nutze dafür einen DS1307 im 8pol-DIL. Dann braucht man nur noch
> einen Uhrenquarz und eine 2032 mit Lötpins sowie einen 10k Pullup für
> den I2C-Bus.

Mit dem habe ich auch mal angefangen, der ist aber so ungenau und müsste 
ständig nachgestellt werden, der DS3231 ist viel genauer und kann mit 
seiner internen Temperaturmessung sogar kalibriert werden!

von Wilhelm S. (wilhelmdk4tj)


Bewertung
1 lesenswert
nicht lesenswert
Hallo zusammen,

ihr streitet euch darüber, ob die Genauigkeit ausreicht.
Auf meine Frage habe ich bis jetzt keine plausible Antwort erhalten.

Frage:
> Und wie machst du das? Für etwas mehr Info wäre ich dir dankbar.
Antwort:
> Durch ein kleines Programm.

@ svensson
Ich bin nicht davon ausgegangen, dass du irgend etwas mit Hammer und 
Meissel in dieses Uhrenteil geschmiedet hast, es wird wohl ein Programm 
gewesen sein.
Darf am mehr darüber erfahren oder ist das geheim? Hast du wohlmöglich 
die eierlegende Wollmilchsau bezgl. Einstellung DS1307-Uhr gefunden?

73
Wilhelm

von Thomas F. (igel)


Bewertung
-1 lesenswert
nicht lesenswert
Hier ein Programm um die DS1307 zu stellen:
1
    rcall TWI_init
2
      
3
    ldi temp1, 0b11010000    ;Slave address+Write
4
    rcall TWI_address_send
5
6
    ldi temp1, 0      ;Adress-Byte senden
7
    rcall TWI_byte_send
8
9
    mov temp1, zeit_s
10
    rcall BIN_to_BCD
11
    rcall TWI_byte_send
12
13
    mov temp1, zeit_m
14
    rcall BIN_to_BCD
15
    rcall TWI_byte_send
16
17
    mov temp1, zeit_h
18
    rcall BIN_to_BCD
19
    rcall TWI_byte_send
20
21
    mov temp1, zeit_d
22
    rcall TWI_byte_send
23
24
    lds temp1, Tag_Adress
25
    rcall BIN_to_BCD
26
    rcall TWI_byte_send
27
28
    lds temp1, Monat_Adress
29
    rcall BIN_to_BCD
30
    rcall TWI_byte_send
31
32
    lds temp1, Jahr_Adress
33
    rcall BIN_to_BCD
34
    rcall TWI_byte_send
35
    
36
    rcall TWI_stop
37
    clr temp1
38
    sts TWCR, temp1        
39
    ret

Funktioniert seit 10 Jahren super!

von Jacko (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wie man sieht: "Jens (Gast)" ist nicht mehr interessiert, weil
alle brauchbaren Vorschläge eigene Überlegungen zu Betriebsweise und
erforderlicher Genauigkeit bededeuten.

SELBST DENKEN?
- TSCHÜÜÜÜÜÜÜS....

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Wilhelm S. schrieb:
> @  svensson
>
>> Uhr wird einmalig per Software über USB gestellt durch die Uhr vom
>> Rechner.
>
> Und wie machst du das? Für etwas mehr Info wäre ich dir dankbar.
>
> 73
> Wilhelm

ich bin es zwar nicht aber kann antworten.
Nutzt natürlich nur mit RTC und eigener Batterie erstmalig bei compile.
1
char c_str[20];
2
  uint8_t mo=0, ta=0, hh=0, mm=0, ss=0;
3
  uint16_t jjjj=0;
4
  const char monthnames[]PROGMEM ="JanFebMarAprMayJunJulAugSepOctNovDec";
5
  jjjj=atoi(__DATE__+7);
6
  ta=atoi(strLeft((char*)((unsigned long)__DATE__ + 4UL),2));
7
  if(jjjj)
8
    if(mo=(1+((unsigned long)strstr(monthnames, strLeft((char*)__DATE__, 3)) - (unsigned long)(monthnames))/3))
9
      if(ta)
10
      {
11
        hh = atoi(__TIME__);
12
        mm = atoi(__TIME__+3);
13
        ss = atoi(__TIME__+6);
14
        sprintf((char *)c_str,"%04d/%02d/%02d_%02d:%02d:%02d", jjjj, mo, ta, hh, mm, ss);
15
16
        RTC.fillByHMS( atoi(strMid(c_str,12,2)), atoi(strMid(c_str,15,2)), atoi(strRight(c_str,2)) );
17
        RTC.fillByYMD( atoi(strLeft(c_str,4)), atoi(strMid(c_str,6,2)), atoi(strMid(c_str,9,2)) );
18
        RTC.setTime();
19
        DEBUG_PRINTLN(F(" DS3231 RTC ist gestellt"));
20
      }

: Bearbeitet durch User
von Bauform B. (bauformb)


Bewertung
0 lesenswert
nicht lesenswert
Witzige Idee! Etwas genauer wird es, wenn die Zeit zum Linken und 
Flashen addiert wird:

im Makefile:
1
UTC := $(shell date +%s)
2
LDFLAGS += -Wl,-defsym=BUILD_TIME=$(UTC)
und dann
1
extern uint32_t BUILD_TIME;
2
struct tm *ymdhms;
3
uint32_t  build_time = &BUILD_TIME;
4
5
  build_time += 3; // 1 Sekunde linken, 2 Sekunden flashen
6
  ymdhms = gmtime (&build_time);
7
  RTC.fillByYMD (ymdhms->tm_year % 100, ymdhms->mon + 1, ymdhms->mday);
8
  RTC.fillByHMS (ymdhms->tm_hour, ymdhms->tm_min, ymdhms->sec);
9
  RTC.setTime ();

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Bauform B. schrieb:
> Witzige Idee! Etwas genauer wird es, wenn die Zeit zum Linken und
> Flashen addiert wird:

hatte ich auch mal mit Korrektur, dazu noch eine Speicherung im EEPROM 
Uhrzeit gesetzt, damit beim nächsten NeuStart nachgesehen werden kann ob 
die Uhr schon gestellt ist.

Der Vergleich,
aktuelle Zeit > CompileZeit, vermutlich OK!
wenn nicht:
Uhr auf Compile Zeit setzten oder Hilfe rufen oder ins Stellmenü mit 
Tasten gehen.

Nach Wunsch kann man fast alles programmieren

von svensson (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Genauigkeit
Angeblich soll das Ding auf 20 ppm genau sein. Das scheint aber nicht 
unbedingt zu stimmen, denn ich habe eine Abweichung von ca. 1 Minute pro 
Monat festgestellt.

Georg schrieb:
> Und die läuft dann jahrzehntelang ohne Nachstellen genau?

Nach etwa drei Jahren wird wohl die Knopfzelle erschöpft sein. Beim 
Wechsel muß dann natürlich neu gestellt werden.

Wilhelm S. schrieb:
> @ svensson
> Ich bin nicht davon ausgegangen, dass du irgend etwas mit Hammer und
> Meissel in dieses Uhrenteil geschmiedet hast, es wird wohl ein Programm
> gewesen sein.
> Darf am mehr darüber erfahren oder ist das geheim? Hast du wohlmöglich
> die eierlegende Wollmilchsau bezgl. Einstellung DS1307-Uhr gefunden?

Nun, ich habe es mir sehr einfach gemacht und die DS1307-Library für den 
Arduino verwendet. Da ist folgendes Beispiel dabei, das man leicht etwas 
an die eigenen Bedürfnisse anpassen kann:
1
#include <Wire.h>
2
#include <TimeLib.h>
3
#include <DS1307RTC.h>
4
5
const char *monthName[12] = {
6
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
7
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
8
};
9
10
tmElements_t tm;
11
12
void setup() {
13
  bool parse=false;
14
  bool config=false;
15
16
  // get the date and time the compiler was run
17
  if (getDate(__DATE__) && getTime(__TIME__)) {
18
    parse = true;
19
    // and configure the RTC with this info
20
    if (RTC.write(tm)) {
21
      config = true;
22
    }
23
  }
24
25
  Serial.begin(9600);
26
  while (!Serial) ; // wait for Arduino Serial Monitor
27
  delay(200);
28
  if (parse && config) {
29
    Serial.print("DS1307 configured Time=");
30
    Serial.print(__TIME__);
31
    Serial.print(", Date=");
32
    Serial.println(__DATE__);
33
  } else if (parse) {
34
    Serial.println("DS1307 Communication Error :-{");
35
    Serial.println("Please check your circuitry");
36
  } else {
37
    Serial.print("Could not parse info from the compiler, Time=\"");
38
    Serial.print(__TIME__);
39
    Serial.print("\", Date=\"");
40
    Serial.print(__DATE__);
41
    Serial.println("\"");
42
  }
43
}
44
45
void loop() {
46
}
47
48
bool getTime(const char *str)
49
{
50
  int Hour, Min, Sec;
51
52
  if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
53
  tm.Hour = Hour;
54
  tm.Minute = Min;
55
  tm.Second = Sec;
56
  return true;
57
}
58
59
bool getDate(const char *str)
60
{
61
  char Month[12];
62
  int Day, Year;
63
  uint8_t monthIndex;
64
65
  if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
66
  for (monthIndex = 0; monthIndex < 12; monthIndex++) {
67
    if (strcmp(Month, monthName[monthIndex]) == 0) break;
68
  }
69
  if (monthIndex >= 12) return false;
70
  tm.Day = Day;
71
  tm.Month = monthIndex + 1;
72
  tm.Year = CalendarYrToTm(Year);
73
  return true;
74
}

von Poco Domäne (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich dachte Arduino Code wäre verständlich?

von Georg (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Poco Domäne schrieb:
> Ich dachte Arduino Code wäre verständlich?

Wozu, er wird doch sowieso nur kopiert?

Georg

von Rolf M. (rmagnus)


Bewertung
1 lesenswert
nicht lesenswert
svensson schrieb:
>> Genauigkeit
> Angeblich soll das Ding auf 20 ppm genau sein. Das scheint aber nicht
> unbedingt zu stimmen, denn ich habe eine Abweichung von ca. 1 Minute pro
> Monat festgestellt.

Eine Minute pro Monat entspricht 23 PPM.

von Georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
svensson schrieb:
> Nach etwa drei Jahren wird wohl die Knopfzelle erschöpft sein. Beim
> Wechsel muß dann natürlich neu gestellt werden.

Bei einer Minute/Monat geht die Uhr dann 36 Minuten falsch. Das ist 
nicht meine Vorstellung von einer Uhr, aber das muss jeder selbst 
wissen. Für Tag/Nacht-Steuerung einer Heizung reicht es.

Georg

von Stefan ⛄ F. (stefanus)


Bewertung
1 lesenswert
nicht lesenswert
Georg schrieb:
> Bei einer Minute/Monat geht die Uhr dann 36 Minuten falsch. Das ist
> nicht meine Vorstellung von einer Uhr, aber das muss jeder selbst
> wissen.

Das ist die Genauigkeit, mit der man rechnen muss wenn das kauft, was 
gerade handelsüblich ist. Das ist der Standard. Natürlich gibt es 
bessere Produkte. Schlechtere würde ich allerdings als Schrott 
bezeichnen.

von Bauform B. (bauformb)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Stefan ⛄ F. schrieb:
> Das ist die Genauigkeit, mit der man rechnen muss wenn das kauft, was
> gerade handelsüblich ist. Das ist der Standard.

Das ist der Standard 32kHz-Stimmgabelquarz, egal, welchen RTC-Chip man 
dahinter hängt. Den DS1307 würde ich eher nicht als "gerade 
handelsüblich" bezeichnen. Der war doch schon im letzten Jahrtausend 
veraltet.

Natürlich braucht man ihn noch für zertifizierte Platinen aus der Zeit. 
Aber warum baut man den heute noch freiwillig irgendwo ein? Für genau 
das gleiche Geld bekommt man z.B. den PCF2129T/2 mit internem Quarz, 
TCXO, Trimmregister, diversen Überwachungsflags, 3.3V, Timer, Alarm...

Ein Grund könnte so ein seltsames Teil wie im Bild sein, aber das ginge 
auch mit einem modernen Chip. Damit kommt auch ein externer Quarz auf 
1ppm. Warum hab' ich das hier im Forum noch nie gesehen? Setzt jemand so 
Teil ein?

von Stefan ⛄ F. (stefanus)


Bewertung
1 lesenswert
nicht lesenswert
Bauform B. schrieb:
> Setzt jemand so Teil ein?

Habe ich früher gerne verwendet, da intuitiv anwendbar. Bei Bedarf würde 
ich es heute wieder so machen.

von Nick M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich sags nochmal:
Es gibt von NXP RTCCs mit eingebauten Quartz und Temperaturkompensation. 
Die bringt man auf unter 2 Sekunden pro Monat.
Die angebliche Abweichung lt. Datenblatt ohne Abstimmung hab ich nie 
hinbekommen. Hat die der Bestücker durch den Hähnchengrill gelassen?

Jedenfalls kann man die innerhalt etwa 6 Stunden so genau abgleichen. 
Dazu braucht man einen Rechner der mit der Platine verbunden ist, auf 
der Platine etwas Zusatzcode und auf dem Rechner eine Software die immer 
wieder die Zeit abfrägt (1/100 Sek Auflösung), 1000ende Messungen 
mittelt, die RTCC korrigiert und nochmal probiert.
Ich hab das über Ethernet gemacht, den Server hab ich in Tcl/Tk 
geschrieben.

von svensson (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bauform B. schrieb:
> DS1307. Aber warum baut man den heute noch freiwillig irgendwo ein?

Also, ich habe ihn gewählt, weil der eine DIL Bauform hat und damit gute 
auf eine Lochrasterplatine zu löten ist, weil er I2C als Bus benutzt und 
weil er nur einen Quarz und eine Knopfzelle benötigt. Die 5V 
Versorgungsspannung sind ebenfalls sehr praktisch für den ATmega.

Und für die Beleuchtung eines Aquariums dürfte die Genauigkeit 
ausreichend sein.

ABER, wenn jemand eine bessere Alternative (mit obigen Anforderungen) 
kennt, dann nur heraus damit, ich lerne gerne hinzu.

von Maddin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nur die Anfrage des TO (Jens) und seit 4 Tagen verbale 
Selbstbefriedigung hier. Geil :-)!!! Typisch.

Ich werfe noch:

-> Netzfrequenz
-> Datum ausrechnen.

in den Eimer, fertig.

Auch eine Möglichkeit wenn die Möglichkeit besteht.

Gruß
M.

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
svensson schrieb:
> Also, ich habe ihn gewählt, weil der eine DIL Bauform hat und damit gute
> auf eine Lochrasterplatine zu löten ist

svensson schrieb:
> ABER, wenn jemand eine bessere Alternative (mit obigen Anforderungen)
> kennt, dann nur heraus damit, ich lerne gerne hinzu.

das gilt auch für die DS3231 Module mit LiR (mit Ladeschaltung! -> 
5V-Betrieb) oder CR (ohne Ladeschaltung! -> auch für 3,3V geeignet) aus 
China, da ist auch noch ein EEPROM dabei und wenn das am Ende seiner 
Programmiercyclen ist tauscht man es aus ohne den µC mit dem Programm 
tauschen zu müssen.

: Bearbeitet durch User
von Jacko (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Hallo  Maddin (Gast),
mir fiel die Selbstbeschäftigung mit diesem Trivialthema, wo auch
zum Glück keine Mindestanforderungen genannt sind, schon vor 3 Tagen
auf...

Nehmen wir mal das Beste an:
Statt Viren zu verbreiten, sitzen die 'Helfer' zu Hause und suchen
sich einen Zeitvertreib mit überschaubarer Schwierigkeit.
Damit ist doch ALLES GUT!

Mein Vorschlag - ich hoffe, er bietet einiges Diskussionspotential:
Uhrenkorrektur auf den mittleren Sonnentag per LDR!  ;-)

von Bauform B. (bauformb)


Bewertung
0 lesenswert
nicht lesenswert
Jacko schrieb:
> Mein Vorschlag - ich hoffe, er bietet einiges Diskussionspotential:
> Uhrenkorrektur auf den mittleren Sonnentag per LDR!  ;-)

Profi-Wetterstationen messen "Globalstrahlung" u.ä.. Die Sensoren taugen 
nicht für eine Uhr, aber Messwerte (aus der Vergangenheit) sollten 
irgendwo im Internet zu finden sein. Damit könnte man schon mal ein 
Filter konstruieren...

von HildeK (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Joachim B. schrieb:
> das gilt auch für die DS3231 Module mit LiR (mit Ladeschaltung! ->
> 5V-Betrieb) oder CR (ohne Ladeschaltung! -> auch für 3,3V geeignet) aus
> China,

Ich habe bei solchen Modulen die CR entfernt und einen 1F Goldcap 
eingebaut. Das hält jedenfalls für eine Reihe von Tagen, möglicherweise 
von Wochen, ich habe es nicht ausprobiert ...

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
HildeK schrieb:
> Ich habe bei solchen Modulen die CR entfernt und einen 1F Goldcap
> eingebaut.

auf jeden Fall sinnvoll im Hinterkopf zu behalten, dummerweise auch nur 
wenn das Modul mit CR & Ladeschaltung Diode R ausgeliefert wird.

Aber wie auch immer, Ein Modul mit Ladeschaltung und CR ist doof, ein 
Modul wo man die LiR nachbstellen muss ist auch doof und teuer, genau 
wer den Goldcap nachkaufen muss oder will.

Ich hatte mal den nackten DS3231 an Ubat mit 0,5F gepuffert, reicht auf 
jeden Fall für den Batteriewechsel an VCC.

Da auch LiR nur begrenzte Ladecyclen aushalten ist Goldcap evtl. besser.

von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> Aber wie auch immer, Ein Modul mit Ladeschaltung und CR ist doof, ein
> Modul wo man die LiR nachbstellen muss ist auch doof und teuer, genau
> wer den Goldcap nachkaufen muss oder will.
Ja, man erlebt einiges. Das Modul wurde mit CR ausgeliefert, die 
Ladeschaltung war bestückt. 😀 Leider weiß ich nicht, wie viel 
'Ladestrom' eine CR unbeschadet übersteht, zumal das Modul auch mit 5V 
betrieben werden kann und dann schon rund 5mA fließen (200Ω + Diode).
Goldcaps hatte ich mal einige irgendwo recycled, daher kein Problem. Ja, 
neu will man für 1F schon mal zwei fuffzig.

> Ich hatte mal den nackten DS3231 an Ubat mit 0,5F gepuffert, reicht auf
> jeden Fall für den Batteriewechsel an VCC.
Ja, auch 0.5F halten mehrere Tage. Für die Überbrückung eines 
Batteriewechsels kann man auch für rund 1€ nur 0.1F etwas preisgünstiger 
einsetzen. Das reicht dann auch noch, um das Modul von A nach B zu 
tragen, um die Zeit mal wieder nachzustellen ...

von Bauform B. (bauformb)


Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> Da auch LiR nur begrenzte Ladecyclen aushalten ist Goldcap evtl. besser.

Wenn man nicht aufpasst, halten LiR sogar nur einen Zyklus aus. Akkus 
vertragen keine Tiefentladung. Insofern sind Goldcaps unschlagbar. Die 
haben auch den Vorteil, dass die RTC daraus nicht allzu lange läuft. 
Das heißt, solange sie läuft, geht sie auch noch einigermaßen genau und 
wenn der Goldcap leer ist, hätte sie sowieso gestellt werden müssen.

Aber weiß man inzwischen, wie lange aktuelle kleine EDLC leben? In den 
Datenblättern finde ich immer nur "soviel schlechter nach 1000 Stunden 
bei 60°C". Selbst wenn man doppelte Lebensdauer pro 10K weniger annimmt, 
kommt nur ein! Jahr raus. Na gut, sie sind dann nicht kaputt, aber was 
ist nach 10 Jahren? Eine Lithium-Thionylchlorid-Batterie ist dann noch 
so gut wie neu.

von svensson (Gast)


Bewertung
0 lesenswert
nicht lesenswert
svensson schrieb:
> Ich nutze dafür einen DS1307 im 8pol-DIL
> ....
> Ist nicht hypergenau, aber für Schaltaufgaben reicht es.

Zur Genauigkeit kann ich jetzt nach 3,5 Monaten Testbetrieb nur mit der 
Knopfzelle sagen, daß eine Abweichung von 2 Minuten festzustellen ist. 
Für einfache Schaltaufgaben sollte das reichen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.