| 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 | Похожие запросы: 
 |  |