- Wymagane składniki
- 4-cyfrowy 7-segmentowy wyświetlacz
- 74HC595 Rejestr przesuwny IC
- Moduł DS3231 RTC
- Schemat obwodu
- Programowanie Arduino UNO do multipleksowania siedmiosegmentowego wyświetlacza
Cyfrowe zegary ścienne stają się coraz bardziej popularne w dzisiejszych czasach i są lepsze niż zegar analogowy, ponieważ zapewnia dokładny czas w godzinach, minutach i sekundach oraz ułatwia odczytanie wartości. Niektóre zegary cyfrowe mają również wiele funkcji, takich jak wyświetlanie temperatury, wilgotności, ustawianie wielu alarmów itp. Większość zegarów cyfrowych wykorzystuje wyświetlacz siedmiosegmentowy.
Wcześniej zbudowaliśmy wiele obwodów zegarów cyfrowych wykorzystujących 7-segmentowe wyświetlacze lub 16x2 LCD. Tutaj możesz zobaczyć kompletne projekty PCB zegara cyfrowego opartego na AVR. Ten samouczek dotyczy tworzenia zegara cyfrowego poprzez multipleksowanie wyświetlaczy z czterema 7 segmentami przy użyciu Arduino UNO i wyświetlanie czasu w formacie HH: MM.
Wymagane składniki
- 4-cyfrowy 7-segmentowy wyświetlacz
- 74HC595 IC
- Moduł DS3231 RTC
- Arduino UNO
- Płytka prototypowa
- Przewody łączące
4-cyfrowy 7-segmentowy wyświetlacz
4-cyfrowy wyświetlacz 7-segmentowy ma cztery połączone ze sobą wyświetlacze siedmiosegmentowe lub można powiedzieć, że jest multipleksowany razem. Służą do wyświetlania wartości liczbowych, a także niektórych alfabetów z miejscami dziesiętnymi i dwukropkiem. Wyświetlacz może być używany w obu kierunkach. Cztery cyfry są przydatne do tworzenia zegarów cyfrowych lub podobnego zliczania liczb od 0 do 9999. Poniżej znajduje się wewnętrzny schemat 4-cyfrowego 7-segmentowego wyświetlacza.
Każdy segment posiada jedną diodę LED z indywidualnym sterowaniem diodami LED. Istnieją dwa typy wyświetlaczy siedmiosegmentowych, takie jak wspólna anoda i wspólna katoda. Powyższe zdjęcie przedstawia 7-segmentowy wyświetlacz ze wspólną anodą.
Wspólna anoda
We wspólnej anodzie wszystkie dodatnie zaciski (anody) wszystkich 8 diod LED są połączone razem, nazywane COM. Wszystkie ujemne zaciski są pozostawione same lub podłączone do pinów mikrokontrolera. Używając mikrokontrolera, jeśli logika LOW jest ustawiona na podświetlenie określonego segmentu LED i ustawia logikę High, aby wyłączyć diodę LED.
Wspólna katoda
We wspólnej katodzie wszystkie ujemne zaciski (katoda) wszystkich 8 diod LED są połączone razem, nazywane COM. Wszystkie dodatnie zaciski są pozostawione same lub podłączone do pinów mikrokontrolera. Używając mikrokontrolera, jeśli ustawisz logikę HIGH, aby podświetlić diodę LED i ustaw LOW, aby wyłączyć diodę LED.
Dowiedz się więcej o wyświetlaczach 7-segmentowych tutaj i sprawdź, jak można je połączyć z innymi mikrokontrolerami:
- 7-segmentowy wyświetlacz współpracujący z Arduino
- 7-segmentowy wyświetlacz współpracujący z Raspberry Pi
- Połączenie wyświetlacza siedmiosegmentowego z ARM7-LPC2148
- 7-segmentowy wyświetlacz współpracujący z mikrokontrolerem PIC
- 7-segmentowy wyświetlacz współpracujący z mikrokontrolerem 8051
74HC595 Rejestr przesuwny IC
Układ IC 74HC595 znany również jako 8-bitowe wejście szeregowe - rejestr przesuwny wyjścia równoległego. Ten układ scalony może odbierać dane wejściowe szeregowo i może sterować równolegle 8 pinami wyjściowymi. Jest to przydatne w zmniejszaniu liczby pinów używanych z mikrokontrolera. Wszystkie projekty związane z rejestrami przesuwnymi 74HC595 można znaleźć tutaj.
Działanie 74HC595 IC:
Ten układ scalony wykorzystuje trzy piny, takie jak zegar, dane i zatrzask z mikrokontrolerem do sterowania 8 pinami wyjściowymi układu scalonego. Zegar służy do dostarczania ciągłych impulsów z mikrokontrolera, a pin danych służy do wysyłania danych, takich jak to, które wyjście musi być włączone lub wyłączone o odpowiednim czasie zegara.
Pinout:
Kod PIN |
Nazwa pinu |
Opis |
1,2,3,4,5,6,7 |
Piny wyjściowe (Q1 do Q7) |
74HC595 ma 8 pinów wyjściowych, z których 7 to te szpilki. Można nimi sterować seryjnie |
8 |
Ziemia |
Podłączony do masy mikrokontrolera |
9 |
(Q7) Wyjście szeregowe |
Ten pin jest używany do podłączenia więcej niż jednego 74HC595 jako kaskadowego |
10 |
(MR) Główny reset |
Resetuje wszystkie wyjścia do stanu niskiego. Do normalnej pracy należy trzymać wysoko |
11 |
(SH_CP) Zegar |
To jest pin zegara, do którego musi być doprowadzony sygnał zegara z MCU / MPU |
12 |
(ST_CP) Zatrzask |
Kołek zatrzaskowy służy do aktualizacji danych do pinów wyjściowych. Jest aktywny wysoko |
13 |
(OE) Wyjście włączone |
Włączenie wyjścia służy do wyłączania wyjść. Do normalnej pracy należy trzymać nisko |
14 |
(DS) Dane szeregowe |
To jest pin, do którego wysyłane są dane, na podstawie którego sterowanych jest 8 wyjść |
15 |
(Q0) Wyjście |
Pierwszy pin wyjściowy. |
16 |
Vcc |
Ten pin zasila układ scalony, zwykle używane jest + 5V. |
Moduł DS3231 RTC
DS3231 to moduł RTC. RTC oznacza zegar czasu rzeczywistego. Moduł ten służy do zapamiętywania czasu i daty, nawet gdy obwód nie jest zasilany. Posiada podtrzymanie bateryjne CR2032 do pracy modułu w przypadku braku zasilania zewnętrznego. Ten moduł zawiera również czujnik temperatury. Moduł może być używany w projektach wbudowanych, takich jak tworzenie zegara cyfrowego ze wskaźnikiem temperatury itp. Oto kilka przydatnych projektów wykorzystujących go:
- Automatyczny karmnik dla zwierząt wykorzystujący Arduino
- Interfejs modułu RTC (DS3231) z mikrokontrolerem PIC: zegar cyfrowy
- Interfejs modułu RTC (DS3231) z MSP430: Zegar cyfrowy
- Zegar czasu rzeczywistego ESP32 wykorzystujący moduł DS3231
- Cyfrowy zegar ścienny na płytce drukowanej za pomocą mikrokontrolera AVR Atmega16 i DS3231 RTC
Pinout DS3231:
Nazwa pinu |
Posługiwać się |
VCC |
Podłączony do dodatniego źródła zasilania |
GND |
Podłączony do masy |
SDA |
Szeregowy pin danych (I2C) |
SCL |
Szeregowy pin zegara (I2C) |
SQW |
Styk wyjściowy fali prostokątnej |
32K |
Wyjście oscylatora 32K |
Funkcje i dane techniczne:
- RTC liczy sekundy, minuty, godziny i rok
- Cyfrowy czujnik temperatury o dokładności ± 3ºC
- Zarejestruj się, aby skorzystać z opcji Aging
- Interfejs I2C 400 kHz
- Niskie zużycie energii
- Podtrzymanie bateryjne CR2032 o żywotności od dwóch do trzech lat
- Napięcie robocze: 2,3 do 5,5 V.
Schemat obwodu
Połączenie obwodu między DS3231 RTC i Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Połączenia obwodów między układem 74HC595 a Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (dane) |
4 |
13-OE (zatrzask) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Połączenia obwodów między IC 74HC595 i 4-cyfrowym siedmiosegmentowym a Arduino UNO:
4-DigitSevenSegment |
IC 74HC595 |
Arduino UNO |
ZA |
Q0 |
- |
b |
Q1 |
- |
do |
Q2 |
- |
re |
Pytanie 3 |
- |
mi |
Q4 |
- |
fa |
Pytanie 5 |
- |
sol |
Pytanie 6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
Programowanie Arduino UNO do multipleksowania siedmiosegmentowego wyświetlacza
Pełny kod i działające wideo są dołączone na końcu tego samouczka. W sekcji programowania zostanie wyjaśnione, w jaki sposób czas (godzina i minuta) jest pobierany z modułu RTC w formacie 24-godzinnym, a następnie konwertowany do odpowiedniego formatu w celu wyświetlenia ich na 4-cyfrowym 7-segmentowym wyświetlaczu.
Do połączenia modułu DS3231 RTC z Arduino UNO służy magistrala I2C Arduino UNO. Biblioteka o nazwie
W tej koncepcji godzina i minuta są najpierw pobierane z RTC i są łączone razem, jak 0930 (21:30), a następnie poszczególne cyfry są oddzielane, jak tysiące, sto, dziesiątki, jednostka, a poszczególne cyfry konwertowane na format binarny, taki jak 0 do 63 (0111111). Ten kod binarny jest wysyłany do rejestru przesuwnego, a następnie z rejestru przesuwnego do siedmiosegmentowego, pomyślnie wyświetlając cyfrę 0 na siedmiosegmentowym wyświetlaczu. W ten sposób cztery cyfry są multipleksowane i wyświetlana jest godzina i minuta.
Początkowo dołączona jest niezbędna biblioteka, taka jak biblioteka DS3231 i biblioteka Wire (biblioteka I2C).
#zawierać
Kołki są zdefiniowane dla sterowania siedmiosegmentowego. Te elementy sterujące będą odgrywać ważną rolę w multipleksowaniu wyświetlacza.
# zdefiniuj zatrzaskPin 5 # zdefiniuj zegarPin 6 # zdefiniuj danePin 4 # zdefiniuj kropkę 2
Zmienne są deklarowane w celu przechowywania przekonwertowanych lub surowych wyników pobranych z RTC.
int h; // Zmienna zadeklarowana dla godziny int m; // Zmienna zadeklarowana dla minuty int tysiące; int setki; int tens; jednostka int; bool h24; bool PM;
Następnie obiekt klasy DS3231 jest zadeklarowany jako RTC, aby uprościć użycie w dalszych wierszach.
DS3231 RTC;
Ponieważ moduł RTC jest połączony z Arduino za pomocą komunikacji I2C. Tak więc wire.begin () jest używane do rozpoczęcia komunikacji I2C z domyślnym adresem RTC, ponieważ nie ma innych modułów I2C.
Wire.begin ();
Tryb stykowe są określone, czy będzie zachowywał się jak GPIO wejściowego lub wyjściowego.
pinMode (9, WYJŚCIE); pinMode (10, WYJŚCIE); pinMode (11, WYJŚCIE); pinMode (12, WYJŚCIE); pinMode (zatrzaskPin, WYJŚCIE); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (kropka, WYJŚCIE);
Pętla działa w nieskończoność i zajmuje czas w godzinach i minutach z modułu RTC DS3231. „h24” wskazuje 24-godzinną zmienną formatu.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Następnie godzina i minuty są łączone w jedną liczbę (na przykład jeśli godzina wynosi 10, a min wynosi 60, to liczba to 10 * 100 = 1000 + 60 = 1060).
liczba int = h * 100 + m;
Te poszczególne cyfry z numeru uzyskuje (przykład 1060- 1 tys 0 jest hundered, 1 jest dziesiąta i ostatnia cyfra to 0). Aby oddzielić cyfry, używany jest operator modułu. Na przykład w 1060, aby uzyskać 1, to 1060/1000 = 1,06% 10 = 1). Tak więc oddzielne cyfry są przechowywane w oddzielnych zmiennych.
int tysiące = liczba / 1000% 10; int setki = liczba / 100% 10; int tens = liczba / 10% 10; jednostka int = liczba% 10;
Następnie definiuje się instrukcję przełączania dla każdej pojedynczej cyfry w celu konwersji ich do odpowiedniego formatu (format binarny) i wysłania przez rejestr przesuwny do wyświetlenia w 7-segmentach. Na przykład (dla 1 cyfry jest zamieniana na 06 (0000 0110)). Tak więc jest wysyłany za pomocą przesunięcia i 1 cyfra jest wyświetlana w 7-segmentach (0 dla LOW, 1 dla HIGH).
przełącznik (t) { przypadek 0: jednostka = 63; przerwa; przypadek 1: jednostka = 06; przerwa; przypadek 2: jednostka = 91; przerwa; przypadek 3: jednostka = 79; przerwa; przypadek 4: jednostka = 102; przerwa; przypadek 5: jednostka = 109; przerwa; Przypadek 6: jednostka = 125; przypadek 7: jednostka = 07; przerwa; przypadek 8: jednostka = 127; przerwa; przypadek 9: jednostka = 103; przerwa; }
Następnie pojedyncza cyfra w formacie binarnym jest wysyłana za pomocą funkcji „shiftout” z MSB jako pierwszą, a odpowiedni pin cyfry jest ustawiany na WYSOKĄ, a pin zatrzaskowy na WYSOKI.
digitalWrite (9, NISKI); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, tysiące); digitalWrite (latchPin, HIGH); digitalWrite (9, WYSOKI); opóźnienie (5);
To kończy cały kod. Większość objaśnień funkcji znajduje się w sekcji komentarzy do kodu, tuż obok linii kodu. Częstotliwość zegara decyduje o widoku Czasu i jakości multipleksowania, tj. Jeśli używany jest niski zegar, wówczas widać migotanie, gdy taktowanie zegara jest wysokie, nie będzie takiego migotania i będzie widoczny czas stały.
Należy pamiętać, że aby uzyskać dostęp do modułu RTC, należy utrzymać napięcie magistrali I2C. W celu przedstawienia sugestii lub jakichkolwiek wątpliwości prosimy o komentarz poniżej.