- Виды и области применения
- Устройство и работа матричных индикаторов
- Принципиальная схема
- Назначение и принцип работы
- Разновидности и способы подключения
- Шаг 1
- Шаг 2
- Шаг 3
- Примеры
- Светодиодная матрица и сдвиговые регистры
- Программа
- Анимация на светодиодной матрице
- Масштабирование светодиодной матрицы
- Задания
- :: КАК СДЕЛАТЬ МАТРИЦУ ИЗ СВЕТОДИОДОВ ::
- К размышлению
Виды и области применения
Сохраняя уникальный принцип размещения светодиодных кристаллов на теплопроводной подложке, светодиодные матрицы существенно различаются по количеству кристаллов в основании и способам их соединения друг с другом.
Количество кристаллов в подложке определяет конечную мощность массива, которая может достигать сотен ватт на изделие. Мощные матричные источники света хорошо зарекомендовали себя в прожекторах и светильниках для уличного освещения.
Способ соединения кристаллов друг с другом определяет возможность управления яркостью отдельных кристаллов и параметрами питания массива. Последовательно-параллельная структура внутренних соединений позволяет снизить силу тока и увеличить величину питающего напряжения, что отражается на характеристиках матричных изделий.
Еще одной особенностью внутренних соединений кристаллов между собой внешними проводниками является возможность использования светодиодных матричных структур в информационных табло и в графических или символьных дисплеях. Эти светодиодные матрицы используются в контрольно-измерительной аппаратуре и в различных рекламных инсталляциях.
В более старых моделях для информационных табло, графических или символьных дисплеев были разработаны светодиодные матрицы на основе DIP- или SMD-светодиодов.
Устройство и работа матричных индикаторов
Внутренний мир таких индикаторов прост, если не рассматривать модели со встроенным контроллером. Светодиоды фактически собраны в матрицу
В данном случае матрица 8х8. На самом деле такое деление на включение с общим анодом и с общим катодом является излишним. Во всяком случае, для индикаторов, у которых количество строк равно количеству столбцов. Мы всегда можем думать о строках как о столбцах и наоборот.
Для матричных индикаторов принципиально необходимо использовать динамическую индикацию. В противном случае просто невозможно сформировать требуемый символ отображения. О динамической индикации я уже говорил в статье «Динамическая индикация «.
В случае с матричными индикаторами мы должны перебирать последовательно, например, строки. И будем посылать сигналы на столбцы, чтобы обеспечить загорание нужных светодиодов (точек) соответствующего ряда.
В результате можно получить многосимвольное изображение, например вот такое (для матрицы 8х5)
Пример формирования символов из отдельных точек. Моя иллюстрация является примером формирования символов из отдельных точек моей иллюстрации
Кроме того, вовсе не обязательно ограничиваться символической информацией. Из таких индикаторов можно собрать и графический дисплей. Но обо всем по порядку.
Принципиальная схема
Как отмечалось выше, последовательно-параллельная схема соединения светодиодных кристаллов между собой определяет требования к источнику питания массива. Чем выше напряжение питания, тем больше светодиодов будет включено в последовательные цепи.
Эта особенность снижает требования к выходным токам драйверов, но в случае выхода из строя кристалла в последовательной цепи вся схема перестает излучать свет. Ток перераспределяется на работающие светодиодные чипы, ускоряя их деградацию и значительно сокращая срок службы светодиодной матрицы в целом.
Для решения проблемы некоторые производители соединяют все светодиодные чипы внутри массива одновременно последовательно и параллельно. Эта функция значительно снижает вероятность отказа светодиодной матрицы из-за износа чипа.
Соединение светодиодов параллельно друг с другом в одной структуре массива требует больших выходных токов драйвера, но выход из строя одного или двух кристаллов практически не влияет на общую излучательную способность.
Массивы для светодиодных дисплеев включают в себя сложную внутреннюю систему коммутации, которая определяется требованиями к управлению каждым отдельным светодиодом. Для управления такими светодиодными матрицами созданы специальные интегральные процессоры и микросхемы.
Назначение и принцип работы
Все понимают, что такое светодиод: это дешевая маленькая «лампочка», которая загорается при подаче на нее напряжения и не загорается при отсутствии напряжения. С помощью этого замечательного устройства можно не только освещать окружающее пространство, но и подавать сигналы, например, о том, какие системы работают, а какие отключены, оповещать о неисправностях, отмечать активные кнопки и тумблеры и т д. Если объединить несколько светодиодов в одну систему, можно будет давать больше полезной информации, формируя из них осмысленные фигуры и изображения. Первым наглядным примером такой светодиодной системы является цифровой индикатор.
Освещая на нем определенные сегменты, мы получаем изображения любых цифр (и даже некоторых букв и символов). Безусловно, такие индикаторы благодаря своей простоте и удобству снискали безграничную любовь электронщиков и широкое применение в приборах всех видов.
Однако цифровые датчики очень ограничены в своих визуальных возможностях и не позволяют развиваться прогрессу. Людям недостаточно одних цифр, им мало букв, дайте им возможность рисовать что угодно! Попытка добавить дефисы не спасла большую часть ситуации, но сильно усложнила подключение.
Поэтому следующим логическим шагом стал отказ от сегментов и переход к пикселям, то есть черточки в заранее определенных местах были заменены кружочками (или квадратиками), равномерно распределенными по рабочему полю индикатора.
Полученное изделие смело можно назвать полноценной светодиодной матрицей, так как оно имеет определенное количество эквивалентных столбцов и строк. Преимущество такого расположения элементов очевидно — нет ограничения по сложности изображения, в пределах разрешения конкретной матрицы, конечно, есть только один недостаток — большее количество светодиодов, а значит, и более сложное подключение и больше ресурсов для обслуживания. Но красота требует жертв.
Разновидности и способы подключения
Все светодиодные матрицы в основном одинаковы. Включая и выключая определенные светодиоды, мы формируем любое двумерное изображение в массиве. Отличия только в характеристиках и технических преимуществах. Самые простые массивы имеют несколько десятков элементов, например, особой популярностью у мастеров DIY пользуются светодиодные массивы 5х8 и 8х8, при этом максимальное количество ограничивается только пожеланиями пользователя и возможностями производителя. Простые массивы одноцветные, каждый пиксель может светиться определенным цветом или не светиться вообще, что уже дает создателям электроники хорошую развязку рук.
Чуть более сложные экземпляры оснащены двумя и более пикселями разных цветов на точку, что позволяет получить два, три и более цвета в каждом пикселе путем их смешивания.
Такая красота еще больше расширяет возможности творчества, но надо помнить, что все имеет свою цену. Каждый дополнительный цвет удваивает количество входящих контактов, то есть усложняет и без того сложное соединение. Также необходимо помнить о необходимом увеличении размера памяти контроллера и нагрузке на его вычислительные возможности.
Следующий вопрос — как вообще связаны такие массивы? Первое, что приходит на ум, это просто подключить каждый светодиод к своему выводу драйвера. Матрица 8х8 потребует 64 вывода, что сразу отсеивает почти все контроллеры из списка, кроме разве что Atmega2560. Да, можно и так, но мало кого устроит такая трата ресурсов, поэтому мы вернулись к идее динамической индикации многозначности. Если в индикаторах отображалась поочередно каждая цифра (цифра), то в матрице поочередно будет отображаться каждый столбец (или строка, по выбору программиста).
Эта схема подключения уменьшает количество задействованных контактов контроллера с 64 до жалких 16, что тоже много, но почти все Arduino могут это делать.
В конкретном примере 8 столбцов на анодах (C) и 8 рядов на катодах (R). Даем плюс на все аноды, кроме активного, в нем будет минус. На катоды ставим плюс: там, где нужен светящийся символ, получаем столбик нашего изображения. И так поочередно и циклически со всеми колонками, что при достаточно быстрой смене кадров даст требуемое четкое изображение.
Конечно, если вам нужно использовать матрицу, скажем, одного из трех цветов, количество контактов снова выпрыгнет за разумные пределы.
На основе этой микросхемы промышленно изготавливаются светодиодные модули из одной или нескольких матриц. Для них есть готовые библиотеки, что позволяет предельно просто выводить изображения и надписи с различными эффектами, например, «перетаскиванием строки.
В последнее время появился и набирает популярность еще один отдельный тип матриц, о котором следует упомянуть, из адресных светодиодов. Пиксели просто соединены цепочкой в «змейку”.
Преимуществ у такого массива много, основные из них: простота подключения, возможность формировать такой массив самостоятельно из светодиодных лент любого размера и формы, полноцветность, высокая скорость работы, при этом для управления требуется всего 1 пин. Но есть у него и недостатки, главные из которых: высокая цена, «симпатичность» элементов, слабая помехозащищенность, ресурсоёмкость контроллера. Подробно об особенностях, возможностях, плюсах и минусах адресных светодиодов можно прочитать в отдельной статье. Мы не будем рассматривать работу с такими массивами, несмотря на их обещание, в этой статье мы вместо этого углубимся в основы производства массивов, чтобы узнать на личном опыте, что это такое и как это изначально работает.
Шаг 1
Подключите 16-жильный кабель к входному разъему сигнала DATA IN матрицы.
Шаг 2
Используя кабели «папа-папа», подключите другой конец кабеля к платформе Arduino Mega 2560.
PIN-коды не могут быть изменены
Петля Arduino Mega Pin
R1 | 24 |
G1 | 25 |
Б1 | 26 |
ЗЕМНОЙ ШАР | ЗЕМНОЙ ШАР |
R2 | 27 |
G2 | 28 |
Би 2 | 29 |
ЗЕМНОЙ ШАР | ЗЕМНОЙ ШАР |
К | А0 |
Б | А1 |
С | А2 |
Д | А3 |
КЛК | 11 |
Т | 10 |
Оригинальное оборудование | 9 |
ЗЕМНОЙ ШАР | ЗЕМНОЙ ШАР |
Шаг 3
Подключите питание к светодиодной матрице через силовой кабель. Один конец кабеля к блоку питания, а другой к разъему POWER на матрице. Каждая светодиодная панель питается строго от 5 вольт. Потребляемый ток зависит от типа массива.
Мы рекомендуем использовать блок питания с выходным напряжением 5 вольт и силой тока не менее 4 ампер. Идеально подойдет блок питания с выходным напряжением 5 вольт и током 5 ампер.
При подключении нескольких светодиодных панелей соответственно увеличивайте диапазон тока в N раз, где N — количество массивов в цепочке.
В схеме массива нет встроенного регулятора напряжения. При подаче более 5 вольт светодиодная панель отключается.
Собранное железо. Теперь мы можем перейти к рабочим примерам.
Примеры
Для знакомства с работой массивов на низком уровне возьмем их простейшего распространенного представителя — одноцветный динамический массив 8х8 — и попробуем оживить его напрямую контроллером без помощи дополнительных микросхем.
Приведенная выше схема подключения не имеет ничего общего с реальной распиновкой, которая не имеет разумной системы, поэтому не пытайтесь понять и запомнить ее, а обратитесь к техническому описанию.
Где, напомню, Р — ряды-катоды, С — столбцы-аноды. Мы «динамизируем» матрицу столбцами, а это значит, что в строках мы будем ставить токоограничивающие резисторы, так что в любой момент времени на каждый резистор будет гореть не более одного светодиода. Для реализации идеи мы собрали простую, но немного запутанную схему.
Кристалл слишком велик, чтобы его можно было установить на макетную плату без пайки, поэтому мне пришлось припаять какой-то переходник, чтобы установить его.
Как нетрудно догадаться из вышеизложенного и расположения резисторов, верхний ряд контактов предназначен для рядов, нижний для столбцов. Чтобы привести их в нормальный порядок от 1 до 8, пришлось обмотать провода с обратной стороны в стиле головоломки «помоги мышке найти свою норку”.
В результате каждый входящий контакт был успешно подключен к соответствующему контакту в массиве.
Теперь ничего не осталось: написать программу, отображающую в ней изображения. Принцип его работы был кратко описан в предыдущей главе, повторяться не будем. В самой программе создадим пару «кадров» в виде массива нулей и единиц, которые будем отправлять в массив, где единица соответствует включенному светодиоду, ноль — выключенному. Для простоты сделаем массив двумерным и расположим элементы в том же порядке, что и светодиоды в массиве, чтобы изображение можно было легко наблюдать (и рисовать) прямо в программном байте r8 = {A0, А1, А2, А3, А4, А5, 10, 11}; // строка закрепляет byte c8 = {2, 3, 4, 5, 6, 7, 8, 9}; // контакты столбца byte m88 = { // «перекрестный» кадр 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 , 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}; byte y88 = { // кадр «головы» 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0 }; void setup() { for (byte i = 0; i < 8; i++) { // инициализируем контакты pinMode(r[i], OUTPUT); digitalWrite(r[i], НИЗКИЙ); pinMode(c[i], ВЫВОД); цифровая запись (c[i], STOP); } } void loop() { view(); // каждая итерация функции = 1 кадр } void view() { unsigned static long timer; статический байт ii = 0; статический байт ii_old = 0; если(таймер > миллис()) возвращается; // не более 1 кадра в 1 мс digitalWrite(c[ii_old], HIGH); // отключаем предыдущий активный столбец for (byte i = 0; i < 8:
Почему мы видим только рамку с лицом, когда в программе еще есть рамка с крестом? Потому что таким образом программа показывает только одно, в данном случае содержимое матрицы «y», где нарисовано лицо. Как переделать программу, чтобы она отображала крестик, придется разбираться самостоятельно.
У динамических меток есть свои преимущества и недостатки, одним из которых является частое обновление кадров, что является всего лишь одним шагом в анимации изображения. Давайте сделаем простой, но анимированный рекламный баннер аптеки из матрицы, подобные тем, которые мы часто видим в реальной жизни. Матрица будет попеременно показывать крест и стрелку, указывающую на вход в аптеку.
При этом мы будем улучшать программу, делая ее компактнее и быстрее. Сначала мы преобразуем кадры в одномерные 8-байтовые массивы, где биты будут строками. Зачем тратить целый байт на пиксель, если достаточно одного бита? Во-вторых, с помощью магии ссылок и указателей мы будем периодически заменять изображение входом на функцию вывода в массиве. Это позволит вам не писать свою функцию для каждого кадра, а использовать одну для всех байт r8 = {A0, A1, A2, A3, A4, A5, 10, 11}; // строка закрепляет byte c8 = {2, 3, 4, 5, 6, 7, 8, 9}; // контакты столбца byte m28 = { 0b01100110, 0b10010101, 0b00010101, 0b00100101, 0b00010101, 0b00010101, 0b10010101, 0b01100110 }; байт m38 = {0b00100101, 0b00100101, 0b00100010, 0b01101010, 0b10100010, 0b10101010, 0b10101010, 0b01101010:
Я непреднамеренно хотел зайти и купить пару патчей.
Предлагается переделать программу под это как самостоятельную работу.
Конечно, можно чередовать любое количество кадров с любой скоростью и при любых обстоятельствах, все зависит от потребностей и возможностей контроллера с планировщиком.
Как видите, принцип работы динамической светодиодной матрицы достаточно прост, не сложнее, чем у цифрового индикатора. При использовании массивов с большим количеством элементов с участием дополнительных микросхем принцип останется прежним, изменится только способ вывода информации.
Светодиодная матрица и сдвиговые регистры
В нашем уроке мы будем подключать простейшую красную светодиодную матрицу 8х8 к Arduino Uno, нумерация контактов начинается с нижнего левого угла. При этом нумерация ветвей 1-16 не связана никакой логикой с нумерацией столбцов и строк C и R.
Сосредоточившись на уроке по динамическим подсказкам, попробуем использовать 8-битные регистры сдвига в схеме управления подсказками массива. Подключаем один регистр к выходам индикатора, отвечающим за столбцы, а второй к выходам строки.
Принципиальная электрическая схема
Важное замечание №1. Резисторы в этой схеме должны быть на линиях, идущих от первого сдвигового регистра. Этот сдвиговый регистр отвечает за столбцы. При таком подключении каждый резистор будет задавать ток для одного светодиода на каждом шаге динамического алгоритма. Поэтому все светодиоды будут светить равномерно.
Важное замечание №2. Диаграмма выше предназначена только для информационных целей. Правильнее было бы включить в пространство между вторым регистром и матрицей микросхему дополнительного питания, например транзисторную сборку ULN2003.
Программа
Чтобы было веселее, давайте попробуем выделить смайлик в подсказке. Как уже было сказано, для отображения изображения в матрице мы будем использовать динамическую подсказку. То есть мы будем выделять наше изображение построчно. Сначала включаем нужные столбики в верхнем ряду, затем во втором, в третьем и так для всех 8 рядов.
Первый регистр сдвига позаботится о столбцах, а второй — о строках. Таким образом, вывод цепочки будет состоять из двух последовательных записей в регистр: сначала мы передаем код цепочки, затем код точек этой цепочки.
В этой программе мы также будем использовать ускоренную версию функции digitalWrite. Это необходимо для того, чтобы процесс динамической индикации протекал очень быстро. В противном случае мы увидим заметное мерцание матрицы.
Фонтан
константный байт data_pin = PD2; константный байт st_pin = PD3; константный байт sh_pin = PD4; беззнаковое долгое время, next_flick; const беззнаковое целое to_flick = 500; байтовая строка = 0; константные байтовые данные8 = {0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b00111100}; void latchOn () { digitalWriteFast (st_pin, HIGH); digitalWriteFast (st_pin, НИЗКИЙ); } void fill(byte d){ for(char i=0; i<8; i++){ digitalWriteFast(sh_pin, LOW); digitalWriteFast(data_pin, d & (1< next_flick){ next_flick = tm + to_flick; line++; if(line == 8) line = 0; // передать код строки fill(~(1<<(7 строк))) ; // включаем точки на линии # line fill(data[line]); // открываем защелку latchOn(); } }
Основную часть этой программы, включая переменные data_pin, sh_pin, st_pin, next_flick, to_flick и функцию заполнения, мы уже знаем из уроков по сдвиговому регистру и динамической наводке.
Матрица данных хранит восемь строк нашего изображения. Для экономии памяти запишем каждую комбинацию точек в бинарном виде.
Функция latchOn открывает защелку записи. Это следует делать только после заполнения обоих регистров сдвига.
После загрузки программы в Arduino в подсказке появится смайлик.
Анимация на светодиодной матрице
А теперь закончим программу так, чтобы изображение на индикаторе менялось каждые полсекунды. Для этого еще раз вспомним урок о выполнении действий по таймеру.
константный байт data_pin = PD2; константный байт st_pin = PD3; константный байт sh_pin = PD4; беззнаковое долгое время, next_flick, next_switch; const беззнаковое целое to_flick = 500; const unsigned long to_switch = 500000; байтовая строка = 0; байтовый кадр = 0; Данные конструкции Байт [2] 8 = {{0B00111100, 0B01000010, 0B10100101, 0B10000001, 0B10100101, 0B10011001, 0B01000010, 0B00111100}, {0B00111100, 0B01000010, 0B10100101, 0B10000001, 0B1000000001, 0B10000001, 0B10111101, 0B01000010, 0B01000010, 0B00111100} }; void latchOn () { digitalWriteFast (st_pin, HIGH); digitalWriteFast (st_pin, НИЗКИЙ); } void fill(byte d){ for(char i=0; i<8; i++){ digitalWriteFast(sh_pin, LOW); digitalWriteFast(data_pin, d & (1< next_flick){ next_flick = tm + to_flick; line++; if(line == 8) line = 0; fill(~(1<<(7-line))); fill(data[frame][7 строк]); latchOn(); } tm = micros; } }
Загружаем программу в Arduino и наблюдаем за результатом.
Масштабирование светодиодной матрицы
Светодиодная матрица 8х8 подходит для отображения двух цифр или одного символа. Если вы хотите отобразить в подсказке более-менее полезную картинку, вам нужно объединить массивы. Это делается путем добавления новых сдвиговых регистров как по вертикали, так и по горизонтали.
Следует отметить, что скорости контроллера Arduino Uno в сочетании со сдвиговыми регистрами достаточно только для дисплея 16 × 16. Дальнейшее увеличение размера светодиодного дисплея приведет к заметному мерцанию.
Задания
- Гипноз. Запрограммируйте контроллер таким образом, чтобы на светодиодной матрице с периодом в 1 секунду появлялись концентрические окружности с постоянно увеличивающимся радиусом.
- Змеиная игра. Реализуйте игру, известную как змейка, на светодиодной матрице 8×8. Необходимо добавить в схему четыре кнопки для управления направлением движения, а также зуммер, сигнализирующий о событии поедания яблок (или чего там змея ест…).
- Электронный уровень. Добавьте в схему акселерометр. Напишите программу, выводящую на светодиодную матрицу точку, координаты которой зависят от наклона всего устройства. Например, когда устройство установлено параллельно земле (перпендикулярно вектору силы тяжести), то точка находится в центре. Когда электронный уровень наклоняется влево, точка перемещается пропорционально вправо.
:: КАК СДЕЛАТЬ МАТРИЦУ ИЗ СВЕТОДИОДОВ ::
Матричные светодиодные дисплеи 8×8 бывают разных размеров, и с ними интересно работать. Крупные промышленные сборки имеют размер примерно 60 х 60 мм. Однако, если вы ищете гораздо большие светодиодные массивы, их трудно найти.
В этом проекте мы построим действительно большой светодиодный матричный светодиодный экран, который состоит из нескольких больших светодиодных модулей 8×8, соединенных последовательно друг с другом. Размер каждого из этих модулей составляет приблизительно 144 х 144 мм. Особенность этого экрана в том, что при необходимости можно посмотреть на фон за ним. Это позволяет творчески использовать эти экраны, например, размещать их перед стеклянными панелями, чтобы вы могли видеть, что происходит за экраном. Для этого проекта мы будем использовать 10-мм светодиоды. Вы также можете использовать другие размеры. Обычно доступны размеры 3 мм, 5 мм, 8 мм и 10 мм. Хотя дисплей не предназначен для работы с каким-либо микроконтроллером, мы будем использовать популярные платы Arduino и подключать его по SPI, используя всего 3 сигнальных провода. Для создания этого проекта требуются базовые знания в области электроники и пайки компонентов, а также некоторые знания в области использования Arduino. Прошивка здесь. Здесь нужно припаять светодиоды, используя длинные ножки светодиодов. Вы можете использовать светодиоды любых размеров и цветов, но длина ножки (более 23 мм) должна быть достаточной, чтобы их можно было согнуть и припаять. Светодиоды расположены в виде матрицы 8х8, где катоды припаяны для рядов, а аноды для столбцов. Драйвер MAX7219 управляет динамической индикацией светодиодной матрицы. При проектировании каждая светодиодная матрица 8×8 будет основываться на схеме, в которой используются следующие компоненты:
Обратите внимание, что вам может потребоваться выбрать другое значение резистора для работы с используемым вами светодиодом. Этот резистор ограничивает максимальный ток MAX7219, который будет выводиться на светодиоды. А в этом видео наглядно показано, как установить светодиодную матрицу, электронную плату управления и провести простой тест для ее запуска с использованием популярной платы Arduino UNO/Nano. |
К размышлению
Собрав схему управления матрицей, у многих может возникнуть вопрос: «Ну что, за 30 лет никто не нашел более простого способа работы с матрицей?» Вернее, заметили. Есть специализированные микросхемы для работы с разными типами экранов, даже для работы со светодиодной матрицей.
1. У нас есть такой модуль с интерфейсом I2C в RobotClass. Легко подключается к Ардуино. Ознакомиться с этим модулем можно в уроке «Матричный модуль 8×8 с интерфейсом I2C от ROC«.
2. В одном из следующих уроков мы так же научимся управлять индикатором с помощью микросхемы MAX7219. Этот метод позволяет легко комбинировать несколько массивов на большом экране без необходимости усложнять электрическую схему.