Hallochen.
Ich, mal wieder, am verzweifeln...
Für einige Berechnungen der Uhr benötige ich den Unix-Zeitstempel.
Da ich aber für die RTC keine Bibliothek benutze, hab ich den nicht.
Also habe ich den Code aus der Wikipedia mal angepasst:
//**************************** Unix-Zeitstempel berechnen **********************************************
void unixzeit()
{
UhrLesen(jahre,monate,tage,stunden,minuten,sekunden); // aktuelles Datum und Zeit holen
/** Konvertiert gegliederte UTC-Angaben in Unix-Zeit.
* Parameter und ihre Werte-Bereiche:
* - jahr [1970..2038]
* - monat [1..12]
* - tag [1..31]
* - stunde [0..23]
* - minute [0..59]
* - sekunde [0..59]
*/
const short tage_seit_jahresanfang[12] = /* Tage seit Jahresanfang ohne Tage des aktuellen Monats und ohne Schalttag */
{0,31,59,90,120,151,181,212,243,273,304,334};
long unix_zeit;
long jahr=jahre-1970;
int schaltjahre=((jahre-1)-1968)/4 - ((jahre-1)-1900)/100 + ((jahre-1)-1600)/400;
unix_zeit=sekunden + 60*minuten + 60*60*stunden +
(tage_seit_jahresanfang[monate-1]+tage-1)*60*60*24 +
(jahr*365+schaltjahre)*60*60*24;
if ( (monate>2) && (jahre%4==0 && (jahre%100!=0 || jahre%400==0)) )
unix_zeit+=60*60*24; /* +Schalttag wenn jahr Schaltjahr ist */
Serial.begin(9600);
Serial.println(unix_zeit);
}
Das Ergebnis ist nahe dran, aber nicht nahe genug. Es liegt grob elf Monate in der Vergangenheit.
Hat einer der Experten hier eine Ahnung, warum?
Die RTC liefert korrekt aktuelles Datum und Uhrzeit-an der liegts also nicht.