- Потрібні компоненти
- 4-значний 7-сегментний дисплей
- 74HC595 IC Реєстр зсуву
- Модуль RTC DS3231
- Кругова діаграма
- Програмування Arduino UNO для мультиплексування семисегментного відображення
Цифрові настінні годинники сьогодні стають все популярнішими, і вони кращі за аналогові годинники, оскільки забезпечують точний час у годинах, хвилинах і секундах, а також легко читають значення. Деякі цифрові годинники також мають багато засобів, таких як відображення температури, вологості, налаштування декількох будильників тощо. Більшість цифрових годинників використовують дисплей із семи сегментів.
Раніше ми побудували багато схем цифрових годинників або з використанням 7-сегментних дисплеїв, або з використанням РК-дисплея 16x2. Тут ви можете отримати повний дизайн друкованих плат цифрових годинників на основі AVR. Цей підручник стосується створення цифрового годинника шляхом мультиплексування чотирьох-7-сегментних дисплеїв за допомогою Arduino UNO та відображення часу у форматі HH: MM.
Потрібні компоненти
- 4-значний 7-сегментний дисплей
- 74HC595 IC
- Модуль RTC DS3231
- Arduino UNO
- Макет
- Підключення проводів
4-значний 7-сегментний дисплей
4-значний 7-сегментний дисплей має чотири сім-сегментні дисплеї, з’єднані між собою, або, можна сказати, мультиплекс. Вони використовуються для відображення числових значень, а також деяких алфавітів із десятковими і двокрапками. Дисплей можна використовувати в обох напрямках. Чотири цифри корисні для створення цифрових годинників або для підрахунку чисел від 0 до 9999. Нижче наведена внутрішня схема для 4-значного 7-сегментного дисплея.
Кожен сегмент має один світлодіод з індивідуальним управлінням світлодіодами. Існує два типи семи сегментних дисплеїв, такі як Common Anode та Common Cathode. На зображенні вище показано загальний анод типу 7-сегментного дисплея.
Загальний анод
У загальному аноді всі позитивні клеми (аноди) усіх 8 світлодіодів з'єднані між собою, названі COM. І всі мінусові клеми залишаються в спокої або підключаються до контактів мікроконтролера. За допомогою мікроконтролера, якщо логіка LOW встановлена для висвітлення певного сегмента світлодіода і встановіть логіку High для вимкнення світлодіода.
Загальний катод
У загальному катоді всі негативні клеми (катоди) усіх 8 світлодіодів з'єднані між собою, названі COM. І всі позитивні клеми залишаються самі або підключені до контактів мікроконтролера. За допомогою мікроконтролера, якщо встановити логіку HIGH для підсвічування світлодіода та встановити LOW для вимкнення LED.
Дізнайтеся більше про 7-сегментні дисплеї тут і перевірте, як вони можуть бути пов’язані з іншими мікроконтролерами:
- 7-сегментна взаємодія дисплея з Arduino
- 7-сегментна взаємодія дисплея з Raspberry Pi
- Взаємозв'язок семисегментного дисплея з ARM7-LPC2148
- 7-сегментна взаємодія дисплея з мікроконтролером PIC
- 7-сегментна взаємодія дисплея з мікроконтролером 8051
74HC595 IC Реєстр зсуву
IC 74HC595 також відомий як 8-бітний серійний IN - Паралельний вихід регістр зсуву. Цей мікросхем може приймати дані послідовно і може паралельно керувати 8 вихідними штифтами Це корисно для зменшення штифтів, що використовуються від мікроконтролера. Всі проекти, пов’язані з реєстром змінних реєстрів 74HC595, ви можете знайти тут.
Працює мікросхема 74HC595:
Цей мікросхем використовує три висновки, такі як Clock, Data & Latch з мікроконтролером, для управління 8 вихідними висновками мікросхеми. Годинник використовується для безперервної подачі імпульсів від мікроконтролера, а штифт даних використовується для передачі даних, таких як вихід, який потрібно вмикати або вимикати у відповідний час.
Розпіновка:
Номер PIN-коду |
Ім'я PIN-коду |
Опис |
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) Засувка |
Штифт фіксатора використовується для оновлення даних на вихідних штифтах. Він активний високий |
13 |
(OE) Вихід увімкнено |
Вимкнення виходу використовується для вимкнення виходів. Повинен бути низьким для нормальної роботи |
14 |
(DS) Серійні дані |
Це пін, на який надсилаються дані, на основі яких управляються 8 виходів |
15 |
(Q0) Вихідні дані |
Перший вихідний штифт. |
16 |
Vcc |
Цей штифт живить мікросхему, як правило, використовується + 5 В. |
Модуль RTC DS3231
DS3231 - це модуль RTC. RTC означає Годинник реального часу. Цей модуль використовується для запам'ятовування часу та дати, навіть коли схема не живиться. Він має резервну батарею CR2032 для роботи модуля за відсутності зовнішнього живлення. Цей модуль також включає датчик температури. Модуль може бути використаний у вбудованих проектах, таких як виготовлення цифрових годин з індикатором температури тощо. Ось декілька корисних проектів з його використанням:
- Автоматична годівниця для домашніх тварин за допомогою Arduino
- Модуль взаємодії RTC (DS3231) з мікроконтролером PIC: Цифровий годинник
- Зв'язок модуля RTC (DS3231) з MSP430: цифровий годинник
- Годинник реального часу ESP32 за допомогою модуля DS3231
- Цифрові настінні годинники на друкованій платі з використанням мікроконтролера AVR Atmega16 та DS3231 RTC
Розписка DS3231:
Ім'я PIN-коду |
Використовуйте |
VCC |
Підключений до плюса джерела живлення |
GND |
Підключений до землі |
SDA |
Штифт послідовних даних (I2C) |
SCL |
Послідовний штифт годинника (I2C) |
SQW |
Вихідний штифт квадратної хвилі |
32 тис |
Вихід генератора 32K |
Особливості та технічні характеристики:
- RTC підраховує секунди, хвилини, години та рік
- Цифровий датчик температури з точністю ± 3ºC
- Зареєструйтесь для витримки старіння
- Інтерфейс I2C 400 кГц
- Низьке споживання енергії
- Резервне копіювання батареї CR2032 із терміном служби від двох до трьох років
- Робоча напруга: від 2,3 до 5,5 В
Кругова діаграма
Схема з'єднання між DS3231 RTC та Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5 В |
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) |
+ 5В |
16-VCC |
+ 5В |
Схема з'єднань між IC 74HC595 та 4-значним семи сегментом та Arduino UNO:
4-значнийSevenSegment |
IC 74HC595 |
Arduino UNO |
A |
Q0 |
- |
B |
Q1 |
- |
C. |
Q2 |
- |
D |
Q3 |
- |
Е |
Q4 |
- |
F |
Q5 |
- |
G |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
Програмування Arduino UNO для мультиплексування семисегментного відображення
Повний код та робоче відео додаються в кінці цього підручника. У розділі програмування пояснюється, як час (година та хвилина) береться з модуля RTC у 24-годинному форматі, а потім перетворюється у відповідний формат для їх відображення на 4-значному 7-сегментному дисплеї.
Для взаємодії модуля RTC DS3231 з Arduino UNO використовується шина I2C Arduino UNO. Бібліотека називається
У цій концепції година і хвилина беруться спочатку з RTC, і вони поєднуються разом, як 0930 (21:30 вечора), а потім окремі цифри відокремлюються як тисячі, сотні, десятки, одиниці та окремі цифри, перетворені в двійковий формат, як до 63 (0111111). Цей двійковий код надсилається в регістр зсуву, а потім з регістра зсуву в семисегментний, успішно відображаючи цифру 0 на семисегментному дисплеї. Таким чином, чотири цифри мультиплексуються і відображаються година та хвилини.
Спочатку включена необхідна бібліотека, така як бібліотека DS3231 та бібліотека проводів (бібліотека I2C).
#включати
Висновки визначені для семи сегментного управління. Ці елементи управління відіграватимуть важливу роль у мультиплексуванні дисплея.
#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 tens = число / 10% 10; int одиниця = число% 10;
Після цього визначається випадок випадку комутатора для кожної окремої цифри для перетворення їх у відповідний формат (двійковий формат) і відправлення через регістр зсуву для відображення в 7-сегменті. Наприклад (для 1 цифри його замінено на 06 (0000 0110)). Таким чином, він розсилається через shift і 1 цифра відображається в 7-сегменті (0 для LOW, 1 для HIGH).
перемикач (t) { випадок 0: одиниця = 63; перерву; випадок 1: одиниця = 06; перерву; випадок 2: одиниця = 91; перерву; випадок 3: одиниця = 79; перерву; випадок 4: одиниця = 102; перерву; випадок 5: одиниця = 109; перерву; випадок 6: одиниця = 125; випадок 7: одиниця = 07; перерву; випадок 8: одиниця = 127; перерву; випадок 9: одиниця = 103; перерву; }
Потім окрема цифра у двійковому форматі надсилається за допомогою функції «зсуву» спочатку за допомогою MSB, а відповідний штифт розряду робиться ВИСОКИМ, а штифт засувки - ВИСОКИМ.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, тисячі); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); затримка (5);
На цьому закінчується повний код. Більша частина пояснення функції наведена в розділі коментарів коду, що знаходиться поруч із рядком коду. Частота годинника визначатиме час та якість мультиплексування, тобто, якщо використовується низький годинник, тоді мерехтіння можна побачити там, де, наче тактова частота висока, тоді такого мерехтіння не буде, і буде видно стабільний час.
Зверніть увагу, що для доступу до модуля RTC напруга шини I2C повинна підтримуватися. Щоб дати будь-яку пропозицію або якщо у вас є якісь сумніви, будь ласка, коментуйте нижче.