- Необходими компоненти
- 4-цифрен 7-сегментен дисплей
- 74HC595 IC регистър за смяна
- DS3231 RTC модул
- Електрическа схема
- Програмиране на Arduino UNO за мултиплексиране на седемсегментен дисплей
Цифровите стенни часовници стават все по-популярни сега и са по-добри от аналоговите часовници, тъй като осигуряват точно време в часове, минути и секунди и лесно разчитат стойностите. Някои цифрови часовници също имат много съоръжения като показване на температура, влажност, настройка на множество аларми и т.н. Повечето от цифровите часовници използват седемсегментен дисплей.
Преди това изградихме много схеми за цифрови часовници, използвайки 7-сегментни дисплеи или използвайки 16x2 LCD. Тук можете да намерите пълния дизайн на печатни платки на AVR базиран цифров часовник. Този урок е за създаване на цифров часовник чрез мултиплексиране на четири- 7 сегментни дисплеи с помощта на Arduino UNO и показване на времето във формат HH: MM.
Необходими компоненти
- 4-цифрен 7-сегментен дисплей
- 74HC595 IC
- DS3231 RTC модул
- Arduino UNO
- Макет
- Свързващи проводници
4-цифрен 7-сегментен дисплей
4-цифрен 7-сегментен дисплей има четири седемсегментни дисплея, свързани заедно или можем да кажем мултиплексирани заедно. Те се използват за показване на цифрови стойности, а също и някои азбуки с десетични знаци и двоеточие. Дисплеят може да се използва и в двете посоки. Четири цифри са полезни за създаване на цифрови часовници или като преброяване на числа от 0 до 9999. По-долу е вътрешната диаграма за 4-цифрен 7-сегментен дисплей.
Всеки сегмент има по един светодиод с индивидуално светодиодно управление. Има два типа седем сегментни дисплеи като Common Anode и Common Cathode. Горното изображение показва общия аноден тип 7-сегментен дисплей.
Общ анод
В Common Anode всички положителни клеми (аноди) на всичките 8 светодиода са свързани заедно, наречени COM. И всички отрицателни клеми остават сами или са свързани към щифтовете на микроконтролера. Чрез използване на микроконтролер, ако логиката LOW е настроена да осветява конкретния LED сегмент и задайте логика High, за да изключите LED.
Общ катод
В Common Cathode всички отрицателни клеми (катод) на всичките 8 светодиода са свързани заедно, наречени COM. И всички положителни клеми остават сами или са свързани към щифтовете на микроконтролера. Чрез използване на микроконтролер, ако зададете логика HIGH за осветяване на светодиода и задайте LOW за изключване на LED.
Научете повече за 7-сегментните дисплеи тук и проверете как могат да бъдат свързани с други микроконтролери:
- 7-сегментен интерфейс на дисплея с Arduino
- 7-сегментен интерфейс на дисплей с Raspberry Pi
- Взаимодействие на седемсегментен дисплей с ARM7-LPC2148
- 7-сегментен интерфейс на дисплея с PIC микроконтролер
- 7-сегментен интерфейс на дисплея с микроконтролер 8051
74HC595 IC регистър за смяна
В IC 74HC595 също известен като 8-Bit Serial В - Паралелно OUT регистър за смяна. Тази интегрална схема може да получава последователно въвеждане на данни и може да контролира 8 изходни щифта паралелно. Това е полезно за намаляване на щифтовете, използвани от микроконтролера. Тук можете да намерите всички проекти, свързани с регистъра на смени 74HC595.
Работа на 74HC595 IC:
Този IC използва три щифта като Clock, Data & Latch с микроконтролера за управление на 8-те изходни щифта на IC. Часовникът се използва за непрекъснато предоставяне на импулси от микроконтролера, а щифтът за данни се използва за изпращане на данните, като например кой изход трябва да бъде включен или изключен в съответното време на часовника.
Pinout:
ПИН номер |
Име на ПИН |
Описание |
1,2,3,4,5,6,7 |
Изходни щифтове (Q1 до Q7) |
74HC595 има 8 изходни щифта, от които 7 са тези. Те могат да се контролират последователно |
8 |
Земя |
Свързан със земята на микроконтролера |
9 |
(Q7) Сериен изход |
Този щифт се използва за свързване на повече от един 74HC595 като каскаден |
10 |
(MR) Основно нулиране |
Нулира всички изходи като ниски. Трябва да се държи високо за нормална работа |
11. |
(SH_CP) Часовник |
Това е тактовият щифт, към който трябва да се подава тактовият сигнал от MCU / MPU |
12 |
(ST_CP) Заключване |
Щипката Latch се използва за актуализиране на данните към изходните щифтове. Той е активен високо |
13 |
(OE) Активиране на изхода |
Output Enable се използва за изключване на изходите. Трябва да се държи ниско за нормална работа |
14. |
(DS) Серийни данни |
Това е щифтът, към който се изпращат данните, въз основа на който се управляват 8-те изхода |
15 |
(Q0) Изход |
Първият изходен щифт. |
16. |
Vcc |
Този щифт захранва интегралната схема, обикновено се използва + 5V. |
DS3231 RTC модул
DS3231 е RTC модул. RTC означава часовник в реално време. Този модул се използва за запомняне на часа и датата, дори когато веригата не се захранва. Той има резервно копие на батерията CR2032 за стартиране на модула при липса на външно захранване. Този модул включва и температурен сензор. Модулът може да се използва във вградени проекти, като например изработка на цифров часовник с температурен индикатор и т.н.
- Автоматично подаващо устройство за домашни любимци, използващо Arduino
- Връзка RTC модул (DS3231) с PIC микроконтролер: Цифров часовник
- Връзка RTC модул (DS3231) с MSP430: Цифров часовник
- Часовник в реално време ESP32 с помощта на модул DS3231
- Цифров стенен часовник на печатни платки с помощта на AVR микроконтролер Atmega16 и DS3231 RTC
Pinout на DS3231:
Име на ПИН |
Използвайте |
VCC |
Свързан към положителния източник на захранване |
GND |
Свързан със земята |
SDA |
ПИН за серийни данни (I2C) |
SCL |
Сериен щифт за часовник (I2C) |
SQW |
Изходен щифт с квадратна вълна |
32K |
32K осцилаторен изход |
Характеристики и спецификации:
- RTC брои секунди, минути, часове и година
- Цифров температурен сензор с точност ± 3ºC
- Регистрирайте се за стареене
- 400Khz I2C интерфейс
- Ниска консумация на енергия
- Архивиране на батерията CR2032 с живот от две до три години
- Работно напрежение: 2.3 до 5.5V
Електрическа схема
Верижна връзка между DS3231 RTC и Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Верижни връзки между 74HC595 IC и Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (данни) |
4 |
13-OE (резе) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Верижни връзки между IC 74HC595 и 4-цифрен седем сегмент и Arduino UNO:
4-DigitSevenSegment |
IC 74HC595 |
Arduino UNO |
A |
Q0 |
- |
Б. |
Q1 |
- |
° С |
Q2 |
- |
д |
Q3 |
- |
Е. |
Q4 |
- |
F |
Q5 |
- |
G |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11. |
D3 |
- |
12 |
D4 |
- |
9 |
Програмиране на Arduino UNO за мултиплексиране на седемсегментен дисплей
Пълният код и работещото видео са приложени в края на този урок. В раздела за програмиране ще бъде обяснено как времето (час и минута) се взема от модула RTC във 24-часов формат и след това се преобразува в съответния формат за тяхното показване в 4-цифрения 7-сегментен дисплей.
За свързване на модула DS3231 RTC с Arduino UNO се използва I2C шината на Arduino UNO. Библиотека, наречена
В тази концепция часът и минутата се вземат първо от RTC и се комбинират заедно като 0930 (21:30 ч.) И след това отделните цифри се разделят като хиляди, сто, десетки, единица и отделните цифри, преобразувани в двоичен формат като 0 в 63 (0111111). Този двоичен код се изпраща към регистър за смяна и след това от регистър за смяна към седем сегмента, като успешно показва цифрата 0 в седем сегментен дисплей. По този начин четирите цифри се мултиплексират и се показват час и минута.
Първоначално е включена необходимата библиотека като библиотека DS3231 и библиотека Wire (I2C библиотека).
#include
Щифтовете са дефинирани за контрола от седем сегмента. Тези контроли ще играят важна роля за мултиплексиране на дисплея.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Променливите са декларирани за съхраняване на преобразувания или суров резултат, взет от RTC.
int h; // Променлива, декларирана за час int m; // Променлива, декларирана за минута int хиляди; int стотици; int десетки; int единица; bool h24; bool PM;
След това обектът за класа DS3231 се декларира като RTC за опростяване на използването в следващите редове.
DS3231 RTC;
Тъй като RTC модулът е свързан с Arduino чрез използване на I2C комуникация. И така, wire.begin () се използва за стартиране на I2C комуникация в адреса по подразбиране на RTC, тъй като няма други I2C модули.
Wire.begin ();
Режимът на щифтове е дефиниран, независимо дали GPIO ще се държи като изход или вход.
pinMode (9, ИЗХОД); pinMode (10, ИЗХОД); pinMode (11, ИЗХОД); pinMode (12, ИЗХОД); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (точка, ИЗХОД);
Цикълът работи безкрайно и отнема времето в час и минута от модула RTC DS3231. „h24“ означава променливата за 24-часов формат.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Тогава часът и минутата се комбинират като едно число (пример, ако часът е 10 и min е 60, тогава числото е 10 * 100 = 1000 + 60 = 1060).
int число = h * 100 + m;
Получават се отделните цифри от число (пример 1060-1 е хиляда, 0 се преценява, 1 е десета и 0 е последна цифра). За разделяне на цифрите се използва модулен оператор. Например, през 1060 г., за да получите 1, тогава 1060/1000 = 1,06% 10 = 1). Така отделни цифри се съхраняват в отделни променливи.
int хиляди = брой / 1000% 10; int стотици = брой / 100% 10; int десетки = брой / 10% 10; int единица = брой% 10;
След това се определя декларация за случай на превключване за всяка отделна цифра за преобразуването им в съответния формат (двоичен формат) и изпращането чрез регистър за смяна за показване в 7-сегментен. Например (за 1 цифра се променя на 06 (0000 0110)). Така че той се изпраща чрез смяна и 1 цифра се показва в 7 сегмента (0 за НИСКО, 1 за ВИСОКО).
превключвател (t) { случай 0: единица = 63; почивка; случай 1: единица = 06; почивка; случай 2: единица = 91; почивка; случай 3: единица = 79; почивка; случай 4: единица = 102; почивка; случай 5: единица = 109; почивка; случай 6: единица = 125; случай 7: единица = 07; почивка; случай 8: единица = 127; почивка; случай 9: единица = 103; почивка; }
След това отделната цифра в двоичен формат се изпраща чрез функцията 'shiftout' с MSB първо и съответният щифт с цифри се прави HIGH и заключващият щифт се прави HIGH.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, хиляди); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); забавяне (5);
Това завършва пълния код. Повечето от обясненията на функциите са дадени в раздела за коментари на кода точно до реда на кода. Честотата на часовника ще определи изгледа на времето и качеството на мултиплексиране, т.е. ако се използва нисък часовник, тогава трептенето може да се види, когато сякаш тактовата честота е висока, тогава няма да има такова трептене и може да се види стабилно време.
Имайте предвид, че за достъп до RTC модула трябва да се поддържа напрежението на I2C шината. За да дадете някакво предложение или ако имате някакви съмнения, моля, коментирайте по-долу.