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
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
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
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 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
- 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
- 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
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
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
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:
- Wydaj warunek początkowy z mastera na slave
- Prześlij adres slave w trybie zapisu na linii SDL
- Wyślij adres rejestru kontrolnego
- Wyślij kontrolę / status register1value
- Wyślij wartość register2 sterowania / stanu
- Wyślij datę, podobnie jak minuty, sekundy i godziny
- 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.