INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
RTC sync & UNIXtime
24.05.2015, 08:38
Beitrag #1
RTC sync & UNIXtime
Hallo zusammen.

Zuerst euch einmal Frohe Pfingsten. Wink

ICh gstehe gerade vor einem 30 Jahre Offest Problem, zudem mir keine senkrechte Lösung einfällt.

Hardware: Mega 2650
RTC 1307 I²C

Lib: #include "RTClib.h"

Da ich diese RTC öfter abfrage verspätet sie sich doch um Einiges über die Laufzeit der Anwendung. Ist das eigentlich so normal, dachte RTC wäre RTC?

Aber hier zu meiner Frage:

Ich ziehe mir über einen NTP-Server die UNIXtime und rechne sie mir zurecht. Heraus bekomme ich dann die Sek seit 1970.

zB: 1432458586 für den 24.05.2015 - 11:09:46

Das schreibe ich so auf die Uhr:
Code:
unixtime = 1432458586;
RTC.adjust(DateTime(unixtime));

Lese ich die Zeit und das Datum von der Uhr, bekomme ich aber einen Offset von 30 Jahren - 1 Tag.
Code:
// Wochentag, Tag.Monat.Jahr
  lcd.setCursor(0,0);
  lcd.print(get_day_of_week(datetime.dayOfWeek()));
  lcd.print(",");
  if(datetime.day()<10)lcd.print(0);
  lcd.print(datetime.day(),DEC);
  lcd.print(".");
  if(datetime.month()<10)lcd.print(0);
  lcd.print(datetime.month(),DEC);
  lcd.print(".");
  lcd.print(datetime.year(),DEC);
  lcd.print("  ");
    
  // Stunde:Minute:Sekunde
  if(datetime.hour()<10)lcd.print(0);
  lcd.print(datetime.hour(),DEC);
  lcd.print(":");
  if(datetime.minute()<10)lcd.print(0);
  lcd.print(datetime.minute(),DEC);

Hat hierzu jemand eine Idee? Leider komme ich da gerade nicht weiter. Irgendwo habe ich einen massiven Denkfehler.

Danke euch.

Keep on.... Ralf aka RMR
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.05.2015, 09:17 (Dieser Beitrag wurde zuletzt bearbeitet: 24.05.2015 09:21 von Bitklopfer.)
Beitrag #2
RE: RTC sync & UNIXtime
Hi,
mich wundert gerade das man die RTC so einfach mit der Unixzeit updaten kann:
Code:
RTC.adjust(DateTime(unixtime));
...ist denn das wo nachzulesen das das so geht ?

Und du kennst aber schon den Unterschied zwischen Epoch-Zeit und Linux-Zeit ?
Die Epoch bezieht sich auf den 1.1.1900 und die Linux auf den 1.1.1970
Und die NTP Server liefern nach meinen Erfahrungen die Epoch-Zeit aus.

Ziehst du die NTP Zeit über ein ETH-Shield auf den Mega ?
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.05.2015, 10:59
Beitrag #3
RE: RTC sync & UNIXtime
(24.05.2015 09:17)Bitklopfer schrieb:  ...ist denn das wo nachzulesen das das so geht ?
Try & error. Angel

Hatte noch einen Netzfund in dem sich die RTC1307 Zeit auf "Sekunden nach 1.1.2000" bezieht. Ziehe ich die 30 Jahre inkl Schalttage ab passt alles. (Differenz 1970 - 2000)
Aber das ist mir zu empirisch, würde gerne genau verstehen warum das so ist.

(24.05.2015 09:17)Bitklopfer schrieb:  Und du kennst aber schon den Unterschied zwischen Epoch-Zeit und Linux-Zeit ?
Die Epoch bezieht sich auf den 1.1.1900 und die Linux auf den 1.1.1970
Und die NTP Server liefern nach meinen Erfahrungen die Epoch-Zeit aus.
Was ich bisher zurückglesen habe (serial monitor) und in die einschlägigen Umrechenseiten einfügt habe, war es immer UNIXtime. Siehe die Werte im 1. post.

(24.05.2015 09:17)Bitklopfer schrieb:  Ziehst du die NTP Zeit über ein ETH-Shield auf den Mega ?
Ja genau, via UDP & NTPrequest

VG, Ralf aka RMR
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.05.2015, 15:11
Beitrag #4
RE: RTC sync & UNIXtime
woher stammt denn deine RTClib.h ?...da kann man doch sicherlich nachlesen welche Funktionen die Lib bereitstellst.

Weil die DS1307 versteht Hardwaremäßig keine Linuxzeit, die arbeitet mit einzelnen Registern für Sekunden, Minuten Stunden etc.

Also um das alles zu verstehen mußt du das Bindeglied Library zerpflücken und das Datenblatt von der RTC durchforsten.

Also und wenn du die NTP Zeit ziehst dann mußt ja das umrechnen damit du die RTC bespassen kannst... Wenn dir das mal klarziehst haste gewonnen...Smile
lh
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.05.2015, 06:29
Beitrag #5
RE: RTC sync & UNIXtime
(24.05.2015 15:11)Bitklopfer schrieb:  woher stammt denn deine RTClib.h ?...
Von der Gibhub Seite.

Zur Zusammenfassung:

- NTP-request via UDP gezogen und umgewandelt in Sekunden seit 01.01.1900.
- RTC möchte Sekunden seit 2000
- 100 Jahre Offest gebildet
- RTC.adjust(epoch) //epoch = secsince1900-100Jahre

So funktioniert das ganz gut. Hatte in meiner ersten Version die UNIXtime auf die
RTC geladen und mir deswegen einen Offset beschert.
Hatte nicht damit gerechntet das die Arduinozeit am 1.1.2000 beginnt. Big Grin

Grüße und Keep on.... Ralf aka RMR
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Sketch läßt sich nicht hochladen - not in sync Stephan_56 20 1.768 17.01.2016 23:00
Letzter Beitrag: Bitklopfer
  Upload nicht möglich (avrdude: stk500_getsync(): not in sync: resp=0x00) Joerg 37 69.331 14.02.2015 13:15
Letzter Beitrag: bergfrei

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste