RTC DS 3132 beginnt bei Spannungsausfall zur Ursprungszeit

Guten Tag,
das Problem steht in der Themabeschreibung.
Ich nutze einen Mega 2560 R3 und habe eine Balkonbewässerung damit realisiert. Nun möchte ich über einen tft 3,5" die Zeit anzeigen lassen, was auch gut funktioniert. Wenn ich aber den Arduino vom Stromnetz trenne oder ihn einfach resette, wird das Datum und die Zeit angezeigt, welches beim ersten Hochladen des Sketches eingelesen wurde. Danach zählt er die Uhrzeit von da aus weiter. Das passiert auch ohne Batterie im RTC.
Das ist der vereinfachte Sketch.

#include <Adafruit_GFX.h> 
#include <MCUFRIEND_kbv.h> 
MCUFRIEND_kbv tft;

#include <Arduino.h>
#include <Wire.h>      
#include "RTClib.h"

RTC_Millis rtc;

#include <Fonts/FreeSans9pt7b.h>

#define BLACK   0x0000
#define GREEN   0x07E0

void setup() {
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));


    Serial.begin(9600);
    uint16_t ID = tft.readID();
    tft.begin(ID);
    tft.setRotation(1);
              }

void loop() {

         tft.fillScreen(BLACK);
         tft.setTextColor(GREEN, BLACK);
         tft.setCursor(20, 80);
         tft.setTextSize(2);
         tft.print(" Heute ist der ");        
    Datum();
         tft.setCursor(20, 120);
         tft.print(" Es ist jetzt: ");
    Uhrzeit();
         delay(1000);
            }

void Datum() {
     DateTime now = rtc.now(); 
            tft.print (now.day(), DEC);
            tft.print (".");
            tft.print (now.month(), DEC);
            tft.print (".");         
            tft.print (now.year(), DEC);
              }
              
void Uhrzeit() {
     DateTime now = rtc.now();
            tft.print (" ");          
            tft.print (now.hour(), DEC);
            tft.print (":");
            tft.print (now.minute(), DEC);
            tft.print (":");
            tft.print (now.second(), DEC);            
                }  

Wie behält der RTC die aktuelle Zeit bei Spannungsausfall?
Noch ne andere Frage: Sollte die rote LED eigentlich auch leuchten, wenn nur die Batterie den RTC mit Spannung versorgt?
Danke schon mal fürs Lesen.
Gruß
Uwe.

Nach dem ersten hochladen kommentiere diese Zeile aus:

Lade danach den Sketch erneut hoch

gut ist.

Zeit einmal einstellen und die Zeile auskommentieren

//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

Hei :wink:
Du hast wahrscheinlich 20 Finger :wink:
Grüße

Ej komm, ich hab Dir 8 Minuten Wartezeit gelassen :slight_smile:

Hallo,
danke für die schnellen Antworten. habe das so getan. Jetzt zeigt das Display 6.2.2106. Die Zeit stimmt auch nicht mehr. Hat also nicht funktioniert.

Dann ist was faul.
Darüber hinaus ist Dein Code nicht schick.

Der Code:

#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;

#include <Arduino.h>
#include <Wire.h>
#include "RTClib.h"

RTC_Millis rtc;

#include <Fonts/FreeSans9pt7b.h>

#define BLACK   0x0000
#define GREEN   0x07E0

void setup()
{
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  Serial.begin(9600);
  uint16_t ID = tft.readID();
  tft.begin(ID);
  tft.setRotation(1);
}

void loop()
{
  DateTime now = rtc.now();
  tft.fillScreen(BLACK);
  tft.setTextColor(GREEN, BLACK);
  tft.setCursor(20, 80);
  tft.setTextSize(2);
  Datum();
  tft.setCursor(20, 120);
  Uhrzeit();
  delay(1000);
}

void Datum()
{
  tft.print(F(" Heute ist der "));
  tft.print (now.day(), DEC);
  tft.print (".");
  tft.print (now.month(), DEC);
  tft.print (".");
  tft.print (now.year(), DEC);
}

void Uhrzeit()
{
  tft.print(F(" Es ist jetzt: "));
  tft.print (" ");
  tft.print (now.hour(), DEC);
  tft.print (":");
  tft.print (now.minute(), DEC);
  tft.print (":");
  tft.print (now.second(), DEC);
}

Einmal auf das Board spielen.
Die Uhr dürfte dann einigermassen stimmen.

Dann den Code aufspielen:

#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;

#include <Arduino.h>
#include <Wire.h>
#include "RTClib.h"

RTC_Millis rtc;

#include <Fonts/FreeSans9pt7b.h>

#define BLACK   0x0000
#define GREEN   0x07E0

void setup()
{
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  Serial.begin(9600);
  uint16_t ID = tft.readID();
  tft.begin(ID);
  tft.setRotation(1);
}

void loop()
{
  DateTime now = rtc.now();
  tft.fillScreen(BLACK);
  tft.setTextColor(GREEN, BLACK);
  tft.setCursor(20, 80);
  tft.setTextSize(2);
  Datum();
  tft.setCursor(20, 120);
  Uhrzeit();
  delay(1000);
}

void Datum()
{
  tft.print(F(" Heute ist der "));
  tft.print (now.day(), DEC);
  tft.print (".");
  tft.print (now.month(), DEC);
  tft.print (".");
  tft.print (now.year(), DEC);
}

void Uhrzeit()
{
  tft.print(F(" Es ist jetzt: "));
  tft.print (" ");
  tft.print (now.hour(), DEC);
  tft.print (":");
  tft.print (now.minute(), DEC);
  tft.print (":");
  tft.print (now.second(), DEC);
}

Weicht Die Uhr jetzt massiv ab, wenn Du den Saft weg nimmst, ist die Batterie vermutlich leer.

Also erst tauschen und dann weitermachen.

Die Batterie must aber in der RTC sein sonst verliert er die zeit.

versuch wen Du 3231 hast

RTC_DS3231 rtc;

Nein, die leuchtet nur wen + und GND anliegt = wird über Mega versorgt

So.
Vielen Dank an alle für eure Antworten.

hat funktioniert!
Hatte jetzt ne Weile keine Zeit, habe das Projekt dieser Tage wieder rausgekramt, und da fiel mir auch das Problem wieder vor die Füße.
Nochmal vielen Dank!
Beste Grüße
Uwe.

Danke für Rückmeldung :wink:

Gruß Bernhard

ist doch selbstverständlich. Schließlich habt ihr mir ja geholfen. Ich hab zu danken :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.