Diese Arduino-basierte Echtzeituhr ist eine Digitaluhr zur Anzeige von Echtzeit mithilfe eines RTC-IC DS1307, der mit dem I2C-Protokoll arbeitet. Echtzeituhr bedeutet, dass sie auch nach einem Stromausfall läuft. Wenn die Stromversorgung wieder hergestellt wird, wird die Echtzeit unabhängig von der Zeit und Dauer angezeigt, in der sie ausgeschaltet war. In diesem Arduino- Weckerprojekt haben wir ein 16x2-LCD-Modul verwendet, um die Uhrzeit im Format "Stunde, Minute, Sekunden, Datum, Monat und Jahr" anzuzeigen. Eine Alarmoption wurde ebenfalls hinzugefügt und wir können die Alarmzeit einstellen. Sobald die Alarmzeit im internen EEPROM von Arduino gespeichert wurde, bleibt sie auch nach einem Reset oder einem Stromausfall gespeichert. Echtzeituhren werden üblicherweise in unseren Computern, Häusern, Büros und elektronischen Geräten verwendet, um sie in Echtzeit auf dem neuesten Stand zu halten.
Das I2C-Protokoll ist eine Methode zum Verbinden von zwei oder mehr Geräten über zwei Drähte mit einem einzigen System. Daher wird dieses Protokoll auch als Zweidrahtprotokoll bezeichnet. Es kann verwendet werden, um 127 Geräte an ein einzelnes Gerät oder einen einzelnen Prozessor zu kommunizieren. Die meisten I2C-Geräte arbeiten mit einer Frequenz von 100 kHz.
Schritte zum Schreiben von Daten von Master zu Slave (Slave-Empfangsmodus)
- Sendet die START-Bedingung an den Slave.
- Sendet die Slave-Adresse an den Slave.
- Schreibbit (0) an Slave senden.
- ACK-Bit vom Slave empfangen
- Sendet die Wortadresse an den Sklaven.
- ACK-Bit vom Slave empfangen
- Sendet Daten an den Slave.
- ACK-Bit vom Slave empfangen.
- Und zuletzt sendet STOP-Bedingung an Slave.
Schritte zum Lesen von Daten von Slave zu Master (Slave-Sendemodus)
- Sendet die START-Bedingung an den Slave.
- Sendet die Slave-Adresse an den Slave.
- Lesebit (1) an Slave senden.
- ACK-Bit vom Slave empfangen
- Vom Slave empfangene Daten
- ACK-Bit vom Slave empfangen.
- Sendet die STOP-Bedingung an den Slave.
Für den Bau dieser IC- basierten Digitaluhr RTC DS1307 haben wir hier Arduino Pro Mini verwendet. Sie können jedoch auch jedes andere Arduino-Modell wie Arduino Uno oder Arduino Nano verwenden. Zusammen mit der Arduino-Platine DS1307 RTC IC haben wir ein 16x2-LCD-Modul zur Anzeige von Uhrzeit und Datum, einen Quarzoszillator, einen Spannungsregler 7805, einen Summer sowie einige Transistoren und Widerstände verwendet.
Schaltplan und Beschreibung
In dieser Arduino-basierten digitalen Taktschaltung haben wir drei Hauptkomponenten verwendet: IC DS1307, Arduino Pro Mini Board und 16x2 LCD-Modul.
Hier wird Arduino verwendet, um die Zeit von ds1307 zu lesen und auf einem 16x2-LCD anzuzeigen. DS1307 sendet Uhrzeit / Datum mit 2 Zeilen an Arduino. Ein Summer wird auch zur Alarmanzeige verwendet, die piept, wenn der Alarm aktiviert wird. Im Folgenden wird ein Blockdiagramm gezeigt, um die Funktionsweise dieser Echtzeituhr zu verstehen.
Wie Sie im Schaltplan sehen können, sind die DS1307-Chip-Pins SDA und SCL mit den Arduino-Pins SDA und SCL verbunden, wobei der Pull-up-Widerstand den Standardwert HIGH bei Daten- und Taktleitungen hält. 32.768KHz Quarzoszillator ist mit DS1307 Chip verbunden ist, um genaue Verzögerung von 1 Sekunde zu erzeugen, und eine 3 - Volt - Batterie ist ebenfalls mit Pin 3 verbunden rd (BAT) von DS1307, die Laufzeit nach dem Stromausfall hält. 16x2 LCD ist im 4-Bit-Modus mit Arduino verbunden. Die Steuerpins RS, RW und En sind direkt mit den Arduino-Pins 2, GND und 3 verbunden. Der Daten-Pin D0-D7 ist mit den 4, 5, 6, 7 von Arduino verbunden. Ein Summer ist über einen NPN BC547-Transistor mit einem 1 k-Widerstand an seiner Basis mit dem Arduino-Pin Nummer 13 verbunden.
Drei Tasten, nämlich set, INC und Next, werden verwendet, um den Alarm im aktiven Low-Modus auf Pin 12, 11 und 10 von Arduino einzustellen. Wenn wir auf Set drücken, wird der Alarm-Set-Modus aktiviert und jetzt müssen wir den Alarm mithilfe der INC-Taste einstellen. Die Next-Taste wird zum Wechseln zur Ziffer verwendet. Das komplette Steckbrett-Setup dieser Echtzeituhr mit Alarm ist in der folgenden Abbildung dargestellt. Sie können auch ein detailliertes Tutorial zum digitalen Wecker mit dem AVR-Mikrocontroller lesen.
Programm Beschreibung
Um diese Echtzeituhr zu programmieren, haben wir einige Bibliotheken zum Extrahieren von Uhrzeit / Datum aus DS1307 und zum Anzeigen auf dem LCD verwendet, die unten angegeben sind:
Die Initialisierung von RTC, LCD und Eingangsausgang erfolgt in einer Setup-Schleife.
Der Rest der Dinge wie die Lesezeit und das Einstellen des Alarms werden im Abschnitt für die Leerenschleife ausgeführt.