Problem RTC 1307 Jahreszahl setzen ( nicht über 2012 )

Hallo Forum,

ich benutze das Adafruit Datalogger Shield mit dem RTC und möchte das Datum setzen.
Der Codeschnipsel zeigt die Befehle :
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,26);
RTC.set(DS1307_HR,18);
RTC.set(DS1307_DOW,3);
RTC.set(DS1307_DATE,29);
RTC.set(DS1307_MTH,4);
RTC.set(DS1307_YR,12);
RTC.start();
Das Problem ist, das ich nicht über eine Jahreszahl von 2012 hinauskomme, sondern
ab YR,13 ist es immer 2000 als Jahreszahl.
Als library benutze ich die DS1307

Was mache ich falsch ?
Gruß olmuk

Welche Bibliothek setzt Du ein (Link)? Mit dem Namen DS1307 gibt es sicher mehr als ein halbes Dutzend Bibliotheken. Ein Link zur Hardware wäre auch nicht schlecht.

olmuk:
Als library benutze ich die DS1307

Was mache ich falsch ?

Wenn Du diese Library-Funktion verwendest:

void DS1307::setDate(uint8_t date, uint8_t mon, uint16_t year)
{
	if (((date>0) && (date<=31)) && ((mon>0) && (mon<=12)) && ((year>=2000) && (year<3000)))
	{
		year -= 2000;
		_writeRegister(REG_YEAR, _encode(year));
		_writeRegister(REG_MON, _encode(mon));
		_writeRegister(REG_DATE, _encode(date));
	}
}

Dann musst Du zum Setzen des Jahres eine VIERSTELLIGE Jahreszahl zwischen 2000 und unter 3000 angeben, sonst passiert da gar nichts. Oder unvorhersehbarer Quatsch.

Da fehlt bei mir dann doch noch leider jede Menge Verständnis =(
Warum geht es dann bis 2012 ?

das Shield ist : https://learn.adafruit.com/adafruit-data-logger-shield/using-the-real-time-clock-1

Die library ist : #include <DS1307.h> und Anhang :

olmuk:
Warum geht es dann bis 2012 ?

Das funktioniert wahrscheinlich genau so wie bei Pipi Langstrumpf die Plumifikation:
Zwei mal drei macht vier,: widewidewitt und drei macht neune

Sie bekommt bei (2*3)+3 dann am Ende doch das richtige Ergebnis heraus.

Merke: Wenn man nur genug Fehler macht, dann ist es nicht vollkommen ausgeschlossen, dass manchmal am Ende doch das Richtige herauskommt.

Ich schätze also mal: Dein Sketch (und/oder die verwendete Library) enthält MEHR ALS NUR EINEN Programmfehler.

Die library ist : #include <DS1307.h> und Anhang :

Wir müssen wissen, welche Bibliothek Du einsetzt. Post den Link, von wo Du sie heruntergeladen hast. Wie sie heisst, hattest Du uns schon mitgeteilt, aber es gibt viele verschiedene Bibliotheken, die diesen Namen tragen und wir können nicht erraten, welche davon Du bei Dir einsetzt.
Diese Bibliotheken sind nicht fehlerfrei, nur weil sie im Internet zum Download angeboten werden. Unter Umständen hat genau diejenige, die Du einsetzt, einen solchen Fehler, aber den können wir nur aufspüren und beseitigen, wenn Du uns sagst, wie wir zum Source-Code kommen.

das Shield ist : https://learn.adafruit.com/adafruit-data-logger-shield/using-the-real-time-clock-1

Wieso verwendest Du nicht die Bibliothek, die dort empfohlen wird? Nur so aus Neugier.

@ pylon :

Weil ich es nicht geschafft habe den dow zu bekommen - vielleicht kannst Du mir da helfen ?

Gruß olmuk

@jurs : dem stimme ich zu, allerdings ist die Setzen-Funktion nur einmal notwendig und sonst nicht
verwendet = geht dann eher in Richtung library ( mein Sketch hat aufgrund meines "Wissens"
garantiert noch Fehler )
@pylon : ich habe nach Deiner Frage nochmal etwas gewühlt und dann die korrekte Bezeichnung der
Variable gefunden ( DayOfWeek > hatte scheinbar nicht genügend probiert ) und es funktioniert.

Es gibt scheinbar Unmengen von DS1307 libraries, allerdings war mir das Problem nicht aufgefallen da
ich die RTC mit der RTClib.h gestellt hatte und ich so 2014 hatte.

Danke für die Antworten
Gruss olmuk

Ich werde nicht ganz schlau aus Deinem letzten Post. Heisst das jetzt, dass Dein Problem gelöst ist?

Dann habe ich mich wohl unklar ausgedrückt - sorry.
Das Problem ist insofern gelöst das mit der RTClib.h wie in der Adafruit Beschreibung
das Stellen der RTC einwandfrei fuppt und ich nur die genaue Bezeichnung des
Wochentages nicht wusste..
Es könnte also ohne weiteres sein, das mit DS1307 libs ein Stellen von 2014 nicht funktioniert.
Ich kann das aus Zeitgründen momentan nicht weiter verfolgen, aber es wäre mal interessant
ob das auch bei jemand anderes auftritt.

Es könnte also ohne weiteres sein, das mit DS1307 libs ein Stellen von 2014 nicht funktioniert.

Mit welcher? Oder hast Du alle durchgetestet? Die RTClib.h ist übrigens auch eine DS1307 Lib. Falls Du Deine Lib gemeint hast, da hast Du uns immer noch nicht verraten, welche Du eingesetzt hattest.

Oh Mann, ich stelle mich wirklich dämlich an > siehe Anhang

Es gibt allerdings noch ein anderes Problem mit der Bitte um Hilfe :

Beim Öffnen des serial monitors gibt es einen Reset ???

Vielen Dank im voraus

Gruß olmuk

RTClib.h (1.54 KB)

RTClib.cpp (6.49 KB)

Forum1.ino (9.9 KB)

Das ist die RTClib, mit dieser funktioniert es ja, da nützt also wenig. Wenn ich die Bibliothek sehen wollte, dann jene, die nicht funktioniert, vielleicht hätten wir Dir dann sagen können, weshalb sie nicht funktioniert.

Beim Öffnen des serial monitors gibt es einen Reset ???

Das ist normal und gewollt, denn mit dieser Funktionalität wird der Arduino programmiert. Du kannst das deaktivieren, indem Du einen Kondensator von RST nach GND ziehst, allerdings funktioniert der Upload von neuen Sketches nicht mehr, solange diese Schaltung aktiv ist.