На цей раз, у статті буде розглянуто один із найцікавіших модулів, а саме - багаторозрядний семисегментний індикатор на основі мікросхеми MAX7219. Чому багаторозрядний? Відповідь проста – кількість розрядів це і є кількість цифр, яка може відобразити модуль. Наприклад, на фото нижче показані три види багаторозрядних індикаторів, зліва направо - 4-х розрядний, 6-ти розрядний, 8-ми розрядний. Причому перший є 4-х розрядний індикатор годинного типу. Відмінність індикатора годинникового типу від звичайного в тому, що має знак двокрапки,тоді як у звичайного будь-якого індикатора цей знак замінюється точкою внизу, поряд із цифрою.

У цій статті, модулі, що розглядаються, працюють на базі мікросхеми MAX7219. Ця мікросхема є драйвером для світлодіодних семисегментних індикаторів, а також LED матриць 8х8, і ми не розглядатимемо принципові схеми підключення цього драйвера. Просто за основу взято готовий модуль, буде наведено приклади підключення до плати Arduino UNOта розібрано роботу з функціями бібліотеки LedControl. До речі, як уже було сказано – LED матриці 8х8 теж працюють на базі драйвера MAX7219, і кому цікаво то ласкаво просимо до статей:

Отже, почнемо... Думаю, що про багаторозрядність було дано хороший опис, а ось чому семисегментний? Відповідь теж не така вже й складна - тому що для формування символу або відображення цифри використовується сім світлодіодів, проіндексованих літерами. A, B, C, D, E, F, G,таблиця нижче показує як це зазначено:

Як видно з таблиці, є також і восьмий світлодіод. DP.Повністю закодувати символ або цифру можна в 1 байті, встановлюючи або скидаючи певний біт, як це показано з прикладом кодування символу J.У прикладі встановлені біти B, C, D, E, що дозволяє відобразити заданий символ на семисегментному індикаторі.

Від теорії до практики - підключимо 8-розрядний модуль до плати Arduino Uno за вказаною нижче схемою:

Для відображення символів використовується кілька функцій з бібліотеки LedControl.h, що підключається. Розберемо кожну із цих функцій по порядку, почнемо з функції setDigit().

Прототип оголошення функції для відображення числа та передані функції аргументи:

setDigit(int addr, int digit, byte value, boolean dp);

Де -

int addr -адреса модуля на шиніSPI 0 SPI починається з нуля)

int digit - 0 , 7

byte value -значення (число від 0 до 9), яке потрібно відобразити в розряді, номер якого вказаний у параметрі int digit

boolean dp - int digit. Якщо параметр дорівнює true то точка відобразиться, якщо false то точка не відобразиться.

Прототип оголошення функції для відображення символу та передані функції аргументи:

setChar(int addr, int digit, char value, boolean dp);

int addr - адреса модуля на шиніSPI для якого викликається функція, якщо модуль один - цей параметр дорівнює0 (за замовчуванням адресація пристроїв на шиніSPI починається з нуля)

int digit - порядковий номер розряду в модулі індикації, за замовчуванням для багаторозрядних індикаторів, нумерація розрядів починається з крайнього правого розряду, відповідно номер крайнього правого розряду дорівнює0 , а номер крайнього лівого розряду в нашому випадку дорівнює7

char value - символ, який має відобразитись у розряді номер якого заданий параметромint digit

boolean dp - цей параметр відповідає за відображення точки у розряду, номер якого вказаний у параметрі int digit. Якщо параметр дорівнює true то точка відобразиться, якщо false то точка не відобразиться.

Окремим моментом варто згадати, що функція setChar()може відображати лише обмежений набір символів, таких як:

  • 0 1 2 3 4 5 6 7 8 9 цифра відображається як символ
  • A a
  • B b
  • З з символ відобразиться в нижньому регістрі
  • D d символ відобразиться в нижньому регістрі
  • E e символ з'явиться у верхньому регістрі
  • F f символ з'явиться у верхньому регістрі
  • H h символ відобразиться в нижньому регістрі
  • L l символ з'явиться у верхньому регістрі
  • P p символ з'явиться у верхньому регістрі
  • - знак "мінус"
  • . , відображення точки
  • _ підкреслення символ
  • <Пробел> встановити символ пропуску

У тестовому скетчі можна поставити завдання такого плану:

  1. Відобразити по черзі цифри від 1 до 8 без крапки
  2. Заповнити цифрами від 1 до 8 всі розряди модуля індикації плюс відобразити всі точки зазначених розрядів
  3. Малювати порозрядно масив із заздалегідь закодованими в двійковому коді символами, в результаті має вийти "Arduino rules!!!"

Через обмежений набір символів функція setChar()не підходить для тестового скетчу, оскільки вона не зможе нормально відмалювати фразу, зазначену в пункті 3. Замість цієї функції ми будемо використовувати функцію setRow(). Отже… функція setRow()вже була нами випробувана в статтях для вивчення Led матриць 8х8, давайте знову опишемо прототип виклику та параметри даної функції.

Прототип оголошення функції setRow()та передані функції аргументи:

setRow(int addr, int row, byte value);

int addr - адреса модуля на шиніSPI для якого викликається функція, якщо модуль один - цей параметр дорівнює0 (за замовчуванням адресація пристроїв на шиніSPI починається з нуля)

int row - порядковий номер розряду в модулі індикації, за замовчуванням для багаторозрядних індикаторів, нумерація розрядів починається з крайнього правого розряду, відповідно номер крайнього правого розряду дорівнює0 , а номер крайнього лівого розряду в нашому випадку дорівнює7

byte value- значення у двійковому форматі (приклад B00000000, також можлива альтернатива в десятковому та шістнадцятковому), яким закодовано необхідний символ. Таблиця кодування символів допоможе правильно закодувати потрібний символ.

Ну і на завершення статті тестовий скетч та відео, як це працює:

#include "LedControl.h" /* * Підключаємо бібліотеку LedControl.h * і створюємо об'єкт класу LedControl * при цьому, 7-ми сегметний дисплей з драйвером MAX72xx * має бути підключений до плати Arduino наступним чином: * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * */ LedControl lc = LedControl (12, 11, 10, 1); //Масив із закодованими символами, //Фраза "Arduino ruLES!!!" byte ar = ( B01110111, //A B00000101, //r B00111101, //d B00011100, //u B00010000, //i B00010101, //n B00011101, //o B00000101, //r B00011100, //u B00001100 , //l B01001111, //E B01011011, //S B10110000, //! void setup() ( //Пристрій (7-ми сегментний дисплей) виводимо зі сплячого режиму lc.shutdown(0, false); //Встановити яскравість дисплея на 8 //Усього можливих режимів яскравості від 0 до 15 lc.setIntensity(0 ,8);// Очистити дисплей lc.clearDisplay(0);< 8, j >= 0; i++, j--) ( lc.setDigit(0, j, byte(i + 1), false); delay(400); lc.clearDisplay(0); ) //Перебір чисел без очищення екрана for(int i = 0, j = 7;< 8, j >= 0; i++, j--) ( lc.setDigit(0, j, byte(i + 1), true); delay(400); ) lc.clearDisplay(0);< 2; i ++) { for(int j = 7; j >//Відрисовка фрази "Arduino ruLES!!!"


int n = 0;

Семисегментні світлодіодні індикатори дуже популярні серед пристроїв відображення цифрових значень і знаходять застосування в передніх панелях мікрохвильових печей, пральних машин, цифрових годинниках, лічильниках, таймерах та ін. вугілля огляду. Для підключення семисегментного 4-розрядного індикатора до мікроконтролера потрібно принаймні 12 ліній вводу/виводу. Тому використовувати ці індикатори з мікроконтролерами з малою кількістю висновків, наприклад серії від компанії, практично неможливо. Звичайно, можна використовувати різні методи мультиплексування (опис яких можна знайти на сайті в розділі "Схеми"), але і в цьому випадку є певні обмеження для кожного методу, і часто використовуються складні програмні алгоритми.

Ми розглянемо метод підключення індикатора за інтерфейсом SPI, який вимагатиме всього 3 лінії вводу/виводу мікроконтролера. При цьому збережеться керування всіма сегментами індикатора.

Для підключення 4-розрядного індикатора до мікроконтролера SPI шини використовується спеціалізована мікросхема-драйвер виробництва компанії. Мікросхема здатна керувати вісьмома семисегментними індикаторами із загальним катодом і має у своєму складі BCD-декодер, драйвери сегментів, схему мультиплексування та статичну ОЗУ для зберігання значень цифр.

Струм через сегменти індикаторів встановлюється лише за допомогою одного зовнішнього резистора. Додатково мікросхема підтримує керування яскравістю індикаторів (16 рівнів яскравості) у вигляді вбудованого ШІМ.

Схема, що розглядається в статті, - це схема дисплейного модуля з інтерфейсом SPI, який може використовуватися в радіоаматорських конструкціях. І нас більше цікавить не сама схема, а робота з мікросхемою за інтерфейсом SPI. Живлення модуля +5 подається на висновок Vcc, сигнальні лінії MOSI, CLK і CS призначені для комунікації майстер-пристрою (мікроконтролер) з веденим (мікросхема MAX7219).

Мікросхема використовується в стандартному включенні, із зовнішніх компонентів потрібен тільки резистор, який задає струм через сегменти, захисний діод живлення та конденсатор фільтруючий живлення.

Дані передаються в мікросхему 16-бітними пакетами (по два байти), які поміщаються у вбудований 16-бітний регістр зсуву по кожному фронту, що наростає сигналу CLK. 16-бітний пакет ми позначимо D0-D15, де біти D0-D7 містять дані, D8-D11 містять адресу регістра, біти D12-D15 значення не мають. Біт D15 - старший біт і є першим прийнятим бітом. Хоча мікросхема здатна керувати вісьмома індикаторами, ми розглянемо роботу лише з чотирма. Управління ними здійснюється на виходах DIG0 - DIG3, розташованих у послідовності праворуч наліво, 4-бітові адреси (D8-D11), які їм відповідають, це 0×01, 0×02, 0×03 та 0×04 (шістнадцятковий формат). Регістр цифр реалізується на базі вбудованого ОЗП з організацією 8×8 і адресуються безпосередньо, так що кожна окрема цифра на дисплеї може оновлюватись у будь-який час. У наступній таблиці наведені цифри, що адресуються, і регістри управління мікросхеми MAX7219.

Реєстр

Адреса

HEX-значення

Ні операції

Режим декодування

Кількість індикаторів

Вимкнення

Тест індикатора

Реєстри управління

Мікросхема MAX1792 має 5 регістрів управління: режим декодування (Decode-Mode), управління яскравістю індикатора (Intensity), регістр кількості підключених індикаторів (Scan Limit), управління включенням та вимкненням (Shutdown), режим тестування (Display Test).

Увімкнення та вимкнення мікросхеми

При подачі живлення на мікросхему всі регістри скидаються, і вона перетворюється на режим Shutdown (вимикання). У цьому режимі дисплей вимкнено. Для переходу в нормальний режим роботи необхідно встановити біт D0 регістра Shutdown (адреса 0Сh). У будь-який час цей біт може бути скинутий, щоб перевести драйвер у вимкнений стан, при цьому вміст регістрів зберігається незмінним. Цей режим може використовуватися для економії енергії або в режимі сигналізації миготінням індикатора (послідовна активація та деактивація режиму Shutdown).

Переведення мікросхеми в режим Shutdown здійснюється послідовною передачею адреси (0Сh) та даних (00h), а передача 0Ch (адреса) і потім 01h (дані) повертають у нормальний режим роботи.

Режим декодування

За допомогою регістру вибору режиму декодування (адреса 09h) можна використовувати BCD code B декодування (відображувані символи 0-9, E, H, L, P, -) або без декодування для кожної цифри. Кожен біт у регістрі відповідає одній цифрі, установка логічної одиниці відповідає включенню декодера даного розряду, установка 0 - декодер виключається. Якщо використовується BCD декодер, то береться до уваги лише молодший напівбайт даних у регістрах цифр (D3-D0), біти D4-D6 ігноруються, біт D7 не залежить від BCD декодера та відповідає за включення десяткової точки на індикаторі, якщо D7=1. Наприклад, при послідовній посилці байтів 02h і 05h на індикаторі DIG1 (другий розряд праворуч) відображатиметься цифра 5. Подібним чином, при посилці 01h і 89h на індикаторі DIG0 буде відображатися цифра 9 з включеною десятковою точкою. У таблиці нижче наведено повний список символів, які відображаються під час використання BCD декодера мікросхеми.

Символ

Дані у регістрах

Включені сегменти = 1

Пусто

*Десяткова точка встановлюється бітом D7=1

При виключенні BCD декодера з роботи біт даних D7-D0 відповідають лініям сегментів (A-G і DP) індикатора.

Управління яскравістю індикаторів

Мікросхема дозволяє програмно керувати яскравістю індикаторів за допомогою вбудованого ШІМу. Вихід ШІМ контролюється молодшим напівбайтом (D3-D0) регістру Intensity (адреса 0Ah), який дозволяє встановлювати один із 16 рівнів яскравості. При встановленні всіх бітів напівбайта 1 вибирається максимальна яскравість індикатора.

Кількість підключених індикаторів

У регістрі Scan-Limit (адреса 0Bh) встановлюється значення кількості розрядів, що обслуговуються мікросхемою (1...8). Для нашого варіанту з 4 розрядами регістр має бути записано значення 03h.

Тест індикатора

Регістр, відповідальний цей режим, знаходиться за адресою 0Fh. Встановлюючи біт D0 у регістрі, користувач включає всі сегменти індикаторів, при цьому вміст регістрів управління та даних не змінюється. Для вимкнення режиму Display-Test біт D0 повинен дорівнювати 0.

Інтерфейс із мікроконтролером

Модуль індикатора може бути підключений до будь-якого мікроконтролера, який має три вільні лінії вводу/виводу. Якщо мікроконтролер має вбудований апаратний модуль SPI, модуль індикатора може підключатися як ведений пристрій на шині. У цьому випадку сигнальні лінії SPI інтерфейсу SDO (serial data out), SCLK (serial clock) та SS (slave select) мікроконтролера можуть бути безпосередньо підключені до висновків MOSI, CLK та CS мікросхеми MAX7219 (модуля), сигнал CS має низький активний рівень.

Якщо мікроконтролер не має апаратного SPI, то інтерфейс можна організувати програмно. Спілкування з мікросхемою MAX7219 починається з установки і утримання низького рівня лінії CS, після чого послідовно посилаються 16 біт даних (старший значний біт передається першим) лінією MOSI по наростаючому фронту сигналу CLK. По завершенню передачі лінії CS знову встановлюється високий рівень.

У секції завантажень користувачі можуть завантажити вихідний текст тестової програми та HEX-файл прошивки, в якій реалізується звичайний 4-розрядний лічильник із відображенням значень на модулі індикатора з інтерфейсом SPI. Використовуваний мікроконтролер - інтерфейс реалізований програмно, сигнальні лінії CS, MOSI і CLK модуля індикатора підключені до портів GP0, GP1 і GP2, відповідно. Використовується компілятор mikroC для мікроконтролерів PIC (mikroElektronika

Для коментування матеріалів із сайту та отримання повного доступу до нашого форуму Вам необхідно зареєструватися .

З часів появи радіотехніки та електроніки зворотний зв'язок електронного пристрою та людини супроводжувався різними сигнальними лампочками, кнопками, тумблерами, дзвінками (сигнал готовності мікрохвильової печі - дзинь!). Деякі електронні девайси видають мінімум інформації, тому що більше було б зайвим. Наприклад, світлодіод, що світиться, у вашої китайської зарядки для телефону говорить про те, що зарядка включена в мережу і в неї надходить напруга. Але є й такі параметри, котрим було б зручніше видавати об'єктивну інформацію. Наприклад, температура повітря на вулиці чи час на будильнику. Так, все це можна було б зробити також на лампочках або світлодіодах, що світяться. Один градус - один діод, що горить, або лампочка. Скільки градусів - стільки індикаторів, що горять. Вважати ці світлячки - це справа може бути і звична, але скільки знову ж таки треба буде таких світиків, щоб показати температуру з точністю до десятої частки градуса? Та й взагалі, яку площу займатимуть ці світлодіоди та лампочки на електронному девайсі?

Практичні семисегментні пристрої відображення повинні мати не менше восьми зовнішніх сполучних клем; сім із них дають доступ до окремих фотоелектричних сегментів, а восьма забезпечує спільне з'єднання з усіма сегментами. У першому випадку пристрій відомий як семисегментний дисплей загального анода; в останньому випадку пристрій відомий як семисегментний дисплей із загальним катодом.

Щоб керувати дисплеєм із загальним анодом, драйвер повинен мати активний-низький вихід, в якому кожен сегментний привід зазвичай високий, але йде низько, щоб увімкнути сегмент. Щоб керувати дисплеєм із загальним катодом, драйвер повинен мати активний активний вихід.

І ось на початку ХХ століття, з появою електронних ламп з'явилися перші газорозрядні індикатори.

За допомогою таких індикаторів можна вивести цифрову інформацію в арабських цифрах. Раніше на цих лампах робили різну індикацію для приладів та інших електронних пристроїв. Нині газорозрядні елементи майже ніде не застосовуються. Але ретро - це завжди модно, тому багато радіоаматорів збирають для себе і своїх близьких прекрасні годинники на газорозрядниках.

Повне пояснення цього трохи складніше, в такий спосіб. Коли напруга дорівнює нулю, сегмент практично невидимий. Однак, коли напруга на вході має значне позитивне або негативне значення, сегмент стає ефективно видимим, але якщо напруга приводу підтримується протягом декількох сотень мілісекунд, сегмент може стати постійно видимим і не мати ніякого подальшого значення.

У умовах сегмент відключається. Таким чином, сегмент включений у цих умовах. Ця форма приводу зазвичай відома як система "мостового приводу" з подвоєнням напруги. Послідовність процесів схеми наступна. Проста каскадна система, описана раніше, страждає від серйозного дефекту, оскільки дисплей стає розмитим під час фактичного періоду підрахунку, стаючи стабільним та читаним тільки тоді, коли кожен лічильник завершено та вхідний затвор закритий. Цей "розмитий і читаний" тип дисплея дуже дратує, щоб дивитися.

Мінуси газорозрядних ламп – їдять багато. Про довговічність можна і посперечатися. У нас в універі досі у лаборантських кабінетах експлуатують частотоміри на газорозрядниках.

З появою світлодіодів ситуація кардинально змінилася. Світлодіоди самі по собі жеруть маленький струм. Якщо розставити їх у потрібне положення, то можна висвічувати будь-яку інформацію. Для того, щоб висвітлити всі арабські цифри було достатньо всього сім (звідси і назва семисегментного індикатора) світлодіодних смужок, що світяться, виставлених певним чином:

На малюнку 13 показана вдосконалена схема лічильника частоти, яка використовує блокування дисплея для подолання вищезгаданого дефекту. Ця схема працює в такий спосіб. Одночасно відкривається вхідний затвор і лічильники починають підсумовувати імпульси вхідного сигналу. Цей лічильник триває рівно через одну секунду, і протягом цього періоду чотирибітові клямки не дозволяють вихідним сигналам лічильника надходити на драйвери дисплея; дисплей залишається стабільним протягом цього періоду.

Через кілька секунд послідовність повторюється знову, при цьому лічильники перезавантажуються, а потім підраховують імпульси вхідної частоти протягом однієї секунди протягом яких дисплей дає постійне зчитування результатів попереднього рахунку і т.д.

майже до всіх таких семисегментних індикаторів додають також і восьмий сегмент - точку, для того щоб можна було показати ціле і дробове значення якого-небудь параметра

Таким чином, схема малюнку 13 створює стабільний дисплей, який оновлюється один раз в секунду; на практиці фактичний період відліку цього та схеми на малюнку 12 може бути зроблений у будь-яке десятиліття з множинним або неповним числом секунд, за умови, що вихідний дисплей відповідним чином масштабується.

Зауважте, що тризначний частотомір може вказувати максимальні частоти 999 Гц при використанні односекундної бази, 99 кГц при використанні 100 мс тимчасової бази, 9 кГц при використанні тимчасової бази 10 мс і 999 кГц при використанні 1 мс тимчасової бази.

за ідеєю виходить восьми сегментний індикатор, але по-старому його також називають семисегментним, і помилки в цьому немає.

Коротше, семисегментний індикатор - це світлодіоди, які розташовані один щодо одного в певному порядку і запендюровані в один корпус.

Цей метод можна зрозуміти за допомогою малюнків 14 і 15. Ці перемикачі з'єднані разом і забезпечують дійсну дію мультиплексора і повинні розглядатися як швидкодіючі електронні перемикачі, які переключаються багаторазово через позиції 1, 2, і послідовність операцій схеми наступна. Припустимо спочатку, що перемикач знаходиться у положенні.

Через кілька хвилин перемикач переходить у положення 3, змушуючи дисплей 3 відображати число через кілька хвилин, весь цикл починає повторюватися знову і так далі, додаючи нескінченність. На практиці близько 50 з цих циклів відбуваються кожну секунду, тому око не бачить, що дисплеї вмикаються і вимикаються окремо, але сприймають їх як явно стійкий дисплей, який показує номер 327, або якийсь інший номер продиктований сегментом дані.

Якщо розглянути схему одиночного семисегментного індикатора, вона виглядає ось так:

Як бачимо, семисегментний індикатор може бути як з загальним анодом (ОА), так і з загальним катодом (ОК). Грубо кажучи, якщо семисегментник у нас із загальним анодом (ОА), то у схемі ми повинні на цей висновок вішати "плюс", а якщо із загальним катодом (ОК) - то "мінус" чи землю. На який висновок ми подамо напругу, такий світлодіод у нас і загориться. Давайте все це продемонструємо на практиці.

У практичних мультиплексорах піковий струм дисплея виходить досить високий, щоб забезпечити достатню яскравість дисплея. На фіг. 15 показаний приклад удосконаленого методу мультиплексування, що застосовується до тризначного частотоміру. Цей метод має дві основні переваги.

Якщо ці термінали активні високо, вони матимуть такі характеристики. Фіг. 18 і 19. На малюнку 18 показано техніку гасіння пульсацій, яка використовується для забезпечення придушення початкового нуля на чотиризначному дисплеї, який зчитує кількість.

У нас є ось такі світлодіодні індикатори:

Як бачимо, семисегментники можуть бути одиночні і багаторозрядні, тобто дві, три, чотири семисегментники в одному корпусі. Для того щоб перевірити сучасний семисегментник, нам достатньо мультиметра з функцією продзвонювання діодів. Шукаємо загальний висновок - це може бути ОА або ОК - методом тику і потім вже дивимося працездатність всіх сегментів індикатора. Перевіряємо трирозрядний семисегментник:

Таким чином, екран відображає. По суті, вони прості у використанні, приводять їх у дію, і вони спалахують. Вони можуть бути дратівливими, тому що у них є якась полярність, а це означає, що вони працюватимуть лише тоді, коли ви їх правильно підключите. Якщо ви відміните позитивну та негативну напругу, вони не загоряться взагалі.

Дратує, так воно і є, це теж дуже корисно. Інший провід – катод. Катод з'єднується із землею. В принципі це дійде до цього. Для спільного катода ви подаєте струм на контакти, які потрібно включити. Мультиплексування. Для цього навіть існують контролери дисплея, якщо ви не бажаєте подбати про перемикання у вашому програмному забезпеченні.

Опаньки, у нас спалахнув один сегмент, таким же чином перевіряємо й інші сегменти.

Іноді напруги на мультику не вистачає, щоб перевірити сегменти індикатора. Тому беремо Блок живлення, виставляємо на ньому 5 Вольт, чіпляємо до однієї клеми блока живлення резистор 1-2 кілоОми і починаємо перевіряти семисегментник.

Управління 7-сегментним дисплеєм

Тому, коли у вас є 4-значний мультиплексований 7 сегмент, загальний анод. По-перше, ми повинні знати, який тип дисплея у нас є, оскільки є дві можливі форми: загальний катод та загальний анод. Речі, які вам знадобляться для цього уроку. Зліва: графічний вигляд 7-сегментного дисплея, що показує одне загальне розташування для внутрішньої проводки та розташування контактів.

На цьому етапі зверніть увагу на вихідний висновок, оскільки він знадобиться вам пізніше при завантаженні програми. Якби дисплей був звичайним катодом, ми б скасували його. У нижній частині статті знаходиться фотокартка схеми, що йде на моїй платі прототипу. Ми також надаємо бібліотеку для керування більш ніж одним дисплеєм.

Навіщо ж нам резистор? При подачі на світлодіод напруги він починає різко їсти струм при включенні. Тому в цей момент він може перегоріти. Щоб обмежити струм, послідовно зі світлодіодом вмикається в ланцюг резистор. Докладніше можна прочитати у цій статті.

Підрахунок у шістнадцятковому вигляді на одному 7-сегментному дисплеї

Недоліком є ​​те, що вони є ресурсомісткими. Цей конкретний дисплей має чотири цифри та два дисплеї двокрапки. Однак пристрій також забезпечує цифрове керування яскравістю дисплея через внутрішній широкосмуговий модулятор. У таких випадках вихід може бути виконаний на кількох 7-сегментних дисплеях.

Це заощаджує контакти на корпусі, а потім на контролі. Відповідно, згадуються дисплеї із загальним анодом або загальним катодом. Висновок, який відповідає сегменту або десятковій точці, найкраще витягувати з аркуша даних для відображення. 7-сегментний дисплей, який розрахований на звичайні 10-20 мА, як і раніше, горітиме, хоча й слабкий. Але для цього не потрібне призначення контактів. Далі розподіл цього сегмента ґрунтується на.

Так само перевіряємо чотирирозрядний семисегментник з китайського радіоприймача

Думаю, особливих труднощів із цим виникати не повинно. У схемах семисегментники чіпляються із резисторами на кожному висновку. Це теж пов'язано з тим, що світлодіоди при подачі напруги на них шалено жеруть струм і вигоряють.

Якщо використовується інше призначення, це можливо в принципі, але це слід враховувати під час програмування. Перетворення окремих цифр на конкретний шаблон виведення може виконуватися за допомогою так званого. Всі інші сегменти мають бути темними. Якщо цей прапорець встановлений для всіх цифр, наведено таку таблицю.

У тестовій програмі послідовно відображаються цифри від 0 до 9 на 7-сегментному дисплеї. Вихідний номер зберігається в реєстровому лічильнику і збільшується на 1 у межах циклу. Якщо регістр досяг 10, він знову скидається на 0. Після підвищення виникає цикл очікування, який гарантує, що певний час пройде в наступному випуску. Зазвичай ви не робите таких довгих циклів очікування, але це не про очікування, а контроль 7-сегментного дисплея. Використовувати таймер для цього – це надто багато зусиль.

У нашому сучасному світі семисегментники вже замінюються на ЖК-індикатори, які можуть висвічувати абсолютно різну інформацію.

але для того, щоб їх використовувати, потрібні певні навички у схемотехніці таких пристроїв. Поки що простіше і дешевше за світлодіодні семисегментні індикатори нічого немає.

p align="justify"> Фактична проблема і, отже, цікава в цій статті частина, проте, відбувається безпосередньо після циклу мітки. Зверніть увагу, що значення лічильника має бути подвоєним. Це безпосередньо з тим, що флеш-пам'ять носить словесний характер, а чи не байт-мудрий. У другому прикладі на цій сторінці це робиться інакше. Там показано, як за допомогою іншого запису таблиці генерація байтів заповнення може запобігти асемблером. Цікаво також, що для розрахунку потрібний регістр, що містить значення 0.

Отже, ця константа повинна бути спочатку завантажена в регістр і тільки після цього може бути додавання з використанням цього регістра. Цікаво те, що цей факт зустрічається в багатьох програмах, а константи в переважній більшості випадків - це константа 0. Тому багато програмістів резервують регістр із самого початку для цього і називають його нульовим регістром.

У цій статті ми поговоримо про цифрову індикацію.
Семисегментні світлодіодні індикатори призначені для відображення арабських цифр від 0 до 9 (рис.1).

Такі індикатори бувають однорозрядні, які відображають лише одне число, але семисегментних груп, об'єднаних в один корпус, може бути і більше (багаторозрядні). І тут цифри поділяються децимальною точкою (рис.2)

На жаль, є проблема, тому що для відображення необхідно вісім портів - чотири оголошення вимагатимуть 32 порти. Але є кілька шляхів. Зсувні регістри вже описані в іншому підручнику. Це спростило б створення необхідних 32 вихідних ліній лише з трьома висновками. Принцип керування не відрізняється від керування одним 7-сегментним дисплеєм, тільки те, як «вихідні висновки» наближаються до їх значень, відрізняється та визначається використанням зсувних регістрів. На даний момент, однак, має бути показаний інший варіант управління.



Рис.2.

Індикатор називається семисегментним через те, що символ, що відображається, будується з окремих семи сегментів. Усередині корпусу такого індикатора знаходяться світлодіоди, кожен із яких засвічує свій сегмент.
Літери та інші символи на таких індикаторах відображаються проблематично, тому для цих цілей використовуються 16-сегментні індикатори.

Нижче розглянемо мультиплексування ще раз. Мультиплексування означає, що не всі чотири дисплеї включаються одночасно, але тільки на короткий час. Якщо зміна між дисплеями відбувається швидше, ніж ми, люди можемо сприймати, всі чотири індикатори, схоже, працюють одночасно, хоча на один короткий проміжок часу світиться лише один. Таким чином, чотири дисплеї можуть розділяти окремі сегменти сегмента, і все, що потрібно - це 4 додаткові лінії управління для 4 дисплеїв, з якими включений дисплей.

Одним з аспектів цього управління є частота мультиплексування, тобто повний цикл переходу з одного дисплея на інший. Він повинен бути досить високим, щоб уникнути мерехтіння дисплея. Людське око мляве, в кінотеатрі 24 кадри в секунду, з телевізором, щоб бути на безпечній стороні, що також нерухомі зображення спокійні, кожен сегмент повинен контролюватись не менше 100 Гц, тому він підключається принаймні кожні 10 мс. У виняткових випадках, однак, навіть 100 Гц все ще можуть мерехтіти, наприклад, коли дисплей рухається швидко або коли виникають перешкоди зі штучними джерелами світла, які працюють зі змінним струмом.

Світлодіодні індикатори бувають двох типів.
У першому їх все катоди, тобто. негативні висновки всіх світлодіодів, об'єднані разом і виділено відповідний висновок на корпусі.
Інші висновки індикатора з'єднані до анода кожного світлодіодів (рис.3, а). Така схема називається "схема із загальним катодом".
Також є індикатори, у яких світлодіоди кожного з сегментів підключені за схемою із загальним анодом (рис.3, б).



Рис.3.

Кожен сегмент позначений відповідною літерою. На малюнку 4 представлено їхнє розташування.

Рис.4.

Як приклад розглянемо дворозрядний семисегментний індикатор GND-5622As-21 червоного свічення. До речі, існують і інші кольори, залежно від моделі.
За допомогою тривольтної батарейки можна включати сегменти, а якщо об'єднати групу висновків у купку і подати на них живлення, можна навіть відображати цифри. Але такий метод є незручним, тому для управління семисегментними індикаторами використовують регістри зсуву та дешифратори. Також, нерідко, висновки індикатора підключаються безпосередньо до виходів мікроконтролера, але в тому випадку, коли використовуються індикатори з низьким споживанням струму. На малюнку 5 наведено фрагмент схеми з використанням PIC16F876A.



Рис.5.

Для управління семисегментним індикатором часто використовується дешифратор К176ІД2.
Ця мікросхема здатна перетворити двійковий код, що складається з нулів та одиниць у десяткові цифри від 0 до 9.

Щоб зрозуміти, як це працює, потрібно зібрати просту схему (рис.6). Дешифратор К176ІД2 виконаний у корпусі DIP16. Він має 7 вихідних висновків (висновки 9 - 15), кожен з яких призначений для певного сегмента. Управління точкою тут не передбачено. Також мікросхема має 4 входи (висновки 2 – 5) для подачі двійкового коду. На 16-й та 8-й висновок подається плюс та мінус харчування відповідно. Інші три висновки є допоміжними, про них я розповім трохи згодом.



Рис.6.

DD1 - К176ІД2
R1 - R4 (10 - 100 кОм)
HG1 - GND-5622As-21

У схемі присутні 4 тумблери (можна будь-які кнопки), при натисканні на них на входи дешифратора подається логічна одиниця від плюсу живлення. До речі, живиться сама мікросхема напругою від 3 до 15 Вольт. У цьому прикладі вся схема живиться від 9-вольтової "крони".

Також у схемі присутні 4 резистори. Це так звані резистори, що підтягують. Вони потрібні, щоб гарантувати на логічному вході низький рівень за відсутності сигналу. Без них показання на індикаторі можуть відображатися некоректно. Рекомендується використовувати однаковіопору від 10 кОм до 100 кОм.

На схемі висновки 2 та 7 індикатора HG1 не підключені. Якщо підключити до мінусу живлення висновок DP, світиться децимальна точка. А якщо подати мінус на висновок Dig.2, то світитиметься і друга група сегментів (показуватиме той самий символ).

Входи дешифратора влаштовані так, що для відображення на індикаторі чисел 1, 2, 4 і 8 потрібно натиснути лише одну кнопку (на макеті встановлені тумблери, що відповідають входам D0, D1, D2 і D3). У разі відсутності сигналу відображається цифра нуль. При поданні сигналу на вхід D0 відображається цифра 1. І так далі. Для відображення інших цифр потрібне натискання комбінації тумблерів. А які саме слід натискати нам підкаже таблиця 1.


Таблиця 1.

Щоб відобразити цифру "3", необхідно логічну одиницю подати на вхід D0 і D1. Якщо подати сигнал на D0 та D2, то відобразиться цифра "5"(Рис.6).



Рис.6.

Тут представлена ​​розширена таблиця, у якій бачимо як очікувану цифру, а й ті сегменти (a - g), які складуть цю цифру.



Таблиця 2.

Допоміжними є 1, 6 і 7 висновки мікросхеми (S, M, К відповідно).

На схемі (рис.6) 6-ий висновок "М" заземлений (на мінус живлення) і на виході мікросхеми є позитивна напруга для роботи з індикатором із загальним катодом. Якщо використовується індикатор із загальним анодом, то на 6-й висновок слід подати одиницю.

Якщо на 7-й висновок "До" подати логічну одиницю, то символ індикатора гаситься, нуль дозволяє індикацію. У схемі цей висновок заземлений (на мінус живлення).

Перший висновок дешифратора подана логічна одиниця (плюс живлення), що дозволяє відображати перетворений код на індикатор. Але якщо подати на даний висновок (S) логічний нуль, то входи перестануть приймати сигнал, а на індикаторі застигне поточний знак.

Варто зауважити одну цікаву річ: ми знаємо, що тумблер D0 містить цифру "1", а тублер D1 - цифру "2". Якщо натиснути обидва тумблери, то висвітиться цифра 3 (1+2=3). І в інших випадках на індикатор виводиться сума цифр, що становлять цю комбінацію. Приходимо висновку, що входи дешифратора розташовані продумано і мають дуже логічні комбінації.

Також ви можете переглянути відео до цієї статті.

Існують такі параметри, для яких було б зручніше видавати об'єктивну інформацію, ніж індикацію. Наприклад, температура повітря на вулиці чи час на будильнику. Так, все це можна було б зробити на лампочках або світлодіодах, що світяться. Один градус - один світлодіод, що горить, або лампочка і тд. Але рахувати ці світлячки – ну вже ні! Але, як кажуть, найпростіші рішення – найнадійніші. Тому, довго не думаючи, розробники взяли прості світлодіодні смуги та розставили їх у потрібному порядку.

На початку ХХ століття з появою електронних ламп з'явилися перші газорозрядні індикатори.

За допомогою таких індикаторів можна вивести цифрову інформацію в арабських цифрах. Раніше на таких лампах робили різну індикацію для приладів та інших електронних пристроїв. Нині газорозрядні елементи майже ніде не застосовуються. Але ретро – це завжди модно, тому багато радіоаматорів збирають для себе і своїх близьких прекрасний годинник на газорозрядних індикаторах.


Мінус газорозрядних ламп – є багато електроенергії. Про довговічність можна і посперечатися. У нас в університеті досі у лабораторних кабінетах експлуатуються частотоміри на газорозрядних індикаторах.

Семисегментні індикатори

З появою світлодіодів ситуація кардинально змінилася на краще. Світлодіоди власними силами споживають невеликий струм. Якщо розставити їх у потрібному положенні, то можна висвічувати будь-яку інформацію. Для того, щоб висвітлити всі арабські цифри, достатньо всього сім світлодіодних смуг, що світяться, – сегментів, виставлених певним чином:

Майже всім таким семисегментним індикаторам додають також і восьмий сегмент - точку, для того, щоб можна було показати ціле і дробове значення будь-якого параметра

За ідеєю у нас виходить восьми сегментний індикатор, але по-старому його також називають семисегментним.

Що виходить у результаті? Кожна смужка на семисегментному індикаторі засвічується світлодіодом або групою світлодіодів. В результаті, засвітивши певні сегменти, ми можемо вивести цифру від 0 до 9, а також літери та символи.

Види та позначення на схемі

Існують однорозрядні, дворозрядні, трирозрядні та чотирирозрядні семисегментні індикатори. Понад чотири розряди я не зустрічав.

На схемах семисегментний індикатор виглядає приблизно так:

Насправді, крім основних висновків, кожен семисегментний індикатор також має загальний висновок із загальним анодом (ОА) або загальним катодом (ОК)

Внутрішня схема семисегментного індикатора із загальним анодом виглядатиме ось так:


а із загальним катодом ось так:


Якщо семисегментний індикатор у нас із загальним анодом (ОА), то у схемі ми маємо на цей висновок подавати “плюс” харчування, а якщо із загальним катодом (ОК) – то “мінус” чи землю.

Як перевірити семисегментний індикатор

У нас є ось такі індикатори:


Для того щоб перевірити сучасний семисегментний індикатор, нам достатньо мультиметра з функцією продзвонювання діодів. Для початку шукаємо загальний висновок – це може бути ОА або ОК. Тут лише методом тику. А далі перевіряємо працездатність інших сегментів індикатора за схемами вище.

Як ви бачите нижче на фото, у нас загорівся сегмент, що перевіряється. Так само перевіряємо й інші сегменти. Якщо всі сегменти горять, такий індикатор цілий і його можна використовувати у своїх розробках.


Іноді напруги на мультиметрі бракує перевірки сегмента. Тому беремо блок живлення і виставляємо на ньому 5 Вольт. Щоб обмежити струм через сегмент, перевіряємо через резистор на 1-2 кілометри.


Так само перевіряємо індикатор від китайського приймача


У схемах семисегментні індикатори поєднуються з резисторами на кожному висновку

У нашому сучасному світі семисегментні індикатори замінюються рідкокристалічними індикаторами, які можуть висвічувати будь-яку інформацію.

але для того, щоб їх використовувати, потрібні певні навички у схемотехніці таких пристроїв. Тому семисегментні індикатори досі знаходять застосування завдяки дешевизні та простоті використання.

У сьогоднішній статті поговоримо про 7-сегментні індикатори та про те, як їх «подружити» з Ардуїно. Є кілька варіантів. Найпростіший, безумовно, це зайти на і купити готовий індикатор з інтегрованим шилдом (це хустка узгодження так називається), але ми не шукаємо легких шляхів, тому підемо шляхом трохи складнішим. Новачки – не лякайтеся, ця стаття, як і попередні мої статті (і ) саме для вас. Нехай гуру пишуть для таких же навчених досвідом гуру, а я новачок – пишу для новачків.

Чому саме 7-сегментний індикатор? Адже існує стільки будь-яких екранів, з великою кількістю символів, рядків, різноманітних діагоналей і дозволів, чорно-білих і кольорових, найдоступніші з яких коштують пару доларів... А тут: «старенький», до неподобства простий, але вимагає величезної кількості пінів. сегментний індикатор, але все-таки перевага є і у цього «старенького». Справа в тому, що користуючись наведеними тут скетчами можна оживити не тільки індикатор з висотою цифр 14 мм, але й серйозніші (щоправда, саморобні) проекти, і метрові цифри в даному випадку далеко не межа. Жителям столиць це може бути не так цікаво, а от населення Новокацапетівки чи Нижньої Кедрівки дуже порадіє, якщо на клубі чи сільраді з'явиться годинник, який ще може і дату відображати, і температуру, а про творця цього годинника будуть говорити дуже довго. Але, подібний годинник тема окремої статті: буде бажання у відвідувачів - Напишу. Усе вище написане вважатимуться вступом. Як і минула моя стаття ця складатиметься з частин, цього разу з двох. У першій частині ми просто «керуємо» індикатором, а в другій – спробуємо пристосувати його для чогось хоч трохи корисного. Отже, продовжимо:

Частина перша. Експериментально – пізнавальна

За основу даного проекту взято нам уже добре знайомого за попередніми статтями ARDUINO UNO. Нагадаю, що придбати його найлегше можна тут:або тут: Крім цього знадобиться 4-розрядний, 7-сегментний індикатор. У мене, зокрема, GNQ-5641BG-11. Чому саме цей? Та просто тому, що років 5 тому купив його помилково, йти міняти було ліньки, ось він і валявся весь цей час, чекаючи свого часу. Думаю, що підійде будь-який із загальним анодом (і із загальним катодом можна, але доведеться дані масиву та інші значення портів інвертувати – тобто міняти на зворотні), аби не був надто потужним, щоб не спалити Ардуїнку. Крім цього – 4 струмообмежуючі резистори, приблизно 100 Ом кожен і шматок шлейфу (мені вистачило 10 см) на 12 пін (жил) можна «відірвати» від ширшого, що я й зробив. А можна взагалі окремими проводочками підпаятись, проблем не буде. Ще знадобляться штирі на плату (11 шт.), Хоча, якщо акуратно можна і без них. Ескіз індикатора можна побачити малюнку 1, яке схему малюнку 2. Також зазначу, що у кожен сегментик цього індикатора краще подавати трохи більше 2.1В (обмежується 100-Омными резисторами), й у разі він споживати трохи більше 20 мА. Якщо загориться цифра «8» споживання не перевищить 7х20=140 мА, що цілком допустимо для виходів Ардуїно. Допитливий читач запитає: «Але ж 4 розряди по 140 мА це вже 4х140=560 мА, а це вже забагато!» Відповім – залишиться 140. Яким чином? Читайте далі! Розташування пінів на індикаторі видно малюнку 3. А підключення робимо відповідно до таблиці 1.


Мал. 1 - Ескіз індикатора


Мал. 2 - Схема індикатора


Мал. 3 - Розташування пінів

Таблиця 1

Пін Ардуїно Уно

Пін індикатора

Примітка

Сегмент G

Сегмент F

Сегмент E

Сегмент D

Сегмент C

Сегмент B

Сегмент A

Загальний анод сегмента № 1 підключати через резистор 100 Ом.

Загальний анод сегмента № 2 підключати через резистор 100 Ом.

Загальний анод сегмента № 3 підключати через резистор 100 Ом.

Загальний анод сегмента № 6 підключати через резистор 100 Ом.



Заливаємо простенький скетч, який є простенькою «лічилкою» від 0 до 9:


А тепер трохи пояснень. DDRD це регістр порту D (DDRB – відповідно порту В) за «страшним» словом «регістр» лише «сховалася» функція, яка вказує, чи буде порт своїм піном читати щось (приймати інформацію), або навпаки туди можна буде що- писати (віддавати інформацію). У разі рядок DDRD=B11111111; показує, що це піни порту D вихідні, тобто. інформація з них виходитиме. Літера «В» означає, що в регістр записано двійкове (бінарне) число. Нетерплячий читач відразу запитає: «А десяткове можна!?!». Поспішаю заспокоїти – можна, але про це трохи згодом. Якби ми хотіли половину порту задіяти на вхід, а половину на вихід можна було б зазначити так: DDRD = B11110000; одиниці показують ті піни, які будуть віддавати інформацію, а нулі – ті, які цю інформацію прийматимуть. Основне зручність регістру полягає ще й у тому, що треба прописувати 8 разів всі піни, тобто. ми заощаджуємо у програмі 7 рядків. А тепер розберемо наступний рядок:

PORTB = B001000; // встановлюємо високий рівень 11 піна порту

PORTB це регістр даних порту, тобто. записавши в нього якесь число ми вказуємо на якому піні порту буде одиниця, а на якому – нуль. На додаток до коментаря скажу, якщо взяти Ардуїно Уно таким чином, щоб бачити контролер і цифрові піни були зверху - буде зрозумілим запис у регістр, тобто. який «нуль» (чи «одиниця»)відповідає який пін, тобто. крайній правий нуль порту відповідає за 8-й пін, а крайній лівий - за 13-й (у якого вбудовані світлодіод). Для порту D відповідно правий за пін 0, лівий за пін 7.
Сподіваюся після таких розгорнутих пояснень все зрозуміло, а якщо зрозуміло пропоную повернутися до відомої нам і десяткової системи числення, що палко кохана з дитинства. І ще – скетч у 25 рядків наче і невеликий, але для новачка все-таки дещо громіздкий. Зменшуватимемо.

Заливаємо ще більш простий скетч, та сама «лічилочка»:


Відео 1.
Усього 11 рядків! Оце по-нашому, «по-новачківськи»! Прошу звернути увагу замість двійкових чисел у регістри записані десяткові. Звичайно, для десяткових чисел жодних букв попереду не потрібно. Думаю, не зайвим буде звести всі числа таблиці.

Таблиця 2. Відповідність відображеного знака даним портом

Загальний анод

Загальний катод

Двійкова система

Десяткова система

Двійкова система

Десяткова система

Таблиця 3. Відповідність розряду даних порту, що відображається.

Загальний анод

Загальний катод

Двійкова система

Десяткова система

Двійкова система

Десяткова система



Увага! Дані таблиць 2 і 3 справедливі лише за розпаювання відповідно до таблиці 1.
А тепер заллємо скетч із «лічилкою» від 0 до 9999:




Мал. 4 - Лічилка

Роботу скетчу можна подивитися наВідео 2.

У цьому скетчі коментарів більше, ніж самого коду. Запитань виникнути не повинно. Окрім одного, що це за «цикл мерехтіння» такий, що, власне, там мерехтить і для чого? А ще змінна для цього якась…
А вся річ у тому, що однойменні сегменти всіх чотирьох розрядів у нас пов'язані в одній точці. А1, А2, А3 та А4 мають загальний катод; А1, В1, ..... G1 загальний анод. Так, що подавши одночасно на 4-розрядний індикатор «1234» ми отримаємо «8888» і дуже здивуємося з цього приводу. Щоб цього не сталося, потрібно спочатку запалити «1» у своєму розряді, потім відключити її, запалити «2» у своєму і т.д. Якщо робити це дуже швидко, то мерехтіння цифр зіллється, як кадри на кіноплівці та око його практично не помічатиме. А максимальне значення змінної мерехтіння у разі управляє швидкістю зміни цифр на індикаторі. До речі, саме завдяки цьому «миготенню» і максимальне споживання струму всього 140 мА замість 560. А тепер пропоную перейти до чогось кориснішого.

Частина друга. Хоч трохи корисна

У цій частині ми виведемо символи з ПК на 7-сегментний індикатор за допомогою ARDUINO MEGA. Чому раптом виникла ідея «змінити коней на переправі»? Причин дві: перша – раніше у своїх статтях я жодного разу не розглядав ARDUINO MEGA; і друга - в ARDUINO UNO я так і не розібрався, як мені динамічно міняти місцями СОМ порт і порт D. Але я новачок - мені можна пробачити. Придбати цей контролер, звичайно можна тут: . Для реалізації задуманого довелося взяти паяльник і перепаяти шлейф із боку Ардуїно, а також написати новий скетч. Як перепаяний шлейф можна подивитися на Малюнку 5. Вся справа в тому, що ARDUINO MEGA і ARDUINO UNO мають різне розпинання портів, та й у Мезі портів набагато більше. Відповідність використаних пінів видно з Таблиці 4.



Мал. 5 - Нова розпаювання шлейфу

Таблиця 4

Порт Мега


Увага! Ця таблиця справедлива тільки для даного проекту!

Також слід звернути увагу, що порт С у Ардуїно Мега «починається» з 37 піна і далі з спадної, а порт А – з 22 піна і далі по зростаючій.



Мал. 6 - Загальний вигляд



Невеликі особливості реалізації: виводитимемо 4 символи. Символи мають бути цифрами. Якщо ввели "1234" і побачимо "1234", якщо ввели "123456" все одно побачимо "1234", якщо ввели "йцук", "фива1234", "отіог485909оапоьм" - не побачимо нічого. Якщо запровадили «рр2345мм» побачимо «23» тобто. невеликий, вбудований «захист від дурня».

Власне скетч:



А як працює дана програма можна подивитися наВідео 3.



Огляд підготував Павло Сергєєв


Close