RTC3231 Aufbau

Die Uhrzeit des RTC DS3231 Modul vom Arduino auslesen

Das Uhrzeitmodul RTC DS3231 (Real Time Clock ZS-042) ist eine genaue Uhr mit eingebauten Quarz. Dieser Quarz wird intern Temperatur überwacht und korrigiert sodass sie einen Fehler von nur +-2ppm hat, was ca. 1 Minute pro Jahr entspricht.

Ich habe das RTC3231 mit 4 Leitungen an den Arduino Uno angeschlossen.

3,3V > VCC
GND > GND
A5 > SCL
A4 > SDA rtc3231-aufbau-1000

Die Uhrzeit und das Datum sollen auf der Konsole ausgegeben werden. Hier das Programm.

// Die Uhrzeit auslesen von der Uhr RTC3231
// Die Uhr ist sehr genau mit einem Temperatur kompensierten Takt
// Der Fehler beträgt +-2ppm bei 0-40°C oder max ca. 1 Minute pro Jahr
//
// Matthias Busse 6.11.2016 Version 1.0

#include "Wire.h"
#define DS3231_ADDRESSE 0x68

void setup() {
  Wire.begin();
  Serial.begin(38400);
}

void loop() {
  zeigeZeit(); // Zeit ausgeben
  delay(1000); // jede Sekunde
}

void leseDS3231zeit(byte *sekunde, byte *minute,byte *stunde, byte *wochentag, byte *tag, byte *monat, byte *jahr) {
  Wire.beginTransmission(DS3231_ADDRESSE);
  Wire.write(0); // DS3231 Register zu 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_ADDRESSE, 7); // 7 Byte Daten vom DS3231 holen
  *sekunde = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *stunde = bcdToDec(Wire.read() & 0x3f);
  *wochentag = bcdToDec(Wire.read());
  *tag = bcdToDec(Wire.read());
  *monat = bcdToDec(Wire.read());
  *jahr = bcdToDec(Wire.read());
}

void zeigeZeit(){
byte sekunde, minute, stunde, wochentag, tag, monat, jahr;
  leseDS3231zeit(&sekunde, &minute, &stunde, &wochentag, &tag, &monat, &jahr);   // Daten vom DS3231 holen
  if (tag < 10) { Serial.print("0");} 
  Serial.print(tag); // ausgeben T.M.J H:M:S
  Serial.print(":");
  if (monat < 10) { Serial.print("0");}
  Serial.print(monat);
  Serial.print(":20");
  Serial.print(jahr);
  Serial.print(" ");
  if (stunde < 10) { Serial.print("0");}
  Serial.print(stunde, DEC); // byte in Dezimal zur Ausgabe
  Serial.print(":");
  if (minute < 10) { Serial.print("0");}
  Serial.print(minute, DEC);
  Serial.print(":");
  if (sekunde < 10) { Serial.print("0"); }
  Serial.println(sekunde, DEC);
}

byte decToBcd(byte val) {
// Dezimal Zahl zu binary coded decimal (BCD) umwandeln
  return((val/10*16) + (val%10));
}

byte bcdToDec(byte val) {
// BCD (binary coded decimal) in Dezimal Zahl umwandeln
  return((val/16*10) + (val%16));
}

Und hier die Ausgabe

RTC3231 Ausgabe

Verwendet wurden:
Arduino Uno
DS3231 Board, ZS-042 von ebay
Arduino 1.6.5

von Matthias Busse

Weitere Beiträge zum DS3231:
Den Arduino Quarztakt auf 3ppm genau bestimmen mit der DS3231 RTC
Von der RTC DS3231 die Temperatur auslesen mit dem Arduino
Rechteck 1Hz (+-2ppm) ausgeben mit dem RTC DS3231 und dem Arduino
Die Uhrzeit des RTC DS3231 Modul vom Arduino einstellen

6 Gedanken zu „Die Uhrzeit des RTC DS3231 Modul vom Arduino auslesen

  1. Pingback: Die Uhrzeit des RTC3231 Modul vom Arduino einstellen | Shelvin – Elektronik ausprobiert und erläutert

  2. Pingback: Rechteck 1Hz (+-2ppm) ausgeben mit dem RTC DS3231 und dem Arduino | Shelvin – Elektronik ausprobiert und erläutert

  3. Pingback: Von der RTC DS3231 die Temperatur auslesen mit dem Arduino | Shelvin – Elektronik ausprobiert und erläutert

  4. Pingback: Den Arduino Quarztakt auf 3ppm genau bestimmen mit der DS3231 RTC | Shelvin – Elektronik ausprobiert und erläutert

  5. Frank

    Hallo, ich habe mit dem schreiben von den Alarmregistern alles mögliche getestet, und ich bekommen einfach nicht hin ohne lib Datei Weckzeiten in das Modul ds3231 zu schreiben und auszulesen. Hättest Du vielleicht einen Ansatz oder ein Beispie? Gruß Frank

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.