Schnittstelle zwischen RTC (DS1307) und Mikrocontroller und dessen Programmierung

Versuchen Sie Unser Instrument, Um Probleme Zu Beseitigen





RTC ist ein elektronisches Gerät, das eine wesentliche Rolle spielt Design eingebetteter Systeme in Echtzeit . Es bietet eine genaue Uhrzeit und ein genaues Datum in verschiedenen Anwendungen wie Systemuhr, Anwesenheitssystem für Schüler und Alarm usw., die die aktuelle Uhrzeit verfolgen und ein konsistentes Ergebnis für die jeweilige Aufgabe liefern. Dieser Artikel beschreibt die RTC-Schnittstelle mit dem 8051-Mikroroller und den grundlegenden Zugriff auf interne Register.

RTC-Schnittstelle mit 8051-Mikrocontroller

RTC-Schnittstelle mit 8051-Mikrocontroller



RTC-Programmierung und Schnittstelle

Die RTC-Schnittstelle zum 8051-Mikrocontroller ähnelt allen anderen Arten von „Echtzeituhren“, die an ihn angeschlossen sind. Schauen wir uns also die einfache RTC-Schnittstelle an 8051 Mikrocontroller und Programmierverfahren, das damit verbunden ist.


Schritt 1: Wählen Sie RTC-Gerät

Die verschiedenen Arten von RTC-Chips sind in der eingebetteten Echtzeitwelt verfügbar, die anhand verschiedener Kriterien wie Gehäusetyp, Versorgungsspannung und Pin-Konfiguration usw. klassifiziert werden. Einige Arten von RTC-Geräten sind



  • Serielle Zweidrahtschnittstelle (I2C-Bus)
  • Serielle Drei-Draht-Schnittstelle (USB-BUS)
  • Serielle Vierdrahtschnittstelle (SPI BUS)

Zunächst müssen wir den Typ des RTC-Geräts nach Kategorie auswählen, basierend auf Anforderungen wie I2C-Bus-RTC oder SPI-Bus-RTC oder anderen, die für die Schnittstelle mit dem jeweiligen Mikrocontroller geeignet sind. Dann können wir Funktionen des RTC-Geräts auswählen, abhängig von den Anforderungen der Anwendung wie Batterielebensdauer, geeignetes Gehäuse und Taktfrequenz. Betrachten wir die Zweidrahtschnittstelle RTC mit 8051-Mikrocontroller wie DS1307 .

Schritt 2: Internes Register und Adresse des RTC-Geräts

RTC steht für Echtzeituhr, die Jahre, Monate, Wochen, Tage, Stunden, Minuten und Sekunden basierend auf der Kristallfrequenz liefert. RTC besteht aus eingebaut RAM-Speicher zur Datenspeicherung . Bei Ausfall der Hauptstromversorgung wird eine Batteriesicherung bereitgestellt, indem eine Batterie an das RTC-Gerät angeschlossen wird.

RTC DB1307 Konfiguration:

Interne RTC-Blöcke und Pin-Diagramm

Interne RTC-Blöcke und Pin-Diagramm

A0, A1, A2: sind Adresspins des RTC DB1307-Chips, die zur Kommunikation mit dem Master-Gerät verwendet werden können. Wir können acht Geräte mit RTC-Schnittstelle steuern 8051 Mikrocontroller durch A0-, A1-, A2-Bits unter Verwendung des I2C-Protokolls.


VCC und GND: VCC und GND sind Stromversorgungs- bzw. Erdungsstifte. Dieses Gerät wurde mit einem Bereich von 1,8 V bis 5,5 V betrieben.

VBT: VBT ist ein Batteriestromversorgungsstift. Die Batteriestromquelle muss zwischen 2 V und 3,5 V gehalten werden.

SCL: SCL ist ein serieller Clock-Pin und wird zum Synchronisieren von Daten auf der seriellen Schnittstelle verwendet.

SDL: Es ist ein serieller Eingangs- und Ausgangspin. Es wird zum Senden und Empfangen der Daten auf der seriellen Schnittstelle verwendet.

Uhr aus: Es ist ein optionaler Rechteckwellen-Ausgangspin.

OSC0 und OSC1: Dies sind Quarzoszillatorstifte, die verwendet werden, um die Taktsignale an das RTC-Gerät zu liefern. Die Standardfrequenz für Quarzkristalle beträgt 22,768 kHz.

Geräteadressierung:

Das I2C-Busprotokoll ermöglicht viele Slave-Geräte gleichzeitig. Jedes Slave-Gerät muss aus einer eigenen Adresse bestehen, um es darzustellen. Das Master-Gerät kommuniziert mit einem bestimmten Slave-Gerät über eine Adresse. Die RTC-Geräteadresse lautet '0xA2', wobei '1010' vom Hersteller angegeben wird und A0, A1, A2 benutzerdefinierte Adressen sind, die zur Kommunikation von acht RTC-Geräten auf dem Gerät verwendet werden I2C-Busprotokoll .

Geräteadressierung

Geräteadressierung

Das R / W-Bit wird verwendet, um Lese- und Schreiboperationen in RTC auszuführen. Wenn R / W = 0 ist, wird eine Schreiboperation ausgeführt und R / W = 1 für eine Leseoperation.

Adresse des Lesevorgangs von RTC = '0xA3'

Adresse der Schreiboperation von RTC = '0xA2'

Speicherregister und Adresse:

RTC-Register befinden sich an Adresspositionen von 00h bis 0Fh und RAM-Speicherregister befinden sich an Adresspositionen von 08h bis 3Fh, wie in der Abbildung gezeigt. RTC-Register werden verwendet, um Kalenderfunktionen und die Fahrzeit des Tages bereitzustellen und die Wochenenden anzuzeigen.

Speicherregister und Adresse

Speicherregister und Adresse

Steuer- / Statusregister:

DB1307 besteht aus zwei zusätzlichen Registern wie control / status1 und control / status2, mit denen die Echtzeituhr und gesteuert werden unterbricht .

Kontroll- / Statusregister1:

Kontrollstatusregister1

Kontrollstatusregister1

  • TEST1 = 0 Normalmodus

= 1 EXT-Clock-Testmodus

  • STOP = 0 RTC startet

= 1 RTC-Stopp

  • TESTC = 0 Power On Reset deaktiviert

= Power On Reset aktiviert

Kontroll- / Statusregister2:

Kontrollstatusregister2

Kontrollstatusregister2

  • TI / TP = 0 INT ist die ganze Zeit aktiv

= 1 INT aktiv benötigte Zeit

  • AF = 0 Alarm stimmt nicht überein

= 1 Alarmübereinstimmung

  • TF = 0 Timerüberlauf tritt nicht auf

= 1 Timerüberlauf tritt auf

  • ALE = 0 Alarm Interrupts deaktivieren

= 1 Alarm-Interrupts aktiviert

  • TIE = 0 Timer-Interrupts deaktivieren

= 1 Timer-Interrupts aktivieren

Schritt 3: Schnittstelle von RTC ds1307 mit 8051

RTC kann sein Schnittstelle zum Mikrocontroller durch Verwendung verschiedener serieller Busprotokolle wie I2C und SPI-Protokolle die eine Kommunikationsverbindung zwischen ihnen herstellen. Die Abbildung zeigt eine Echtzeituhr, die mit dem 8051-Mikrocontroller unter Verwendung des I2C-Busprotokolls verbunden ist. I2C ist ein bidirektionales serielles Protokoll, das aus zwei Drähten wie SCL und SDA besteht, um Daten zwischen an den Bus angeschlossenen Geräten zu übertragen. Der 8051-Mikrocontroller verfügt über kein eingebautes RTC-Gerät, daher haben wir eine externe Verbindung über ein serielle Kommunikation zur Sicherstellung der vorhandenen Daten.

RTC-Schnittstelle mit 8051-Mikrocontroller

RTC-Schnittstelle mit 8051-Mikrocontroller

I2C-Geräte haben Open-Drain-Ausgänge, daher muss ein Pull-up-Widerstand mit einer Spannungsquelle an die I2C-Busleitung angeschlossen werden. Wenn die Widerstände nicht an die SCL- und SDL-Leitungen angeschlossen sind, funktioniert der Bus nicht.

Schritt 4: RTC-Datenrahmenformat

Da die RTC-Schnittstelle mit dem 8051-Mikrocontroller den I2C-Bus verwendet, erfolgt die Datenübertragung in Form von Bytes oder Paketen, und auf jedes Byte folgt eine Bestätigung.

Datenrahmen übertragen:

Im Sendemodus gibt der Master die Startbedingung frei, nachdem er das Slave-Gerät anhand des Adressbits ausgewählt hat. Das Adressbit enthält 7-Bit, die die Slave-Geräte als ds1307-Adresse anzeigen. Serielle Daten und serielle Uhr werden auf SCL- und SDL-Leitungen übertragen. START- und STOP-Bedingungen werden als Beginn und Ende einer seriellen Übertragung erkannt. Auf Empfangs- und Sendevorgänge folgt das R / W-Bit.

Datenrahmen übertragen

Datenrahmen übertragen

Start: In erster Linie die vom Master initiierte Datenübertragungssequenz, die die Startbedingung erzeugt.

7-Bit-Adresse: Danach sendet der Master die Slave-Adresse in zwei 8-Bit-Formaten anstelle einer einzelnen 16-Bit-Adresse.

Steuer- / Statusregisteradresse: Die Steuer- / Statusregisteradresse soll die Steuerstatusregister zulassen.

Kontroll- / Statusregister1: Das Steuerstatusregister1, mit dem das RTC-Gerät aktiviert wird

Kontroll- / Statusregister2: Es wird zum Aktivieren und Deaktivieren von Interrupts verwendet.

R / W: Wenn das Lese- und Schreibbit niedrig ist, wird die Schreiboperation ausgeführt.

ACH: Wenn im Slave-Gerät ein Schreibvorgang ausgeführt wird, sendet der Empfänger 1-Bit-ACK an den Mikrocontroller.

Halt: Nach Abschluss des Schreibvorgangs im Slave-Gerät sendet der Mikrocontroller eine Stoppbedingung an das Slave-Gerät.

Empfangen des Datenrahmens:

Datenrahmen empfangen

Datenrahmen empfangen

Start: In erster Linie die vom Master initiierte Datenübertragungssequenz, die die Startbedingung erzeugt.

7-Bit-Adresse: Danach sendet der Master die Slave-Adresse in zwei 8-Bit-Formaten anstelle einer einzelnen 16-Bit-Adresse.

Steuer- / Statusregisteradresse: Die Steuer- / Statusregisteradresse soll Steuerstatusregister zulassen.

Steuerungs- / Statusregister1: Das Steuerstatusregister1, mit dem das RTC-Gerät aktiviert wird

Kontroll- / Statusregister2: Es wird zum Aktivieren und Deaktivieren von Interrupts verwendet.

R / W: Wenn das Lese- und Schreibbit hoch ist, wird die Leseoperation ausgeführt.

ACH: Wenn im Slave-Gerät ein Schreibvorgang ausgeführt wird, sendet der Empfänger 1-Bit-ACK an den Mikrocontroller.

Halt: Nach Abschluss des Schreibvorgangs im Slave-Gerät sendet der Mikrocontroller eine Stoppbedingung an das Slave-Gerät.

Schritt 5: RTC-Programmierung

Schreibvorgang vom Master zum Slave:

  1. Geben Sie die Startbedingung vom Master zum Slave aus
  2. Übertragen Sie die Slave-Adresse im Schreibmodus auf die SDL-Leitung
  3. Senden Sie die Steuerregisteradresse
  4. Senden Sie den Steuer- / Statusregisterwert1
  5. Senden Sie den Steuerungs- / Statusregister2-Wert
  6. Senden Sie das Datum der gleichen Minuten, Sekunden und Stunden
  7. Senden Sie das Stoppbit

#einschließen

sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
void start ()
void wirte(unsigned char)
Verzögerung (vorzeichenloses Zeichen)

void main ()
{

Start()
Schreiben (0xA2) // Slave-Adresse //
Schreiben (0x00) // Steuerregisteradresse //
Schreiben (0x00) // Steuerregister 1 Wert //
write (0x00) // steuere regiter2 vlaue //
Schreiben (0x28) // Sek. Wert //
schreibe (0x50) // Minutenwert //
schreibe (0x02) // Stundenwert //
}}

void start ()
{

SDA = 1 // Daten verarbeiten //
SCL = 1 // Uhr ist hoch //
Verzögerung (100)
SDA = 0 // hat die Daten gesendet //
Verzögerung (100)
SCL = 0 // Taktsignal ist niedrig //
}}
void write (vorzeichenloses Zeichen d)
{

vorzeichenloses Zeichen k, j = 0 × 80
für (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
Verzögerung (4)
SCL = 0
}}
SDA=1
SCL = 1
Verzögerung (2)
c = SDA
Verzögerung (2)
SCL = 0
}}
ungültige Verzögerung (int p)
{
unsignedinta, b
Für (a = 0a<255a++) //delay function//
Für (b = 0b}}

Lesevorgang vom Slave zum Master:

#einschließen
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
void start ()
void write (usigned char)
void read ()
void ack ()
ungültige Verzögerung (vorzeichenloses Zeichen)
void main ()
{
Start()
Schreiben (0xA3) // Slave-Adresse im Lesemodus //
lesen()
Ach()
sec = Wert
}}
void start ()
{

SDA = 1 // Daten verarbeiten //
SCL = 1 // Uhr ist hoch //
Verzögerung (100)
SDA = 0 // hat die Daten gesendet //
Verzögerung (100)
SCL = 0 // Taktsignal ist niedrig //
}}
void write (vorzeichenloses Zeichen d)
{

vorzeichenloses Zeichen k, j = 0 × 80
für (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
Verzögerung (4)
SCL = 0
}}
SDA=1
SCL = 1
Verzögerung (2)
c = SDA
Verzögerung (2)
SCL = 0
}}
ungültige Verzögerung (int p)
{
unsignedinta, b
Für (a = 0a<255a++) //delay function//
Für (b = 0b}}
Void read ()
{
Vorzeichenloses Zeichen j, z = 0 × 00, q = 0 × 80
SDA=1
für (j = 0j<8j++)
{
SCL = 1
Verzögerung (100)
flag = SDA
if (flag == 1)

z = (z
void ack ()
{
SDA = 0 // SDA-Leitung geht auf niedrig //
SCL = 1 // Takt ist hoch bis niedrig //
Verzögerung (100)
SCL = 0
}}

Dies sind die notwendigen Schritte für die RTC-Schnittstelle mit dem 8051-Mikrocontroller. Zusätzlich zu diesen Schritten werden in diesem Artikel auch Datenrahmen erläutert, die zum Übertragen und Empfangen der Daten verwendet werden, um dem Benutzer das Verständnis bei entsprechender Programmierung zu erleichtern. Für weitere Hilfe zu diesem Konzept können Sie unten einen Kommentar hinterlassen.