Probleme mit adjustTime() - Zeit vor stellen

Hallo in die Runde,

ich habe bei meinem Sketch auf einem Teensy 3.6) ein Problem, dass adjustTime() die Uhrzeit ohne Probleme zurück stellt (um 3600 Sekunden), aber nicht vorstellt, bzw. wenn dann nur sporadisch und nur kleinere Werte (bis ca. 300 Sekunden).

Um das ganze einfacher eingrenzen zu können, habe ich die entsprechende Funktion ins Beispiel "TimeTeensy3" kopiert- das Problem ist identisch geblieben.

Vielleicht kann mir jemand hier in der Runde erklären was ich falsch mache...

/*
 * TimeRTC.pde
 * example code illustrating Time library with Real Time Clock.
 * 
 */

#include <TimeLib.h>

void setup()  {
  // set the Time library to use Teensy 3.0's RTC to keep time
  setSyncProvider(getTeensy3Time);
  
  Serial.begin(115200);
  while (!Serial);  // Wait for Arduino Serial Monitor to open
  delay(100);
  if (timeStatus()!= timeSet) {
    Serial.println("Unable to sync with the RTC");
  } else {
    Serial.println("RTC has set the system time");
  }
  adjustTime(3600); 
}

byte SekundeAlt;
byte Sekunde;

void loop() {
  if (Serial.available()) {
    time_t t = processSyncMessage();
    if (t != 0) {
      Teensy3Clock.set(t); // set the RTC
      setTime(t);
    }
  }
  digitalClockDisplay();  
  delay(1000);

  Sekunde = second();
  
  if ( second() == 10 && SekundeAlt != Sekunde )
     { SekundeAlt = second();
       adjustTime(3600); }
  if ( second() == 50 && SekundeAlt != second() )
     { SekundeAlt = second();
       adjustTime(-3600); }
}

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(); 
}

time_t getTeensy3Time()
{
  return Teensy3Clock.get();
}

/*  code to process time sync messages from the serial port   */
#define TIME_HEADER  "T"   // Header tag for serial time sync message

unsigned long processSyncMessage() {
  unsigned long pctime = 0L;
  const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013 

  if(Serial.find(TIME_HEADER)) {
     pctime = Serial.parseInt();
     return pctime;
     if( pctime < DEFAULT_TIME) { // check the value is a valid time (greater than Jan 1 2013)
       pctime = 0L; // return 0 to indicate that the time is not valid
     }
  }
  return pctime;
}

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);
}

Achso, eine Ungenauigkeit hab ich in meine Fragestellung- im Setup- wird die Zeit nicht korrigiert- in der Loop geht es ohne Probleme in beide Richtungen...

Hat denn keiner eine Idee?

Der Teensy scheint nicht so richtig zu Arduino zu gehören. Er wird nicht unter Products geführt, und es gibt für ihn auch keine eigene Abteilung im Forum. Kai Neahnung, wo man mehr über ihn erfahren und erfragen kann :frowning:

Früher (tm) konnte man bei UNIX die Systenzeit über adjust auch nur in sehr begrenzem Differenzen umstellen.
Aber in der TimeLib von Paul Stoffregen wird eigentlich bei adjust nur der Wert der Systemzeit angepasst. Ob der Teensy da noch eine Sperre drin hat, weiß ich nicht.
Das es im Loop ja funktioniert, macht die Sache noch mysteriöser.

Schreib doch mal aun Paul Stoffregen. Er ist ja auch der Vater der Teensys.

Gruß Tommy

OK, werde ich wohl mal so versuchen... Ich tue mir mit dem englischen etwas schwer, vor allem wenn man einen Sachverhalt möglichst genau beschreiben soll... da kommt es ja manchmal auf Feinheiten an...

Aber ich versuche es mal und gebe hier dann Rückmeldung.

Ich mag die Teensys weil sie echt Power haben, da kann man schon einiges machen.

Für kleine Spielereien mag ich aber immer noch die nanos und ihre Clone am liebsten :slight_smile: