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();
}