RTC Sensor speichert die Zeit nicht

Hallo, ich arbeite zurzeit in einem Universitätsprojekt mit der SenseboxMCU. Als zusätzliches Modul habe ich das RTC-RV8823 Modul. Da ich die Daten auf der SD-Karte speichern möchte, würde ich sie gerne mit einem Zeitstempel versehen. Das Problem ist jedoch, dass sich die Zeit des RTC-Modul trotz Batterie immer wieder zurücksetzt. Es ist durchaus möglich in einem Programm die Zeit zu setzen und diese richtige Zeit dann auch über das Selbe Programm anzeigen zu lassen, jedoch, wenn ich dann das Selbe Programm erneut ausführe ohne den rtc.set-Befehl hat sich die Zeit wieder zurückgesetzt. Hierbei ist auffällig, dass die Jahreszahl nicht immer die Gleiche ist. So war zum Beispiel schon 2001 ,2005 ,2007 ,2013 als Jahreszahlen angezeigt.

Code zum Zeit-setzen:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h> // http://librarymanager/All#Adafruit_GFX_Library
#include <Adafruit_SSD1306.h> // http://librarymanager/All#Adafruit_SSD1306
#include <senseBoxIO.h>
#include <RV8523.h>

char timestamp[20];

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
RV8523 rtc;


char* getTimeStamp() {
uint8_t sec, min, hour, day, month;
 uint16_t year;
 rtc.get(&sec, &min, &hour, &day, &month, &year);
 sprintf(timestamp, "%02d-%02d-%02dT%02d:%02d:%02dZ", year, month, day, hour, min, sec);
 return timestamp;
 }





void setup() {
senseBoxIO.powerI2C(true);
delay(2000);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.display();
delay(100);
display.clearDisplay();
rtc.begin();
rtc.start();
rtc.batterySwitchOver(1);
rtc.set(0, 0, 15, 3, 5, 2022);



}


void loop() {
  display.setCursor(0,0);
  display.setTextSize(1);
  display.setTextColor(WHITE,BLACK);
  display.println(getTimeStamp());
display.display();

}


//Code zum Zeitauslesen:


#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h> // http://librarymanager/All#Adafruit_GFX_Library
#include <Adafruit_SSD1306.h> // http://librarymanager/All#Adafruit_SSD1306
#include <senseBoxIO.h>
#include <RV8523.h>

char timestamp[20];

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
RV8523 rtc;


char* getTimeStamp() {
uint8_t sec, min, hour, day, month;
 uint16_t year;
 rtc.get(&sec, &min, &hour, &day, &month, &year);
 sprintf(timestamp, "%02d-%02d-%02dT%02d:%02d:%02dZ", year, month, day, hour, min, sec);
 return timestamp;
 }





void setup() {
senseBoxIO.powerI2C(true);
delay(2000);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.display();
delay(100);
display.clearDisplay();
rtc.begin();
rtc.start();
rtc.batterySwitchOver(1);



}


void loop() {
  display.setCursor(0,0);
  display.setTextSize(1);
  display.setTextColor(WHITE,BLACK);
  display.println(getTimeStamp());
display.display();

}

Hallo, selbes Problem hier, beim Umweltprojekt meines Sohns mit der senseBox:edu.
Identische Konstellation, die RTC RV8823 soll den Zeitstempel für die Daten auf der SD liefern.
Das Verhalten ist bei allen Systemen im Kurs gleich.

  • Das setzen der Uhrzeit mit rtc.set() funktioniert.
  • Nach dem Hochladen des neuen Sketch, ohne rtc.set(), wird Datum/Zeit immer noch richtig angezeigt.
  • Wird die USB Verbindung getrennt und wieder angeschlossen, zeigen Datum/Zeit willkürliche Daten.

Um dem Problem auf den Grund zu gehen, haben wir das Beispiel von RTC-Modul | senseBox benutzt. Damit sind alle anderen Komponenten, wie Sensoren und Display außen vor. Beim Testen waren diese dann auch nicht angeschlossen.
Das Verhalten war das gleiche, nach dem Trennen der Stromversorgung waren Datum/Uhrzeit weg.

Das RTC-Modul ist OK. Zum Testen haben wir das RTC-Modul mehrfach von der laufenden MCU getrennt. Nach dem Anstecken des RTC-Modul wurde immer die korrekte Uhrzeit angezeigt, d.h. sie lief im getrennten Zustand weiter.

Offensichtlich passiert etwas beim Neustart der MCU, das Datum/Zeit in der RTC ändert.
Beim Reset über den Taster der MCU oder das Hochladen eines Sketch ist es gelegentlich auch schon passiert, aber beim Trennen der Stromversorgung passiert es immer.

Nach weiteren Tests habe ich die WiFi-Bee als Verursacher ausgemacht.
Bei den zuvor gemachten Tests war die WiFi-Bee immer drin.

Ohne die WiFi-Bee funktioniert das Beispiel-Sketch wie erwartet. Auch nach dem Trennen der Spannungsversorgung der MCU kommt die korrekte Zeit aus der RTC.

Sobald aber die WiFi-Bee bestückt ist, tritt das o.g. Verhalten auf, dass nach dem Trennen der Versorgungsspannung Datum und Uhrzeit falsch sind.

1 Like