Arduino: 8 × 8 LED матричен контрол

В предишните уроци научихме как да управляваме група от осем светодиода с помощта на регистър за смяна. Това се оказа малко по-трудно от запалването на 1-2 светодиода директно от щифтовете с общо предназначение. Проблемът, който тогава трябваше да решим, беше ограниченият брой контролируеми изходи от контролера Arduino. Апогейът на нашето изследване беше използването на динамична индикация за контрол на три индикаторни номера едновременно. Сега е време да усложним още малко задачата: да се научим да работим с LED матрица.

1. Матричен индикатор

Както вече знаем, сегментните индикатори, независимо дали са везни или цифри, се състоят от отделни светодиоди, свързани заедно. Например, група светодиоди могат да имат свързани всички катоди. Такъв индикатор има послепис "с общ катод", в противен случай - "с общ анод".

Какво се случва, ако поставим светодиодите не под формата на число или скала, а под формата на решетка? Ще получите доста графичен индикатор. Тоест такава, на която можете да покажете не само число, но и някакво изображение.

Такава решетка се нарича матричен индикатор, а в случай на използване на светодиоди - LED матрица. Разделителната способност на матричния индикатор е броят на точките хоризонтално и вертикално. Например, най-често срещаните индикатори имат разделителна способност 8 × 8 пиксела.

контролна

Ако се изисква LED матрица с висока разделителна способност, тя просто се състои от няколко 8 × 8 индикатора. Ще видим как да направим това по-късно. Междувременно нека разберем как всички 64 светодиода са свързани вътре в матрицата.

Разбира се, би било възможно, както в случая на седемсегментен индикатор, да се свържат всички светодиоди с общ катод или анод. В този случай ще ни трябват или 64 пина на контролера, или 8 регистра на смяна. И двамата са разточителни.

По-правилен вариант е комбинирането на светодиоди в групи от по 8 с общ катод. Нека това са колоните на матрицата. След това паралелните светодиоди в тези колони отново се комбинират в групи от 8 парчета, вече с общ анод. Ще се получи следната схема:

контролна

Да предположим, че задачата е да запалите светодиода R6C3. За да направите това, трябва да приложим високо ниво на сигнала към щифт R6 и да свържем щифт C3 към земята.

arduino

Без да изключваме тази точка, нека се опитаме да запалим друга - R3C7. Свържете положителното захранване към R3 и земята към C7. Но в този случай редове R6 и R3 ще пресичат колони C3 и C7 не на две, а на четири места! Следователно ще светнат не две, а четири точки. Проблем!

arduino

Очевидно същата динамична индикация може да помогне. Ако включим много бързо точките R6C3 и R3C7 на свой ред, можем да използваме устойчивост на зрението - способността да интерпретираме бързо променящите се изображения като цяло.

2. LED масив и регистри за смяна

В нашия урок ще свържем най-простата 8 × 8 червена LED матрица към Arduino Uno. Номерирането на щифтове започва от долния ляв ъгъл. В същото време номерирането на крака 1-16 не е свързано по никаква логика с номерирането на колони и линии C и R.

контролна

Фокусирайки се върху урока за динамичната индикация, нека се опитаме да използваме 8-битови регистри за смяна в схемата за управление на матричния индикатор. Свържете единия регистър към индикаторните щифтове, отговарящи за колоните, а втория към щифтовете на реда.

Схематична диаграма

контролна

Важна забележка # 1. Резисторите в тази схема трябва да са на линиите, идващи от първия регистър на смяната. Този регистър на смяна е отговорен за колоните. С тази връзка всеки резистор ще настрои тока само за един светодиод на всяка стъпка от динамичния алгоритъм. Следователно всички светодиоди ще светят равномерно.

Важна забележка # 2. Горната схема е чисто с информационна цел. По-правилно би било да се включи допълнителна мощностна микросхема в процепа между втория регистър и матрицата, например транзисторният блок ULN2003.

3. Програма

матрица

Първият регистър на смяната ще отговаря за колоните, а вторият за редовете. Следователно изходът на низа ще се състои от два последователни записа в регистъра: първо, ние предаваме кода на низа, след това точковия код в този низ.

В тази програма ще използваме и ускорена версия на функцията digitalWrite. Това е необходимо, за да може процесът на динамична индикация да протича много бързо. В противен случай ще видим забележимо трептене на матрицата.

Източник

Основната част от тази програма, включително променливи data_pin, sh_pin, st_pin, next_flick, to_flick и функционират запълване вече са ни известни от уроците за регистъра на смяната и за динамичната индикация.

Масив данни съхранява осем реда от нашата снимка. За да спестим памет, записахме всяка комбинация от точки в двоична форма.

Функция резе Включено отваря ключалката на регистъра. Това трябва да се направи само след попълване на двата регистъра за смяна.

4. Анимация на LED матрицата

Сега ще модифицираме програмата така, че изображението на индикатора да се променя на всеки половин секунда. За да направите това, нека си припомним още веднъж урока за извършване на действия с таймер.

Зареждаме програмата на Arduino и наблюдаваме резултата.

контролна

5. Мащабиране на LED матрицата

8x8 LED матрица е подходяща за показване на две числа или обикновен символ. Ако трябва да покажете някакво повече или по-малко полезно изображение на индикатора, трябва да комбинирате матриците. Това се прави чрез добавяне на нови регистри за смяна както вертикално, така и хоризонтално.

Трябва да се отбележи, че скоростта на контролера Arduino Uno във връзка с регистрите за смяна е достатъчна само за дисплей 16x16. Увеличаването на размера на LED дисплея допълнително ще доведе до забележимо трептене.

  • Хипноза. Програмирайте контролера така, че концентрични кръгове с постоянно нарастващ радиус да се появят на LED масива с период от 1 секунда.
  • Змийска игра. Внедрете такава добре позната игра като змия на 8 × 8 LED матрица. Необходимо е да добавите четири бутона към веригата, за да контролирате посоката на движение, както и зумер, който сигнализира за събитието на ядене на ябълки (или какво змия яде там ...).
  • Електронно ниво. Добавете акселерометър към веригата. Напишете програма, която ще покаже точка на светодиодната матрица, чиито координати зависят от наклона на цялото устройство. Например, когато устройството е фиксирано успоредно на земята (перпендикулярно на вектора на гравитацията), тогава точката е в центъра. Когато електронното ниво е наклонено наляво, точката е пропорционално изместена надясно.

Заключение

След като са сглобили схемата за управление на матрицата, мнозина могат да имат въпрос: "Е, наистина, за 30 години никой не е измислил по-лесен начин за работа с матрица?" Всъщност те го измислиха. Има специализирани микросхеми за работа с различни видове дисплеи, включително за работа с LED матрица. В един от следващите уроци ще научим как да управляваме индикатора с помощта на микросхемата MAX7219. Този метод ще ни позволи лесно да комбинираме няколко матрици с един голям дисплей, без да е необходимо значително да усложняваме електрическата верига.