Funktionen zur Steuerung der RTC DS3231
RTC bei Neuhold-Elektronik


TWI_RTCAddress ... Adresse der RTC (0x68)
Zeit und Datum setzen

void RTCSetDateTime(byte y, byte m, byte d, byte w, byte h, byte l, byte s)
{
// sets time and date data to DS3231
Wire.beginTransmission(TWI_RTCAddress);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(s)); // set seconds
Wire.write(decToBcd(l)); // set minutes
Wire.write(decToBcd(h)); // set hours
Wire.write(decToBcd(w)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(d)); // set date (1 to 31)
Wire.write(decToBcd(m)); // set month
Wire.write(decToBcd(y)); // set year (0 to 99)
Wire.endTransmission();
}


Zeit und Datum lesen
(Variablen müssen deklariert sein)

void RTCGetDateTime()
{
// Reset the register pointer
Wire.beginTransmission(TWI_RTCAddress);
Wire.write(null);
Wire.endTransmission();
Wire.requestFrom(TWI_RTCAddress, 7);
// A few of these need masks because certain bits are control bits
second = bcdToDec(Wire.read() & 0x7f);
minute = bcdToDec(Wire.read());
hour = bcdToDec(Wire.read() & 0x3f);
dayOfWeek = bcdToDec(Wire.read());
day = bcdToDec(Wire.read());
month = bcdToDec(Wire.read());
year = bcdToDec(Wire.read());
}


Funktion um den Takt-Ausgang (SQW) am Modul auf 1 Hz zu setzen.

void RTCSetTimer1Hz()
{
Wire.beginTransmission(TWI_RTCAddress);
Wire.write(0x0e);
Wire.write(0x00);
Wire.endTransmission();
}