Шаг 2: Работа
Точечные матричные блоки обычно имеют матрицу светодиодов 5×7 или 8×8. Светодиоды подключены в
матрица такая, что либо анод, либо катод каждого светодиода являются общими в каждом ряду. Другими словами, в
матричный блок светодиодов с общим анодом, каждый ряд светодиодов будет иметь все свои аноды в этом ряду
все вместе. Катоды светодиодов все были бы соединены вместе в каждой колонке. Причина этого будет
скоро станет очевидным.
Типичный одноцветный матричный модуль 8×8 будет иметь 16 контактов, 8 для каждой строки и 8 для каждого столбца.
Причина, по которой строки и столбцы связаны друг с другом, заключается в том, чтобы минимизировать количество требуемых выводов.
Если бы это было не так, для одноцветного матричного блока 8×8 потребовалось бы 65 контактов, по одному на каждый светодиод и
общий анод или катодный разъем. При соединении строк и столбцов только 16 контактов
требуется.
Однако теперь это создает проблему, если вы хотите, чтобы конкретный светодиод загорался в определенной позиции. Если для
Например, у вас был общий анодный блок, и вы хотели зажечь светодиод в X, Y позиции 5, 3 (5-й столбец, 3-й ряд), тогда вы примените ток к 3-й строке и заземлите 5-й контакт столбца.
Светодиод в 5-м столбце и 3-м ряду теперь будет гореть.
Теперь давайте представим, что вы хотите также зажечь светодиод в столбце 3, строке 6. Таким образом, вы подаете ток на
6-й ряд и заземлите 3-й столбец булавки. Светодиод в столбце 3, строка 6 теперь горит. Но подождите …
Светодиоды в столбце 3, строке 6 и столбце 5, строке 6 также загорелись.
Это потому, что вы подаете питание на ряды 3 и 6 и заземляете столбцы 3 и 5. Вы не можете
выключите ненужные светодиоды, не выключая те, которые вы хотите. Казалось бы, что нет
Таким образом, вы можете зажечь только два необходимых светодиода, соединяя строки и столбцы, как они есть.
Единственный способ, которым это будет работать, – это иметь отдельную распиновку для каждого светодиода, то есть количество выводов.
будет прыгать с 16 до 65. 65-контактный матричный модуль будет очень трудно подключить и контролировать, потому что
вам нужен микроконтроллер с как минимум 64 цифровыми выходами.
Есть ли способ обойти эту проблему? Да, есть, и это называется мультиплексирование (или muxing).
мультиплексирование это метод включения одного ряда дисплея за раз. Выбрав столбец
который содержит строку, содержащую светодиод, который вы хотите зажечь, а затем включить питание
ряд (или наоборот для обычных катодных дисплеев), выбранные светодиоды в этом ряду будут
загореться. Затем этот ряд выключается и включается следующий ряд, опять же с соответствующим
выбранные столбцы, и светодиоды во втором ряду теперь загорятся. Повторите с каждым рядом, пока не доберетесь до
дно, а затем начать снова на вершине.
Если это сделать достаточно быстро (с частотой более 100 Гц или 100 раз в секунду), то явление
постоянство зрения (когда остаточное изображение остается на сетчатке в течение приблизительно 1/25 секунды) будет означать
что дисплей будет выглядеть устойчивым, даже если каждый ряд включается и выключается по очереди.
Используя эту технику, вы решаете проблему отображения отдельных светодиодов без
другие светодиоды в том же столбце или строке также горят.
Сканируя вниз строки и освещая соответствующие светодиоды в каждом столбце этой строки и
делая это очень быстро (более 100 Гц), человеческий глаз будет воспринимать изображение как устойчивое, а изображение
сердце будет узнаваемо на светодиодной схеме.
Вы используете эту технику мультиплексирования в коде проекта. Вот как вы должны отобразить
анимация сердца без отображения посторонних светодиодов.
07.Display: RowColumnScanning
В состав Android IDE входит пример для светодиодной матрицы File | Examples | 07.Display | RowColumnScanning. Суть в следующем – с помощью двух потенциометров считываем показания с аналоговых выводов в интервале от 0 до 7. Показания от первого потенциометра указывают на вывод из ряда, а от второго на вывод из колонки матрицы. Таким образом, мы можем крутить ручки двух потенциометров и выбирать, какой светодиод из матрицы следует включить.
Я предлагаю упростить пример. Уберём потенциометры и удалим функцию readSensors() из скетча. Теперь, чтобы включить любой светодиод, нужно указать номер ряда и номер колонки в двумерном массиве и подать на него LOW.
Включим светодиоды по диагонали.
Матрица с драйвером MAX7219
Существует более удобный вариант матрицы с драйвером MAX7219 в виде отдельного модуля. Есть полностью готовые модули, а есть вариант, когда детали поставляются в разобранном виде и нужно самостоятельно паять.
Благодаря применению SPI модуль имеет только пять выводов с двух сторон: питание, земля и три цифровых вывода.
Модули можно соединять между собой, получая большое табло.
Сначала попробуем вариант включения любого светодиода матрицы вручную. В коде используются несколько функций. Для одиночного модуля вызываем функцию maxSingle(). Если используется несколько модулей, то уберите комментарии с вызовов функций maxAll(), maxOne().
При вызове функции maxSingle() в первом аргументе указываем номер ряда, во втором число в степени двойки – 1, 2, 4, 8 и т.д.
Пробное подключение
У матрицы шестнадцать выводов, что представляет определённую проблему при прототипировании. Приходится задействовать практически все выводы платы. Но так как все светодиоды в матрице независимы, мы можем поиграться с одной. Соединим матрицу с платой по следующей схеме: вывод 9 от матрицы соединяем с выводом 2 на плате, а вывод 13 от матрицы с GND через резистор.
При таком подключении мы задействуем самый верхний левый светодиод матрицы. Запускаем скетч мигания светодиодом Blink, чтобы увидеть работу одного светодиода.
В реальных проектах мы должны соединить все выводы матрицы. Так как их шестнадцать, то кроме цифровых портов нам нужно задействовать и аналоговые, которые могут работать как цифровые. В этом случае порт A0 становится 14, A1 – 15 и т.д. Соединив все выводы матрицы, можно включить нужный светодиод, подавая HIGH на вывод ряда и LOW на вывод столбца. Включим светодиод из второй строки и первой колонки.