RTC Problem -- HILFE --

Hallo zusammen,

seit einiger Zeit spiele ich schon mit dem Arduino und schreibe kleine Programme. Daneben auch ein RTC Modul (für dem Anfang zum spielen das RTC Modul von Sparkfun). Zu Beginn hat alles super funktioniert. D.h. ich habe eine Zeit gesetzt (ich lasse mir die Zeit auch über das LCD ausgeben) und die Uhr ging. Vom Strom getrennt (Batterie ist ja angeschlossen) wurde am darauffolgenden Tag die Zeit korrekt angezeigt. D.h. sie lief weiter.

Nun, nach etwa einem Monat Pause habe ich den Arduino wieder bestromt, um meine fFnktionen nochmal zu überprüfen sah ich plötzlich, dass 0:00 Uhr angegeben war. OK, ich setzte nochmal die aktuelle Zeit (z.B. 20:30) und die Uhr ging wieder (ab 20:30 Uhr--> 20:31 --> 20:32 --> 20:33 --> u.s.w.) als ich aber dann den Arduino vom Strom getrennt habe und wieder angeschlossen, war plötzlich wieder die Uhrzeit 20:30 angegeben.

Woran kann das liegen? Kann da irgendetwas kaputt gegangen sein? Die Spannung der Batterie habe ich überprüft, sie ist OK (3 V). Mir ist allerdings aufgefallen, dass das Modul (nach dem Einbau der Hauptplatine in das dafür vorgesehene Gerät) etwas locker in den Pin-Sockeln mit Platine verbunden ist. Kann es auch hiermit in irgendeiner Weise zusammenhängen?

Dass es mit der Batterie zusammenhängt kann ich mir nicht vorstellen. Die schreiben ja, dass sie mindestens 9 Jahre halten soll... aber hat die Batterie auch einwandfreien Kontakt?

Was Du schreibst mit der lockeren Verbindung des Moduls kann ich mir zwar nicht richtig vorstellen, aber so etwas würde ich auf jeden Fall ändern, gut sein kann das nicht. Aber ob das Problem mit dem RTC-Modul zusammenhängt? Ich glaube es eher nicht.

Kann es vielleicht an Deinem Sketch liegen?

Ich habe ein ähnliches Modul völlig problemlos im Einsatz.

Hi, danke vorerst für Deine Rückmeldung.

Das es an meinem Sketch liegt würde ich jetzt erstmal ausschließen. Ich habe hier nichts mehr geändert. Aber ich werde das heute nochmal überprüfen. Ich dachte nur ich frag mal schnell hier nach, vielleicht hat jemand das Problem auch schonmal gehabt.

Gruß,

Volker

Keine Lust den Sketch mal zu posten ?

Kann es sein das du in deinem Sketch (eventuell in der Setup()) die Uhrzeit auf 20:30 setzt und bei jedem Reset setzt er die uhr wieder auf deine 20:30 ein reines vergessen der Uhrzeit sollte die Uhr doch auf 0:00 setzen.
Gruß Max

Hi,

ich doof! Ich glaube es hat sich erledigt. Ich habs zwar noch nicht ausprobiert aber ich bin grad drauf gekommen. Ich habe nach dem erstem mal Upload vergessen, die "setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);"-Zeile auszukommentieren.

Kann das sein? So zieht der Arduino sich ja nach jedem Loop das Datum!

Gruß,

Volker

Hi Max,

ups, da waren wir wohl gleichzeitig. Ja das ist es wohl mir auch grade eingefallen ist. :sleeping:

Zaisow:
Kann es sein das du in deinem Sketch (eventuell in der Setup()) die Uhrzeit auf 20:30 setzt und bei jedem Reset setzt er die uhr wieder auf deine 20:30 ein reines vergessen der Uhrzeit sollte die Uhr doch auf 0:00 setzen.
Gruß Max

Davon würde ich nicht sicher ausgehen. Bei einer Batteriespannung, die am Funktionslimit liegt, hönnen unerwartete Effekte eintreten.
SRAM Speicherzellen haben nach dem Einschalten zufällige Zustände. Eine Spannungskontrolle bringt bei den meisten RTC die Register auf 0 und löscht das Ready-flag, das angibt, daß die Zeit richtig ist.

Grüße Uwe

Sketch posten !

Dann kann man das Problem auch schneller analysieren !

Mit großer Wahrscheinlichkeit die Zeile mit dem SET nicht auskommentiert!

Spreche da aus Erfahrung.

PS: Es kann immer am Code liegen! Deshalb immer mit Posten.

Hi,

also, den originalen Sketch habe ich modifiziert. Hier ein Auszug des Sketches einer Lampensteuerung für ein Riffaquarium mit blauen und weissen LEDS. Komplett hätte ich Ihn nicht posten können (zu viele Zeichen). Das SET habe ich jetzt hier schon wieder auskommentiert, werde es dann nachher uploaden. Ich Dummkopf habe nach meinem Uhr setzen (es hatte sich aus unerklärlichen Gründen wieder auf 0:00 gesetzt) vergessen das man es nur einmal uploaden muss.

Gruß,

Volker

/*

/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  S E T U P  |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/


void setup() {
  pinMode(ledPin1, OUTPUT);    // set the digital pin as output:
  pinMode(ledPin2, OUTPUT);    // set the digital pin as output:
  pinMode(fan, OUTPUT);      // Set analog pin 0 as a output
  pinMode(fuge, OUTPUT);      // Set analog pin 1 as a output
  pinMode(moon, OUTPUT);      // Set ditital pin 2 as a output
  sensors.begin();             // Start up the DS18B20 Temp library
  
  Serial.begin(115200);
  Serial.println("Hello.");

  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  S E T U P - D I S P L A Y |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin();

  // Change these values to what you want to set your clock to.
  // You probably only want to set your clock once and then remove
  // the setDateDs1307 call.
  second = 00;
  minute = 43 ;
  hour = 20;
  dayOfWeek = 3;  // Sunday is 0
  dayOfMonth = 15;
  month = 2;
  year = 12;
  
  //Use the next line for setting the clock
  //setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);

  analogWrite(blue, bluemin);
  analogWrite(white, whitemin);
  lcd.createChar(0, newChar);
  lcd.createChar(1, newChar1);
  lcd.createChar(2, newChar2);
  lcd.createChar(3, newChar3);
  lcd.createChar(4, newChar4);
  lcd.createChar(5, newChar5);
  lcd.createChar(6, newChar6);
  lcd.createChar(7, newChar7);
  lcd.begin(20, 4); // set up the LCD's number of rows and columns: 
  lcd.setCursor(0, 0);
  lcd.write(0);
  lcd.write(1);
  lcd.setCursor(4, 0);// set the cursor to column 0, line 0
  lcd.print("Volkers Riff");
  lcd.setCursor(18, 0);
  lcd.write(3);
  lcd.write(2);
  //lcd.setCursor(7, 1);
  //lcd.print("M:");
  lcd.setCursor(11, 1);
  lcd.print("B:");
  lcd.print(33*bluemin/85);
  lcd.setCursor(16, 1);
  lcd.print("W:");
  lcd.print(33*whitemin/85);
  lcd.setCursor(11, 2);
  lcd.print("L: ");
  lcd.setCursor(0, 2);
  lcd.print("W: ");
  lcd.setCursor(1, 3);
  lcd.print("Mond: ");
  lcd.setCursor(12, 3);
  lcd.print("Fan: ");
 
}

uwefed:
Davon würde ich nicht sicher ausgehen. Bei einer Batteriespannung, die am Funktionslimit liegt, hönnen unerwartete Effekte eintreten.
SRAM Speicherzellen haben nach dem Einschalten zufällige Zustände. Eine Spannungskontrolle bringt bei den meisten RTC die Register auf 0 und löscht das Ready-flag, das angibt, daß die Zeit richtig ist.

Grüße Uwe

Deshalb solltest Du auch in Deinem Programm als allererstes dieses "readyflag" prüfen damit Du weißt, ob die Uhr noch richtig gelaufen ist.
In meinem Fall mit Ricoh-RTC heißt die Funktion z.B. "checkOscillation" (I2C-Steuerung über "TwoWireRTC" library).

Gruß, mmi.

Was ich schon mal hatte die Rtc bei einer prellenden spannungsversorgungschin mAl aus dem tritt kam. Z.b. Beim ein und ausstecken. ein Kondensator von 10uF hat das Problem dann beseitigt. Die Uhr verlor sporadisch die Zeit.