In diesem Beitrag möchte ich dir die RTC DS1302 vorstellen und zeigen, wie diese am Arduino programmiert wird.
Dieser Beitrag soll als Grundlage für kommende Beiträge zum betrieb einer RTC vom Typ DS1302 dienen und daher zunächst erläutern, wie diese am Arduino angeschlossen und via SPI programmiert wird.
Inhaltsverzeichnis
- Wozu dient eine RealTimeClock?
- Aufbau der Schaltung am Arduino Mikrocontroller
- Programmieren der RTC DS1302 in der Arduino IDE
Wozu dient eine RealTimeClock?
Eine RealTimeClock (RTC) dient dazu, die genaue Uhrzeit und das Datum auch dann beizubehalten, wenn das Hauptsystem ausgeschaltet ist. Sie ist besonders nützlich für Anwendungen, bei denen zeitgesteuerte Abläufe oder die Aufzeichnung zeitlicher Daten erforderlich sind, wie zum Beispiel in Datenloggern, zeitgesteuerten Schaltungen oder in Systemen, die nach einem Neustart sofort die aktuelle Zeit benötigen. Die RTC bleibt dank einer eigenen Batterie auch ohne Stromversorgung aktiv und liefert so kontinuierlich präzise Zeitinformationen.
Aufbau der Schaltung am Arduino Mikrocontroller
Die RTC DS1302 wird über die SPI-Schnittstelle mit dem Mikrocontroller verbunden. Im Gegensatz zur DS3132, die über I2C kommuniziert, benötigt die DS1302 lediglich einen zusätzlichen Draht.
Für den Aufbau der Schaltung benötigst du:
- einen Arduino Mikrocontroller*
- ein USB-Datenkabel*
- eine RTC DS1302*
- ein LC-Display*, I2C, 16×2
- acht Breadboardkabel*, 10 cm
- ein 170 Pin Breadboard*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Das kleine Breadboard benötigen wir, da beide Komponenten (RTC & LC-Display) mit 5V betrieben werden und der Mikrocontroller lediglich über einen 5V Ausgang verfügt. In meinem Fall habe ich ein 400 Pin Breadboard genutzt, auf welchen ich den Mikrocontroller gesteckt habe.
Maker Nano zur Programmierung
Für diesen Beitrag verwende ich den kleinen Maker Nano dieser bietet einige coole Features. Wenn du mehr über diesen erfahren möchtest, dann schaue einmal in den Beitrag Vorstellung des Maker Nano von Cytron.
Du kannst aber auch einen herkömmlichen Arduino Nano oder Arduino UNO verwenden, der Code und der Aufbau funktionieren hier reibungslos.
Programmieren der RTC DS1302 in der Arduino IDE
Für die Programmierung der RTC DS1302 nutzen wir die einfache Bibliothek VirtuabotixRTC welche du vom GitHub Repository chrisfryer78 / ArduinoRTClibrary als ZIP-Datei herunterladen kannst.
Wie du eine ZIP-Bibliothek in die Arduino IDE integrierst, habe ich dir bereits im Beitrag Arduino IDE, Einbinden einer Bibliothek ausführlich erläutert.
// Importieren der Bibliothek // zum ansteuern der RTC DS1302 #include <virtuabotixRTC.h> // Importieren der Bibliothek // zum ansteuern eines LC-Displays #include <LiquidCrystal_I2C.h> // Initialisierung des LC-Displays // (I2C Adresse: 0x27, 20 Zeichen, 2 Zeilen) LiquidCrystal_I2C lcd(0x27, 20, 2); // Initialisierung des Objektes für die RTC #define CLK 6 #define DAT 7 #define RST 8 virtuabotixRTC rtcDS1302(CLK, DAT, RST); // Array mit den Wochentagen String dayOfWeeks[] = { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" }; void setup() { //beginn der seriellen Kommunikation mit 9600 baud Serial.begin(9600); // setzen des Zeitstempels, diese Zeile sollte einmalig ausgeführt werden // und beim erneuten Upload auskommentiert werden // Format: Sekunden, Minuten, Stunden, Tag der Woche, Tag im Monat, Monat, Jahr rtcDS1302.setDS1302Time(0, 30, 18, 2, 5, 11, 2024); // Initialisieren des Displays lcd.init(); // aktivieren der Hintergrundbeleuchtung lcd.backlight(); } void loop() { // Aktualisieren der RTC rtcDS1302.updateTime(); // Ausgeben der Daten auf der seriellen Schnittstelle char zeit[30]; sprintf(zeit, "%02d:%02d:%02d", rtcDS1302.hours, rtcDS1302.minutes, rtcDS1302.seconds); char datum[30]; sprintf(datum, "%02d.%02d.%04d", rtcDS1302.dayofmonth, rtcDS1302.month, rtcDS1302.year); Serial.print(datum); Serial.print(" "); Serial.println(zeit); // löschen des Displays lcd.clear(); // setzen der Cursorposition lcd.setCursor(0, 0); // schreiben des Wochentags // der Wochentag beginnt mit dem Index 1 jedoch das Array mit 0 // daher wird dieser Wert um 1 reduziert lcd.print(dayOfWeeks[rtcDS1302.dayofweek - 1]); lcd.setCursor(3, 0); lcd.print(datum); lcd.setCursor(0, 1); lcd.print(zeit); // eine Pause von 1 Sekunde einlegen delay(1000); }
1 thought on “DS1302 RTC mit SPI-Schnittstelle: So programmierst du die Echtzeituhr am Arduino”