Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

Lektion 16: Echtzeituhr-Modul (DS1302)

In dieser Lektion lernen Sie, wie Sie ein Echtzeituhr-Modul (RTC) mit einem Arduino einrichten und verwenden. Wir werden die Initialisierung des RTC DS1302-Moduls, die Anzeige des aktuellen Datums und der Uhrzeit auf dem seriellen Monitor und die Sicherstellung der genauen Zeitmessung behandeln. Diese Sitzung ist ideal für diejenigen, die sich für zeitbasierte Operationen in eingebetteten Systemen interessieren. Sie bietet praktische Erfahrungen im Umgang mit Datums- und Zeiteinstellungen, der Verwendung von RTC-Bibliotheken und der Fehlerbehebung bei gängigen Problemen. Dieses Projekt ist für fortgeschrittene Lernende geeignet, die mit den Grundlagen des Arduino vertraut sind.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein komplettes Kit zu kaufen. Hier ist der Link:

Name

ITEMS IN THIS KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

Sie können die Komponenten auch separat über die folgenden Links kaufen.

Component Introduction

Purchase Link

Arduino UNO R3 or R4

KAUFEN

Echtzeituhr-Modul (DS1302)

KAUFEN

Verkabelung

../_images/Lesson_16_DS1302_module_circuit_uno_bb.png

Code

Bemerkung

Um die Bibliothek zu installieren, verwenden Sie den Arduino Library Manager und suchen Sie nach „Rtc by Makuna“ und installieren Sie diese.

Codeanalyse

  1. Initialisierung und Einbindung der Bibliotheken

    Bemerkung

    Um die Bibliothek zu installieren, verwenden Sie den Arduino Library Manager und suchen Sie nach „Rtc by Makuna“ und installieren Sie diese.

    Hier werden die notwendigen Bibliotheken für das DS1302 RTC-Modul eingebunden.

    #include <ThreeWire.h>
    #include <RtcDS1302.h>
    
  2. Pins definieren und RTC-Instanz erstellen

    Kommunikationspins werden definiert und eine Instanz des RTC erstellt.

    const int IO = 4;    // DAT
    const int SCLK = 5;  // CLK
    const int CE = 2;    // RST
    
    ThreeWire myWire(4, 5, 2);  // IO, SCLK, CE
    RtcDS1302<ThreeWire> Rtc(myWire);
    
  3. setup() function

    Diese Funktion initialisiert die serielle Kommunikation und richtet das RTC-Modul ein. Verschiedene Überprüfungen werden durchgeführt, um sicherzustellen, dass das RTC korrekt läuft.

    void setup() {
      Serial.begin(9600);
    
      Serial.print("compiled: ");
      Serial.print(__DATE__);
      Serial.println(__TIME__);
    
      Rtc.Begin();
    
      RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
      printDateTime(compiled);
      Serial.println();
    
      if (!Rtc.IsDateTimeValid()) {
        // Common Causes:
        //    1) first time you ran and the device wasn't running yet
        //    2) the battery on the device is low or even missing
    
        Serial.println("RTC lost confidence in the DateTime!");
        Rtc.SetDateTime(compiled);
      }
    
      if (Rtc.GetIsWriteProtected()) {
        Serial.println("RTC was write protected, enabling writing now");
        Rtc.SetIsWriteProtected(false);
      }
    
      if (!Rtc.GetIsRunning()) {
        Serial.println("RTC was not actively running, starting now");
        Rtc.SetIsRunning(true);
      }
    
      RtcDateTime now = Rtc.GetDateTime();
      if (now < compiled) {
        Serial.println("RTC is older than compile time!  (Updating DateTime)");
        Rtc.SetDateTime(compiled);
      } else if (now > compiled) {
        Serial.println("RTC is newer than compile time. (this is expected)");
      } else if (now == compiled) {
        Serial.println("RTC is the same as compile time! (not expected but all is fine)");
      }
    }
    
  4. loop() function

    Diese Funktion ruft periodisch das aktuelle Datum und die Uhrzeit vom RTC ab und gibt sie auf dem seriellen Monitor aus. Sie überprüft auch, ob das RTC weiterhin ein gültiges Datum und eine gültige Uhrzeit beibehält.

    void loop() {
      RtcDateTime now = Rtc.GetDateTime();
    
      printDateTime(now);
      Serial.println();
    
      if (!now.IsValid()) {
        // Common Causes:
        //    1) the battery on the device is low or even missing and the power line was disconnected
        Serial.println("RTC lost confidence in the DateTime!");
      }
    
      delay(5000);  // five seconds
    }
    
  5. Funktion zum Drucken von Datum und Uhrzeit

    Eine Hilfsfunktion, die ein RtcDateTime-Objekt nimmt und das formatierte Datum und die Uhrzeit auf dem seriellen Monitor ausgibt.

    void printDateTime(const RtcDateTime& dt) {
      char datestring[20];
    
      snprintf_P(datestring,
                 countof(datestring),
                 PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
                 dt.Month(),
                 dt.Day(),
                 dt.Year(),
                 dt.Hour(),
                 dt.Minute(),
                 dt.Second());
      Serial.print(datestring);
    }