RTC 1307 Lib Problem

Hallo,

leider konnte ich weder mit der SuFu noch mit Google eine Lösung meines Problems finden, deshalb nun dieser Post hier. Ich bin Arduino Anfänger, also habt bitte Nachsicht, falls sich mein Problem als minder schwer heraus stellt. Aber ich weis momentan einfach nicht weiter.

Mein Problem ist, dass mein RTC Modul , einem Arduino UNO R3 aus der Bucht nicht mit der Lib von Henning Karlsen funktionieren will. Mit anderen Libs z.B. DS1307new.h läuft es prima. Nur leider läuft mit den anderen Libs der Code des eigentlichen Projekts nicht. Ich für mich würde sagen das RTC Modul hat mit der Karlsen-Lib keine Verbindung zum Arduino Board, und das Beispiel spuckt immer so etwas xxxxxxxxx 85.85.2165 -- 27:85:85 aus. Das Verhalten zeigt sich mit und ohne Netzteil, hab ein 12v 2A und ein 12v 18A getestet, auch die Batterie ist voll (3,2V), auch ein zweites baugleiches Mudul konnte keine Abhilfe schaffen. Irgendwo hab ich gelesen, dass die verbauten Pullup Widerstände nicht ausreichen sollen, aber auch (wie dort empfohlen) zusätzliche 2,2K Widerstände an SDA und SCL konnten mir nicht helfen.
Die Lib von Henning nutzt die digitalen Pins 4 und 5 und die beiden Libs mit denen es funktioniert nutzen die analogen Pins 4 und 5. Kann man der Lib von Henning Karlsen eigentlich beibringen auch die analogen Pins zu nutzen?
Mein eigentliches Projekt an die beiden funktionierenden Libs anzupassen wäre doch recht aufwändig und eben nicht nötig wenn die Karlsen-Lib nutzbar wäre. Wie schon erwähnt, bin ich Arduino Anfänger, und im Moment noch nicht in der Lage das Problem welches die Karlsen Lib mit meinem RTC-Modul hat zu lokalisieren oder gar zu beseitigen.
Gebt mir einen Schubs und bringt mich auf der rechen Weg!

Vielen Dank schon mal für eure Mühe.

  1. die I2C Schnittstelle, die der RTC benutzt ist auf Pins A4 und A5 des Arduino UNO. Alle I2C devices werden dort angeschlossen und alle Bibliotheken greifen auf diese Schnittstelle zu.

  2. hast Du die Beispielsketch, die mit den Bibiotheken mitgegeben werden, ausprobiert?

  3. hast Du die RTC gestellt?

Grüße Uwe

hi,

  1. die I2C Schnittstelle, die der RTC benutzt ist auf Pins A4 und A5 des Arduino UNO. Alle I2C devices werden dort angeschlossen und alle Bibliotheken greifen auf diese Schnittstelle zu.

das scheint ja eben das besondere dieser bibliothek zu sein, daß sie das nicht tut.

gruß stefan

hast Du die RTC gestellt?

bevor Du das getan hast, ist die rtc tot.

Eisebaer:
hi,

  1. die I2C Schnittstelle, die der RTC benutzt ist auf Pins A4 und A5 des Arduino UNO. Alle I2C devices werden dort angeschlossen und alle Bibliotheken greifen auf diese Schnittstelle zu.

das scheint ja eben das besondere dieser bibliothek zu sein, daß sie das nicht tut.

gruß stefan

Ja, Stefan Du hast Recht die Bibliothek von Henning Karlsen benutzt nicht die Hardware I2C sondern emuliert die Schnittstelle mit SW auf x - beliebigen Pins. Die verwendeten Pins werden in
DS1307 rtc(2,3);
definiert, wobei das erste Pin SDA ist und das zweite SCL.
TroyPan was hast Du geschrieben?

Die Bibliothek scheint für eine ältere IDE-Version geschrieben. Ab IDE 1.0 heißen die Sketche .ino.
Kannst Du uns den Sketch geben den Du verwendest?

Grüße Uwe

Hallo,

ich habe mit den Beispielen gearbeitet. In der Karlsen-Lib sieht das so DS1307 rtc(4,5); aus. An Pin 4 habe ich SDA und an Pin 5 SCL. Mit der Karlsen-Lib lässt sich die Uhr auch nicht stellen. Deshalb vermute ich ein Kommunikationsproblem mit dieser Lib. Ich verwende die im Link angegebene Version der Lib und Arduino 1.0.4.

Mit dem Beispiel aus der anderen Lib lässt sich die Uhr stellen und funktioniert wie gewünscht. Was ist also das Problem der Karlson-Lib? Ich verstehe von dem Code der Lib leider nicht genug als das ich ihn ausreichend ändern könnte, wenns denn überhaut möglich ist. Ich komme programmiertechnisch aus der Richtung Webdesign. (JavaScript, PHP, ...)

Gruß
Troy Pan

Hallo nochmal,

dieses Beispiel funktioniert:

// #############################################################################
// #
// # Scriptname : DS1307_Test.pde
// # Author     : Peter Schmelzer, Oliver Kraus
// # Date       : 2011-04-08

// # Editor     : Lauren from DFRobot
// # Date       : 30.12.2011

// # Description:
// # Test file for the DS1307new library. Assumes that you have a DS1307 
// # connected to the I2C-Bus of your Arduino and that it has a battery backup.
// # Update the library and sketch to compatible with IDE V1.0 and earlier

// # Version    : 1.0
// #############################################################################
// *********************************************
// INCLUDE
// *********************************************
#include <Wire.h>                       // For some strange reasons, Wire.h must be included here
#include <DS1307new.h>

// *********************************************
// DEFINE
// *********************************************

// *********************************************
// VARIABLES
// *********************************************
uint16_t startAddr = 0x0000;            // Start address to store in the NV-RAM
uint16_t lastAddr;                      // new address for storing in NV-RAM
uint16_t TimeIsSet = 0xaa55;            // Helper that time must not set again

// *********************************************
// SETUP
// *********************************************
void setup()
{
  pinMode(2, INPUT);                    // Test of the SQW pin, D2 = INPUT
  digitalWrite(2, HIGH);                // Test of the SQW pin, D2 = Pullup on

  Serial.begin(9600);

/*
   PLEASE NOTICE: WE HAVE MADE AN ADDRESS SHIFT FOR THE NV-RAM!!!
                  NV-RAM ADDRESS 0x08 HAS TO ADDRESSED WITH ADDRESS 0x00=0
                  TO AVOID OVERWRITING THE CLOCK REGISTERS IN CASE OF
                  ERRORS IN YOUR CODE. SO THE LAST ADDRESS IS 0x38=56!
*/
  RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Store startAddr in NV-RAM address 0x08 

/*
   Uncomment the next 2 lines if you want to SET the clock
   Comment them out if the clock is set.
   DON'T ASK ME WHY: YOU MUST UPLOAD THE CODE TWICE TO LET HIM WORK
   AFTER SETTING THE CLOCK ONCE.
*/
//  TimeIsSet = 0xffff;
//  RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));  

/*
  Control the clock.
  Clock will only be set if NV-RAM Address does not contain 0xaa.
  DS1307 should have a battery backup.
*/
  RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  if (TimeIsSet != 0xaa55)
  {
    RTC.stopClock();
        
    RTC.fillByYMD(2011,4,8);
    RTC.fillByHMS(22,7,0);
    
    RTC.setTime();
    TimeIsSet = 0xaa55;
    RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    RTC.startClock();
  }
  else
  {
    RTC.getTime();
  }

/*
   Control Register for SQW pin which can be used as an interrupt.
*/
  RTC.ctrl = 0x00;                      // 0x00=disable SQW pin, 0x10=1Hz,
                                        // 0x11=4096Hz, 0x12=8192Hz, 0x13=32768Hz
  RTC.setCTRL();

  Serial.println("DS1307 Testsketch");
  Serial.println("Format is \"hh:mm:ss dd-mm-yyyy DDD\"");

  uint8_t MESZ;

  MESZ = RTC.isMEZSummerTime();
  Serial.print("MEZ=0, MESZ=1 : ");
  Serial.println(MESZ, DEC);    
  Serial.println();
}

// *********************************************
// MAIN (LOOP)
// *********************************************
void loop()
{
  RTC.getTime();
  if (RTC.hour < 10)                    // correct hour if necessary
  {
    Serial.print("0");
    Serial.print(RTC.hour, DEC);
  } 
  else
  {
    Serial.print(RTC.hour, DEC);
  }
  Serial.print(":");
  if (RTC.minute < 10)                  // correct minute if necessary
  {
    Serial.print("0");
    Serial.print(RTC.minute, DEC);
  }
  else
  {
    Serial.print(RTC.minute, DEC);
  }
  Serial.print(":");
  if (RTC.second < 10)                  // correct second if necessary
  {
    Serial.print("0");
    Serial.print(RTC.second, DEC);
  }
  else
  {
    Serial.print(RTC.second, DEC);
  }
  Serial.print(" ");
  if (RTC.day < 10)                    // correct date if necessary
  {
    Serial.print("0");
    Serial.print(RTC.day, DEC);
  }
  else
  {
    Serial.print(RTC.day, DEC);
  }
  Serial.print("-");
  if (RTC.month < 10)                   // correct month if necessary
  {
    Serial.print("0");
    Serial.print(RTC.month, DEC);
  }
  else
  {
    Serial.print(RTC.month, DEC);
  }
  Serial.print("-");
  Serial.print(RTC.year, DEC);          // Year need not to be changed
  Serial.print(" ");
  switch (RTC.dow)                      // Friendly printout the weekday
  {
    case 1:
      Serial.print("MON");
      break;
    case 2:
      Serial.print("TUE");
      break;
    case 3:
      Serial.print("WED");
      break;
    case 4:
      Serial.print("THU");
      break;
    case 5:
      Serial.print("FRI");
      break;
    case 6:
      Serial.print("SAT");
      break;
    case 7:
      Serial.print("SUN");
      break;
  }
  Serial.print(" seconds since 1.1.2000:");
  Serial.print(RTC.time2000, DEC);
  uint8_t MESZ = RTC.isMEZSummerTime();
  Serial.print(" MEZ=0, MESZ=1 : ");
  Serial.print(MESZ, DEC);  
  
  Serial.print(" - Address in NV-RAM is: ");
  RTC.getRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t));
  Serial.print(lastAddr, HEX);
  lastAddr = lastAddr + 1;              // we want to use it as addresscounter for example
  RTC.setRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t));
  RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  if (TimeIsSet == 0xaa55)              // check if the clock was set or not
  {
    Serial.println(" - Clock was set!");
  }
  else
  {
    Serial.println(" - Clock was NOT set!");
  }    
  delay(1000);                          // wait a second
}

und das Beispiel aus der Karlsen-Lib liefert xxxxxxxxx 85.85.2165 -- 27:85:85

// DS1307_Serial_Easy (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// A quick demo of how to use my DS1307-library to 
// quickly send time and date information over a serial link
//
// I assume you know how to connect the DS1307.
// DS1307:  SDA pin   -> Arduino Digital 4
//          SCL pin   -> Arduino Digital 5

#include <DS1307.h>

// Init the DS1307
DS1307 rtc(4, 5);

void setup()
{
  // Set the clock to run-mode
  rtc.halt(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1307
  rtc.setDOW(SUNDAY);        // Set Day-of-Week to SUNDAY
  rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(3, 10, 2010);   // Set the date to October 3th, 2010
}

void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
  
  // Wait one second before repeating :)
  delay (1000);
}

hi,

ich hab' das jetzt mal ausprobiert:

ohne pullups funktioniert zwar das stellen, aber das lesen dann nicht (nur nullen).
daß das stellen funkt, weiß ich weil ich die ds1307new zwischendurch verwendet hab'.
mit pullups kommt beim lesen das, was Du geschrieben hast.
einfach eine schlechte bibliothek, würd' ich sagen, da hilft nur googeln.
was müßtest Du so groß umbauen, wenn du die wire verwendest? geht auch ohne ds1307-library. spart gewaltig speicher...

gruß stefan

Hallo Stefan,

das Projekt welches ich gerne umsetzen würde ist ein Aquariumcomputer, hier der Code ich habe versucht mit der DS1307new zu arbeiten, aber für mein Verständnis wird das ganz schön aufwendig. Da ich die Rückgabewerte der Funktionen der urspünglichen Lib nicht kenne, müsste ich ja da ansetzen und den Code dementsprechend anpassen, denk ich. Ich würds aber als letzten Ausweg wohl auf mich nehmen. Dann brauch ich für die Realisierung um einiges länger. Dafür kenn ich mich danach sehr viel besser mit Arduino Code aus.

Gruß
Troy

Hallo

Aus meiner Sicht sind hier einige Fragen offen. Warum kann man die DS1307new nicht verwenden? Die Funktionalität sollte doch einigermaßen unabhängig von der UTFT sein. Ein Problem besteht nur dann, wenn die UTFT die TWI/I2C Pins für das Display benötigt. Deshalb: Um was für ein Display handelt es sich denn, wie ist es angeschlossen? Gibt es alternativen zu dem Display?

Da ich die Rückgabewerte der Funktionen der urspünglichen Lib nicht kenne, müsste ich ja da ansetzen und den Code dementsprechend anpassen, denk ich.

Welche Rückgabewerte? Von wem oder was?

Oliver (der in dem DS1307 Code genannte...)

Hallo Oliver,

die erste Hürde die mir die DS1307new stellt ist die, dass dieser code z.B. Time LEDWeissEinStart; eine Fehlermeldung error: 'Time' does not name a type beim Kompilieren mit der DS1307new erzeugt und mit der DS1307 nicht. Diese Objekte Time setDisplayTime (int key, Time value, int displayColumn, int displayRow)werden als an weitere Funktionen übergeben und dort dann weiter verwendet.

Meine Idee war, die Werte welche ein Time-Objekt liefert, direkt mit z.B. RTC.minute zu übergeben, aber so einfach ist das scheinbar nicht, da ja die Funktion wiederum ja scheinbar auch so ein Time-Objekt ist. Für mich als Anfänger wäre es am einfachsten, wenn ich Codebeispiele ohne tiefgreifende Änderungen nutzen könnte. Gibt es in der DS1307new ein Equivalent zu diesem "Time-Objekt" ? Dann könnte ich dieses ja verwenden. Oder komme ich auch anders an die Daten die die es liefert?

Das wäre momentan mein größtes Problem an diesem Projekt. Wenn ich wüste was es liefert und eine Alternative hätte, könnte ich ja weiter Arbeiten, aber so hänge ich an einer elementaren Stelle fest.

Gruß
Troy

hi,

Dein problem mit diesen 2165er-werten liegt nicht an der lib, sondern das kommt bei anderen libs auch vor. hat vielleicht etwas mit der bcdtodec-umrechnung zu tun (vielleicht in kombination mit der seriellen schnittstelle), aber da bin ich nicht sicher.

oliver ist da sicher fitter.

was passiert, wenn Du die klasse Time in die DS1307 reinkopierst, kann Dir sicher auch oliver sagen, der hat sie ja geschrieben...

gruß stefan

Hi

In der DS1307new wird anstelle von Time einfach ein uint32_t genommen. Dieser Datentyp enthält die sekunden nach dem 1.1.2000.
Auf die einzelnen Datenmember kann direkt zugegriffen werden, beispielsweise durch RTC.time2000. Siehe hier: Google Code Archive - Long-term storage for Google Code Project Hosting..

Ich kenne jetzt zwar die Funktion "setDisplayTime" nicht, aber in DS1307new Referenz wird erklärt, wie Du beispielsweise auf die Minuten, Stunden, etc zugreifen kannst. Ist "setDisplayTime" teil einer Lib oder ist die von Dir selbst geschrieben?

Oliver

Hallo,

@ Stefan
ich habe mich nun dran gemacht die nötigen Codeteile in die DS1307new zu integireren, allerding komme ich nun nicht weiter, da ich diese Fehlermeldung conversion from 'void' to non-scalar type 'Time' requested ausgelöst von diesem Code "Time time = RTC.getTime();" nicht verstehe.

Ich habe dies hier

Time::Time()
{
	this->year = 2010;
	this->mon  = 1;
	this->date = 1;
	this->hour = 0;
	this->min  = 0;
	this->sec  = 0;
	this->dow  = 5;
}

Time DS1307new::getTime()
{
	Wire.beginTransmission(DS1307_ID);
	printIIC(0x00);
	Wire.endTransmission();
	Wire.requestFrom(DS1307_ID, 7);       	// request secs, min, hour, dow, day, month, year
	second = bcd2dec(readIIC() & 0x7f);		// aquire seconds...
	minute = bcd2dec(readIIC());     		// aquire minutes
	hour = bcd2dec(readIIC());       		// aquire hours
	dow = bcd2dec(readIIC());        		// aquire dow (Day Of Week)
	dow--;									//  correction from RTC format (1..7) to lib format (0..6). Useless, because it will be overwritten
	day = bcd2dec(readIIC());       		// aquire day
	month = bcd2dec(readIIC());      		// aquire month
	year = bcd2dec(readIIC());       		// aquire year...
	year = year + 2000; 
  
	Time t;
	t.sec	= second;
	t.min	= minute;
	t.hour	= hour;
	t.dow	= dow;
	t.date	= day;
	t.mon	= month;
	t.year	= year;
	return t;
}

in die .cpp

und die Klasse Time

class Time
{
public:
	uint8_t		hour;
	uint8_t		min;
	uint8_t		sec;
	uint8_t		date;
	uint8_t		mon;
	uint16_t	year;
	uint8_t		dow;

		Time();
};

in die .h integriert. Wenn ich das richtig verstehe erzeugt die Klasse Time ein Objekt, dass ich dann mit "time = RTC.getTime();" mit der aktuellen Zeit und dem Datum gefüllt wird. Auf das man dann so "time.hour" wieder zugreifen kann. Oder? So wird das dann auch in den Funktionen an die es übergeben wird gemacht. Die dann wiederum ein Time.Objekt zurück geben.

@Oliver
Die Funktion "setDisplayTime" ist teil des Projetcodes und bekommt ein Time-Objet mit auf den Weg. Diese Klippe scheine ich mit der Integration umschifft zu haben. Konnte das aber wegen der Fehlermeldung beim Kompilieren noch nicht überprüfen.

Und viel dank schon mal Leute, ohne euch hätte ich die Flinte schon ins Korn geworfen.

Mir scheint, dass dieses getTime() eine Erweiterung der DS1307new ist, die nicht von uns stammt. Kannst Du mal deine .h Datei der modifizierten DS1307new hier posten. Ohne die .h Datei wird es schwierig den Fehler nachzuvollziehen.

Grüße,
Oliver

Hi,

hier die .h Datei der DS1307new

// #############################################################################
// #
// # Scriptname : DS1307new.h
// # Author     : Peter Schmelzer
// # Contributor: Oliver Kraus
// # contact    : schmelle2@googlemail.com
// # Date       : 2010-11-01

// # Editor     : Lauren from DFRobot
// # Date       : 30.12.2011

// # Description:
// # Headerfile for the DS1307new Library
// # Update the library and sketch to compatible with IDE V1.0 and earlier
// # 
// # Version    : 1.0
// #############################################################################
// *********************************************
// DEFINE
// *********************************************
#ifndef DS1307new_h
#define DS1307new_h

// *********************************************
// INCLUDE
// *********************************************
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
  
// *********************************************
// Library interface description
// *********************************************

class Time
{
public:
	uint8_t		hour;
	uint8_t		min;
	uint8_t		sec;
	uint8_t		date;
	uint8_t		mon;
	uint16_t	year;
	uint8_t		dow;

		Time();
};

class DS1307new
{
  public:
    DS1307new();
    uint8_t isPresent(void);
    void startClock(void);
    void stopClock(void);
    void setTime(void);
    void getTime(void);
    void getCTRL(void);
    void setCTRL(void);
    void getRAM(uint8_t rtc_addr, uint8_t * rtc_ram, uint8_t rtc_quantity);
    void setRAM(uint8_t rtc_addr, uint8_t * rtc_ram, uint8_t rtc_quantity);
    uint8_t second;
    uint8_t minute;
    uint8_t hour; 
    uint8_t dow;			// day of week, 0 = sunday
    uint8_t day;
    uint8_t month;
    uint16_t year;
  
  
    uint8_t ctrl;

    uint16_t ydn;		// day within the year (year day number, starts with 1 = 1. Jan)
    uint16_t cdn;		// days after 2000-01-01 (century day number, starts with 0)
    uint32_t time2000;	// seconds after 2000-01-01 00:00 (max value: 2136-02-07 06:28:15)
  
    void fillByCDN(uint16_t _cdn);
    void fillByTime2000(uint32_t _time2000);
    void fillByHMS(uint8_t h, uint8_t m, uint8_t s);
    void fillByYMD(uint16_t y, uint8_t m, uint8_t d);
    uint8_t isMEZSummerTime(void);

  private:
    uint8_t is_leap_year(uint16_t y);
    void calculate_ydn(void);			// calculate ydn from year, month & day
    void calculate_cdn(void);			// calculate cdn from year & ydn
    void calculate_dow(void);			// calculate dow from ydn
    void calculate_time2000(void);		// calculate time2000 from cdn, hour, minute & second

    uint16_t _corrected_year_day_number(void);
    void calculate_month_by_year_and_ydn(void);
    void calculate_day_by_month_year_and_ydn(void);

    uint8_t dec2bcd(uint8_t num);
    uint8_t bcd2dec(uint8_t num);
};

extern DS1307new RTC;

#endif

Hi

Naja, damit wäre dann die Fehlermeldung erklärt.
Im Code weiter oben steht:

Time DS1307new::getTime()

In der eben geposteten .h Datei steht hingegen:

void getTime(void);

Irgendwie passen .h und .cpp dateien nicht zusammen. Was aber richtig ist, kann ich nicht sagen, da ja die Erweiterung nicht von mir stammt und auch nicht von mir getestet wurde. :frowning:

Eventuell genügt es die .h Datei entsprechend anzupassen.

Grüße,
Oliver

hi,

danke für deinen Hinweis und deine Mühe, aber die Anpassung hat viele weitere Fehlermeldungen provoziert. Ich denke dieses Projekt ist die Mühe nicht wert. Es gibt einfach zu viele unterschiedliche Codebrocken und Hardware die untereinander nicht kompatibel sind. Mir scheint es ist einfacher eine Internetseite an mehrere Browser anzupassen, als mit Arduino eine Zeitschltuhr zu realisieren.

Ich versuch mich die Nacht noch ein wenig und wenn nicht klappt wandert der ganze Kram in die Tonne, wenns noch nicht mal mit ner Uhr klappt, kann der Rest nicht besser werden. Nochmal vielen Dank für eure Hilfe.

Gruß
Troy

Hallo,

die Nacht neigt sich dem Ende und ich habe eine Lösung meines Problems gefunden. Sie fungiert als Adapter zwischen den beiden Libs DS1307-->DS1307new. Ich habe die ursprüngliche DS1307new.h hierum erweitert:

class Time
{
public:
	uint8_t		hour;
	uint8_t		min;
	uint8_t		sec;
	uint8_t		date;
	uint8_t		mon;
	uint16_t	year;
	uint8_t		dow;

		Time();
};

außerdem habe ich dies zur DS1307new.cpp hinzu gefügt:

Time::Time()
{
	this->year = 2010;
	this->mon  = 1;
	this->date = 1;
	this->hour = 0;
	this->min  = 0;
	this->sec  = 0;
	this->dow  = 5;
}

Nun ist es möglich ein Time-Objekt zu erstellen. Dieses kann man dann hiermit:

Time ZeitstempelSetzen (Time value, int sekunden, int minuten, int stunden, int tag, int monat, int jahr, int wochentag)
{
    value.sec = sekunden;
    value.min = minuten;
    value.hour = stunden;
    value.date = tag;
    value.mon = monat;
    value.year = jahr;
    value.dow = wochentag;
    return value; 
}

mit der aktuellen Zeit/Datum füllen. Im Ergebnis ist es das gleiche was die DS1307 Karlsen-Lib mit getTime(); erzeugt.

Danke Leute, ohne Euch wäre ich nicht darauf gekommen. Arduino kann scheinbar doch Spass machen :grin: :grin: