01 |
Многие радиолюбители в попытке сэкономить становятся счастливыми обладателями безымянных недокументированных китайских компонентов. Такой же жертвой стал и я, получив довольно приличный и качественный набор радиоэлектронных компонентов среди которых оказался и герой этой статьи — LED-матрица 8×8 с маркировками 1588ABEG-5 и SMM-1588ASRG: |
|
02 |
|
Светодиодные матрицы на Aliexpress — http://ali.pub/6ku7f
|
03 |
Интернет не даст ответ на вопрос, что это за матрица и что с ней делать, а опубликованные примеры введут заблуждение, так как большинство примеров с матрицами такого же размера — 8×8 — нам не подойдут, потому что пинов у них всего 16 — а у нашей — 24. Даташитов на нашу матрицу тоже вряд ли удастся найти — мне не удалось. |
|
04 |
На помощь приходит страница на AliExpress — она немного проливает свет на конструктив матрицы, опубликованы некоторые схемы: |
|
07 |
Ну и какое-никакое описание: |
|
09 |
В итоге имеем — двухцветная (красный и зеленый) LED-матрица 8×8 с общим анодом, рабочее напряжение 5V, 8 пинов — анод (пины 1-4, 21-24), 8 пинов — катод зеленый (пины 5-12), 8 пинов — катод красный (пины 13-20). Нумерация пинов идет с нижнего правого угла, по часовой стрелке, если смотреть со стороны пинов (и наоборот, если смотреть со стороны диодов): |
|
10 |
На обратной стороне матрицы в нижнем правом углу указана единица (обведена красным кругом) — отсюда и отсчет.
|
|
11 |
Теперь необходимо проверить правильно ли все указано, и правильно ли мы все поняли. Попробуем зажечь красный диод в 3 столбце, 4 строке — для этого, исходя из схемы нужно подать питание на 21 пин, а землю — на 18. Не забываем ставить понижающий резистор на 220 Ом — на всякий случай, нормального даташита нет, а доверять описанию китайского магазина не стоит: |
|
13 |
Таким же образом проверив ещё пару диодов, убеждаемся, что показанная выше схема нашей LED-матрицы — корректна. |
|
14 |
Использование. Вариант 1 — простой. Для того, чтобы создать на матрице рисунок, разберемся с тем, что мы будем делать. Поскольку пинов на LED-матрице больше, чем выходов платы Arduino Uno, а вариант — простой — без использования дополнительных микросхем, будем экспериментировать только с красными диодами. Вместе с анодами получится 16 (8 + 8) пинов — вполне достаточно, чтобы все контакты запитать на плату: |
|
15 |
Слева — исходная схема, справа — отбрасываем зеленые светодиоды, используем только красные
|
|
16 |
На схеме 8 понижающих резисторов на 220 Ом
|
|
17 | На заметку: |
Не рекомендуется использовать выходы Arduino 0(RX) и 1(TX). Потому что их использование может непредсказуемо сказаться на заливках скетча (uploading через TX, вплоть до зависания) и на работе объекта Serial — монитор не увидит сообщения оправляемые платой (Serial.print(...) через RX). Если все же приходится их использовать, то отключайте 1(TX) перед заливкой скетча, и не используйте обратную связь через Serial в случае с 0(RX).
|
|
18 |
Для того, чтобы отобразить заданную комбинацию светодиодов на матрице, недостаточно статично подать напряжение на определенные аноды — потому что в столбцах у нас общий катод — из-за этого от строки к строке будет происходить наложение сигналов и должного эффекта мы не достигнем. Придется идти на стандартную хитрость — отображать по очереди каждую из строк, но делать это так быстро, что глазу будет казаться, что светодиоды горят статично — такой метод отображения данных называется динамической индикацией. |
|
19 |
Теперь рассмотрим механизм включения светодиодов в одной строке. Мы задаем маску в виде целочисленного массива вида {0, 1, 0, 1, 0, 0, 1, 1}, либо элемента байтового массива — 0b01010011 — в ней каждому элементу соответствует состояние отдельного сведодиода в строке. |
|
20 |
Если мы подадим напряжение на анод, соответствующий первой строке — вся строка загорится, так как на всех катодных пинах нулевой потенциал: |
|
22 |
Для того, чтобы выключить ненужные светодиоды нужно просто подать на них напряжение — таким образом, разность потенциалов пропадет, и ток через них течь не будет: |
|
24 |
Далее переходим к следующей строке и т. д. Код скетча: |
|
25 | Arduino (C++) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 /* Указываем входы платы соответствующие строка матрицы по порядку.
Первая строка соответствует 24 пину LED-матрицы - он подключен к 13 выходу платы
Вторая строка соответствует 23 пину LED-матрицы - он подключен к 12 выходу платы
...
За пятую строку отвечает 4 пин LED-матрицы - он подключен к выходу A3 и т.д.
*/
int rowPins[] = {13, 12, 11, 10, A3, A2, A1, A0};
/* Указываем входы платы соответствующие столбцам матрицы по порядку
Первый столбец соответствует 20 пину LED-матрицы - он подключен к 9 выходу платы
Второй столбец соответствует 19 пину LED-матрицы - он подключен к 8 выходу платы
...
*/
int colPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
int mask[8][8] = {
{0, 0, 1, 1, 1, 1, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0},
{1, 0, 1, 0, 0, 1, 0, 1},
{1, 0, 1, 0, 0, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 0, 1},
{0, 1, 0, 0, 0, 0, 1, 0},
{0, 0, 1, 1, 1, 1, 0, 0}
};
void setup()
{
for (int i = 0; i < 8; ++i) {
pinMode(rowPins[i], OUTPUT); // Определяем пины как выход
pinMode(colPins[i], OUTPUT); // Определяем пины как выход
}
}
void loop()
{
for (int r = 0; r < 8; ++r) {
for (int c = 0; c < 8; ++c) {
/*Сначала присваиваем значения столбцам, чтобы при подключении напряжения к
аноду загорелась сразу вся строка - если подавать сначала напряжение на анод,
диоды будут разной яркости*/
digitalWrite(colPins[c], ((mask[r][c] == 1) ? LOW : HIGH));
}
digitalWrite(rowPins[r], HIGH); /*Подаем напряжение на анод - зажигаем всю строку*/
/*Если значение паузы изменить до видимого значения 100, то станет понятен механизм работы*/
delay(1); /*Делаем паузу, чтобы зафиксировать изображение*/
digitalWrite(rowPins[r], LOW); /*Убираем напряжение со строки, переходим к следующей*/
}
} |
|
26 |
Подписывайтесь на канал
, чтобы быть в курсе обновлений! |
На видео показана построчное отображение заданных светодиодов. Скетч — sketch_mar15b.ino (3,00 KB)
|
27 |
Об использовании сдвигового регистра 74HC595N для уменьшения количества задействованных контактов платы Arduino напишу позже... |
|
28 |
Похожие запросы:
|
|