Zum Hauptinhalt springen

RTC-Modul

Das RTC-Modul ermöglicht es dir, die Uhrzeit auch ohne Stromversorgung zu speichern. Dies kann besonders nützlich sein, wenn keine Internetverbindung verfügbar ist und Messwerte offline z.B. auf der SD Karte gespeichert werden sollen. Damit die Uhrzeit auch ohne Stromversorgung gespeichert werden kann, ist zudem eine Knopfzellenbatterie von Nöten.

Anschluss

Nachdem die Knopfzellenbatterie in die Halterung eingefügt wurde, wird das RTC-Modul an einen I2C Anschluss der senseBox angeschlossen.

Uhrzeit einrichten

Bevor du das RTC Modul verwendest, muss als Erstes die Anfangsuhrzeit gesetzt werden. Dies muss nur ein einziges Mal geschehen vorausgesetzt, die Batterie wird nicht von dem Modul getrennt. In folgendem Sketch wird die Uhrzeit und das Datum im setup gesetzt und im loop auf dem seriellen Monitor ausgegeben. Denk dran, die aktuelle Zeit im setup beim Befehl rtc.set(...) selbst zu setzen.

#include <RV8523.h>
//#inlcude <SenseBoxMCU.h> only use with blockly code and commend out senseBoxIO.h
#include <senseBoxIO.h>
#include <Wire.h>
#define BUFF_MAX 32

RV8523 rtc;
unsigned int recv_size = 0;
char recv[BUFF_MAX];

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
delay(200);

Serial.println("Init RTC...");
rtc.begin();
rtc.start();
rtc.set24HourMode();
rtc.set(SECOND, MINUTE, HOUR, DAY, MONTH, YEAR); // Aktuelle Uhrzeit / Datum HIER setzen!
rtc.batterySwitchOver(1);
}


void loop()
{
uint8_t sec, min, hour, day, month;
uint16_t year;

//Uhrzeit befindet sich in den einzelnen Variablen !
rtc.get(&sec, &min, &hour, &day, &month, &year);

//serial output
Serial.print("\nTime: ");
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(min, DEC);
Serial.print(":");
Serial.print(sec, DEC);

Serial.print("\nDate: ");
Serial.print(day, DEC);
Serial.print(".");
Serial.print(month, DEC);
Serial.print(".");
Serial.print(year, DEC);

//wait a second
delay(1000);
}

Uhrzeit auslesen

Ist die Uhrzeit gesetzt und die RTC-Uhr zählt die Sekunden, kann diese nun in jedem beliebigen Sketch ausgelesen werden. Die RTC-Uhr startest du dann wie alle anderen I2C Sensoren auch. Achte bei der RTC-Uhr nur darauf, dass du nicht aus Versehen den rtc.set() Befehl erneut aufrufst und somit die Uhrzeit wieder zurücksetzt.

#include <RV8523.h>
//#inlcude <SenseBoxMCU.h> only use with blockly code and commend out senseBoxIO.h
#include <senseBoxIO.h>
#include <Wire.h>
#define BUFF_MAX 32

RV8523 rtc;
unsigned int recv_size = 0;
char recv[BUFF_MAX];

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);

Serial.println("Init RTC...");
delay(200);
rtc.begin();
rtc.start();
rtc.batterySwitchOver(1);

}
void loop()
{
uint8_t sec, min, hour, day, month;
uint16_t year;

//Uhrzeit befindet sich in den einzelnen Variablen !
rtc.get(&sec, &min, &hour, &day, &month, &year);

//serial output
Serial.print("\nTime: ");
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(min, DEC);
Serial.print(":");
Serial.print(sec, DEC);

Serial.print("\nDate: ");
Serial.print(day, DEC);
Serial.print(".");
Serial.print(month, DEC);
Serial.print(".");
Serial.print(year, DEC);
//wait a second
delay(1000);
}