Ten zegar czasu rzeczywistego oparty na Arduino jest zegarem cyfrowym do wyświetlania czasu rzeczywistego za pomocą RTC IC DS1307, który działa na protokole I2C. Zegar czasu rzeczywistego oznacza, że działa nawet po awarii zasilania. Po ponownym podłączeniu zasilania wyświetla czas rzeczywisty, niezależnie od czasu i czasu, w którym był wyłączony. W tym projekcie budzika Arduino zastosowaliśmy moduł LCD 16x2 do wyświetlania czasu w formacie „godzina, minuta, sekundy, data, miesiąc i rok”. Dodano również opcję Alarm i możemy ustawić czas alarmu. Gdy czas alarmu zostanie zapisany w wewnętrznej pamięci EEPROM arduino, pozostaje zapisany nawet po zresetowaniu lub awarii prądu. Zegary czasu rzeczywistego są powszechnie stosowane w naszych komputerach, domach, biurach i urządzeniach elektronicznych do ich aktualizacji w czasie rzeczywistym.
Protokół I2C to metoda łączenia dwóch lub więcej urządzeń przy użyciu dwóch przewodów do jednego systemu, dlatego protokół ten jest również nazywany protokołem dwuprzewodowym. Może służyć do komunikacji 127 urządzeń z pojedynczym urządzeniem lub procesorem. Większość urządzeń I2C działa na częstotliwości 100Khz.
Kroki do zapisu danych z mastera do slave (tryb odbioru slave)
- Wysyła warunek START do slave.
- Wysyła adres slave do slave.
- Wyślij bit zapisu (0) do slave'a.
- Odebrano bit ACK od slave'a
- Wysyła słowa adresowane do niewolnika.
- Odebrano bit ACK od slave'a
- Wysyła dane do slave.
- Odebrano bit ACK od slave'a.
- Ostatni wysyła stan STOP do slave'a.
Kroki odczytu danych ze slave do master (tryb transmisji slave)
- Wysyła warunek START do slave.
- Wysyła adres slave do slave.
- Wyślij odczyt (1) do slave.
- Odebrano bit ACK od slave'a
- Otrzymano dane od slave'a
- Odebrano bit ACK od slave'a.
- Wysyła stan STOP do slave'a.
Aby zbudować ten zegar cyfrowy oparty na RTC DS1307 IC , użyliśmy tutaj Arduino Pro Mini, ale możesz również użyć dowolnego innego modelu Arduino, takiego jak Arduino Uno lub Arduino Nano. Wraz z płytką Arduino, układem DS1307 RTC IC, zastosowaliśmy moduł LCD 16x2 do wyświetlania czasu i daty, oscylator kwarcowy, regulator napięcia 7805, buzzer oraz kilka tranzystorów i rezystorów.
Schemat obwodu i opis
W tym obwodzie zegara cyfrowego opartego na Arduino, zastosowaliśmy trzy główne komponenty, którymi są IC DS1307, Arduino Pro Mini Board i moduł LCD 16x2.
Tutaj arduino służy do odczytu czasu z ds1307 i wyświetlenia go na wyświetlaczu LCD 16x2. DS1307 wysyła godzinę / datę za pomocą 2 linii do arduino. Brzęczyk jest również używany do wskazania alarmu, który wydaje dźwięk, gdy alarm jest aktywowany. Schemat blokowy jest pokazany poniżej, aby zrozumieć działanie tego zegara czasu rzeczywistego.
Jak widać na schemacie obwodu, pin układu DS1307 SDA i SCL są podłączone do pinów arduino SDA i SCL z rezystorem podciągającym, który utrzymuje domyślną wartość WYSOKI na liniach danych i zegarowych. 32.768kHz oscylator kwarcowy jest połączony z DS1307 układ do generowania dokładnie jeden drugiego opóźnienia, a bateria 3 V jest również połączony sworzeń 3 rd (BAT) z DS1307 który utrzymuje czas trwania po awarii zasilania elektrycznego. LCD 16x2 jest połączony z arduino w trybie 4-bitowym. Piny sterujące RS, RW i En są bezpośrednio podłączone do pinu 2, GND i 3 arduino, a styk danych D0-D7 jest podłączony do 4, 5, 6, 7 arduino. Brzęczyk jest połączony z pinem arduino nr 13 poprzez tranzystor NPN BC547 z rezystorem 1 k u podstawy.
Trzy przyciski a mianowicie set, INC i Next służą do ustawienia alarmu na pinach 12, 11 i 10 arduino w aktywnym trybie niskim. Po naciśnięciu set włącza się tryb ustawiania alarmu i teraz musimy ustawić alarm za pomocą przycisku INC, a przycisk Next służy do przejścia do cyfry. Pełną konfigurację płytki prototypowej tego zegara czasu rzeczywistego z alarmem pokazano na poniższym obrazku. Możesz również zapoznać się ze szczegółowym samouczkiem na temat cyfrowego budzika z mikrokontrolerem AVR.
opis programu
Aby zaprogramować ten zegar czasu rzeczywistego, wykorzystaliśmy kilka bibliotek do wyodrębniania czasu / daty z DS1307 i wyświetlania na wyświetlaczu LCD, które podano poniżej:
Inicjalizacja RTC, LCD i wyjścia wejściowego odbywa się w pętli konfiguracji.
Reszta rzeczy, takich jak odczyt czasu, ustawianie alarmu, odbywa się w sekcji pustej pętli.