Łączenie RTC (DS1307) z mikrokontrolerem i jego programowaniem

Wypróbuj Nasz Instrument Do Eliminowania Problemów





RTC to urządzenie elektroniczne, które odgrywa istotną rolę w projektowanie systemów wbudowanych w czasie rzeczywistym . Zapewnia dokładny czas i datę w różnych aplikacjach, takich jak zegar systemowy, system obecności uczniów i alarm itp., Które śledzą aktualny czas i zapewniają spójne wyniki dla odpowiedniego zadania. W artykule przedstawiono interfejs RTC z mikrokotrolerem 8051 oraz podstawowe zasady dostępu do rejestrów wewnętrznych.

Połączenie RTC z mikrokontrolerem 8051

Połączenie RTC z mikrokontrolerem 8051



Programowanie i łączenie zegara czasu rzeczywistego

Interfejs RTC z mikrokontrolerem 8051 jest podobny do wszystkich innych rodzajów „zegarów czasu rzeczywistego”, z którymi jest połączony. Przyjrzyjmy się więc prostemu interfejsowi RTC z Mikrokontroler 8051 i procedura programowania z tym związana.


Krok 1: Wybierz urządzenie RTC

W świecie wbudowanym czasu rzeczywistego dostępne są różne rodzaje chipów RTC, które są klasyfikowane na podstawie różnych kryteriów, takich jak typ pakietu, napięcie zasilania i konfiguracja pinów itp. Kilka typów urządzeń RTC jest



  • Dwuprzewodowy interfejs szeregowy (magistrala I2C)
  • Trójprzewodowy interfejs szeregowy (magistrala USB)
  • Czteroprzewodowy interfejs szeregowy (SPI BUS)

Najpierw musimy wybrać typ urządzenia RTC według kategorii w oparciu o wymagania, takie jak I2C Bus RTC lub SPI Bus RTC lub inne, które są odpowiednie do połączenia z odpowiednim mikrokontrolerem. Następnie możemy wybrać cechy urządzenia RTC w zależności od wymagań aplikacji, takich jak żywotność baterii, odpowiedni pakiet i częstotliwość zegara. Rozważmy połączenie dwuprzewodowe RTC z mikrokontrolerem 8051, takim jak DS1307 .

Krok 2: Rejestr wewnętrzny i adres urządzenia RTC

RTC oznacza zegar czasu rzeczywistego, który podaje lata, miesiące, tygodnie, dni, godziny, minuty i sekundy w oparciu o częstotliwość kryształów. RTC składa się z wbudowanego Pamięć RAM do przechowywania danych . Podtrzymanie bateryjne zostanie zapewnione w przypadku awarii głównego zasilania poprzez podłączenie baterii do urządzenia RTC.

Konfiguracja RTC DB1307:

Wewnętrzne bloki RTC i schemat pinów

Wewnętrzne bloki RTC i schemat pinów

A0, A1, A2: to piny adresowe układu RTC DB1307, które mogą służyć do komunikacji z urządzeniem nadrzędnym. Możemy sterować ośmioma urządzeniami za pomocą interfejsu RTC Mikrokontroler 8051 przez bity A0, A1, A2 przy użyciu protokołu I2C.


VCC i GND: VCC i GND to odpowiednio piny zasilania i uziemienia. To urządzenie działało w zakresie od 1,8 V do 5,5 V.

VBT: VBT to pin zasilania bateryjnego. Zasilanie bateryjne musi być utrzymywane w zakresie od 2 V do 3,5 V.

SCL: SCL jest pinem zegara szeregowego i służy do synchronizacji danych w interfejsie szeregowym.

SDL: Jest to szeregowy pin wejścia i wyjścia. Służy do przesyłania i odbierania danych przez interfejs szeregowy.

Wylogowanie: Jest to opcjonalny pin wyjściowy fali prostokątnej.

OSC0 i OSC1: Są to piny oscylatora kwarcowego, które służą do dostarczania sygnałów zegarowych do urządzenia RTC. Standardowa częstotliwość kryształu kwarcu wynosi 22,768 kHz.

Adresowanie urządzeń:

Protokół magistrali I2C umożliwia jednoczesne korzystanie z wielu urządzeń podrzędnych. Każde urządzenie slave musi mieć własny adres do reprezentowania na nim. Urządzenie master komunikuje się z określonym urządzeniem slave za pomocą adresu. Adres urządzenia RTC to „0xA2”, gdzie „1010” jest nadawany przez producenta, a A0, A1, A2 to adres definiowany przez użytkownika, który jest używany do komunikacji z ośmioma urządzeniami RTC na Protokół magistrali I2C .

Adresowanie urządzenia

Adresowanie urządzenia

Bit R / W jest używany do wykonywania operacji odczytu i zapisu w RTC. Jeśli R / W = 0, operacja zapisu jest wykonywana, a R / W = 1 dla operacji odczytu.

Adres operacji odczytu RTC = „0xA3”

Adres operacji zapisu RTC = „0xA2”

Rejestry pamięci i adres:

Rejestry RTC są zlokalizowane w lokalizacjach adresowych od 00h do 0Fh, a rejestry pamięci RAM są zlokalizowane w lokalizacjach adresowych od 08h do 3Fh, jak pokazano na rysunku. Rejestry RTC służą do zapewnienia funkcjonalności kalendarza i godziny jazdy oraz do wyświetlania weekendów.

Rejestry pamięci i adres

Rejestry pamięci i adres

Rejestry kontroli / statusu:

DB1307 składa się z dwóch dodatkowych rejestrów, takich jak sterowanie / stan1 i sterowanie / stan2, które są używane do sterowania zegarem czasu rzeczywistego i przerywa .

Rejestr sterowania / stanu 1:

Rejestr stanu kontroli 1

Rejestr stanu kontroli 1

  • TEST1 = 0 tryb normalny

= 1 tryb testowy zegara zewnętrznego

  • STOP = 0 RTC uruchamia się

= 1 zatrzymanie RTC

  • TESTC = 0 reset po włączeniu wyłączony

= resetowanie po włączeniu włączone

Rejestr sterowania / stanu 2:

Rejestr stanu kontroli 2

Rejestr stanu kontroli 2

  • TI / TP = 0 INT aktywny cały czas

= 1 INT aktywny wymagany czas

  • AF = 0 Alarm nie pasuje

= 1 Dopasowanie alarmu

  • TF = 0 Przepełnienie timera nie występuje

= 1 Wystąpiło przepełnienie timera

  • ALE = 0 Przerwania alarmowe wyłączone

= 1 Przerwania alarmu włączone

  • TIE = 0 Przerwania timera wyłączone

= 1 Przerwania timera włączone

Krok 3: Łączenie RTC ds1307 z 8051

RTC może być połączony z mikrokontrolerem używając różnych protokołów magistrali szeregowej, takich jak I2C i Protokoły SPI które zapewniają łącze komunikacyjne między nimi. Rysunek pokazuje interfejs zegara czasu rzeczywistego z mikrokontrolerem 8051 przy użyciu protokołu magistrali I2C. I2C to dwukierunkowy protokół szeregowy, który składa się z dwóch przewodów, takich jak SCL i SDA, do przesyłania danych między urządzeniami podłączonymi do magistrali. Mikrokontroler 8051 nie ma wbudowanego urządzenia RTC, dlatego połączyliśmy się zewnętrznie za pomocą Komunikacja szeregowa za zapewnienie składanych danych.

Połączenie RTC z mikrokontrolerem 8051

Połączenie RTC z mikrokontrolerem 8051

Urządzenia I2C mają wyjścia z otwartym drenem, dlatego rezystory podciągające muszą być podłączone do linii magistrali I2C ze źródłem napięcia. Jeśli rezystory nie zostaną podłączone do linii SCL i SDL, magistrala nie będzie działać.

Krok 4: Format ramek danych RTC

Ponieważ interfejs RTC z mikrokontrolerem 8051 korzysta z magistrali I2C, transfer danych odbywa się w postaci bajtów lub pakietów, a po każdym bajcie następuje potwierdzenie.

Przesyłanie ramki danych:

W trybie nadawania master zwalnia warunek startu po wybraniu urządzenia slave za pomocą bitu adresu. Bit adresu zawiera 7-bitów, które wskazują urządzenia slave jako adres ds1307. Dane szeregowe i zegar szeregowy są przesyłane liniami SCL i SDL. Warunki START i STOP są rozpoznawane jako początek i koniec transferu szeregowego. Po operacjach odbioru i transmisji następuje bit R / W.

Przesyłanie ramki danych

Przesyłanie ramki danych

Początek: Przede wszystkim sekwencja przesyłania danych zainicjowana przez mastera generującego warunek startowy.

Adres 7-bitowy: Następnie master wysyła adres slave w dwóch formatach 8-bitowych zamiast pojedynczego adresu 16-bitowego.

Adres rejestru kontroli / stanu: Adres rejestru sterowania / stanu ma zezwalać na rejestry stanu sterowania.

Rejestr sterowania / stanu 1: Rejestr statusu sterowania1 używany do włączania urządzenia RTC

Rejestr sterowania / stanu 2: Służy do włączania i wyłączania przerwań.

R / W: Jeśli wartość bitów odczytu i zapisu jest niska, wykonywana jest operacja zapisu.

NIESTETY: Jeżeli operacja zapisu jest wykonywana w urządzeniu slave, to odbiornik wysyła 1-bitowy ACK do mikrokontrolera.

Zatrzymać: Po zakończeniu operacji zapisu w urządzeniu slave mikrokontroler wysyła stan zatrzymania do urządzenia slave.

Odbieranie ramki danych:

Odbieranie ramki danych

Odbieranie ramki danych

Początek: Przede wszystkim sekwencja przesyłania danych zainicjowana przez mastera generującego warunek startowy.

Adres 7-bitowy: Następnie master wysyła adres slave w dwóch formatach 8-bitowych zamiast pojedynczego adresu 16-bitowego.

Adres rejestru kontroli / stanu: Adres rejestru sterowania / stanu ma zezwalać na rejestry stanu sterowania.

Rejestr sterowania / stanu1: Rejestr stanu sterowania1 używany do włączania urządzenia RTC

Rejestr sterowania / stanu 2: Służy do włączania i wyłączania przerwań.

R / W: Jeśli wartość bitów odczytu i zapisu jest wysoka, wykonywana jest operacja odczytu.

NIESTETY: Jeżeli operacja zapisu jest wykonywana w urządzeniu slave, to odbiornik wysyła 1-bitowy ACK do mikrokontrolera.

Zatrzymać: Po zakończeniu operacji zapisu w urządzeniu slave mikrokontroler wysyła stan zatrzymania do urządzenia slave.

Krok 5: Programowanie RTC

Napisz operację z Master do Slave:

  1. Wydaj warunek początkowy z mastera na slave
  2. Prześlij adres slave w trybie zapisu na linii SDL
  3. Wyślij adres rejestru kontrolnego
  4. Wyślij kontrolę / status register1value
  5. Wyślij wartość register2 sterowania / stanu
  6. Wyślij datę, podobnie jak minuty, sekundy i godziny
  7. Wyślij bit stopu

#zawierać

sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
void start ()
void hosts (unsigned char)
opóźnienie (znak bez znaku)

void main ()
{

początek()
write (0xA2) // adres slave //
write (0x00) // adres rejestru kontrolnego //
write (0x00) // wartość rejestru sterującego 1 //
write (0x00) // control regiter2 vlaue //
write (0x28) // wartość sec //
write (0x50) // wartość minutowa //
write (0x02) // wartość godzin //
}

void start ()
{

SDA = 1 // przetwarzanie danych //
SCL = 1 // zegar jest wysoki //
opóźnienie (100)
SDA = 0 // wysłał dane //
opóźnienie (100)
SCL = 0 // sygnał zegara jest niski //
}
void write (unsigned char d)
{

bez znaku char k, j = 0 × 80
dla (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
opóźnienie (4)
SCL = 0
}
SDA = 1
SCL = 1
opóźnienie (2)
c = SDA
opóźnienie (2)
SCL = 0
}
nieważne opóźnienie (int p)
{
unsignedinta, b
Dla (a = 0a<255a++) //delay function//
Dla (b = 0b}

Odczytaj operację ze slave do mastera:

#zawierać
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
void start ()
void write (usigned char)
void read ()
void ACK ()
void delay (unsigned char)
void main ()
{
początek()
write (0xA3) // adres slave w trybie odczytu //
czytać()
Niestety()
sec = wartość
}
void start ()
{

SDA = 1 // przetwarzanie danych //
SCL = 1 // zegar jest wysoki //
opóźnienie (100)
SDA = 0 // wysłał dane //
opóźnienie (100)
SCL = 0 // sygnał zegara jest niski //
}
void write (unsigned char d)
{

bez znaku char k, j = 0 × 80
dla (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
opóźnienie (4)
SCL = 0
}
SDA = 1
SCL = 1
opóźnienie (2)
c = SDA
opóźnienie (2)
SCL = 0
}
nieważne opóźnienie (int p)
{
unsignedinta, b
Dla (a = 0a<255a++) //delay function//
Dla (b = 0b}
Nieważne przeczytaj ()
{
Znak bez znaku j, z = 0 × 00, q = 0 × 80
SDA = 1
dla (j = 0j<8j++)
{
SCL = 1
opóźnienie (100)
flaga = SDA
if (flaga == 1)

z = (z
void ACK ()
{
SDA = 0 // Linia SDA przechodzi na niski //
SCL = 1 // zegar od wysokiego do niskiego //
opóźnienie (100)
SCL = 0
}

Są to kroki niezbędne do połączenia RTC z mikrokontrolerem 8051. Oprócz tych kroków, ramki danych używane do przesyłania i odbierania danych są również omówione w tym artykule w celu zrozumienia przez użytkownika odpowiedniego programowania. Aby uzyskać dalszą pomoc dotyczącą tej koncepcji, możesz zostawić komentarz poniżej.