Обновлено 28 марта 2016
Кравченко Виктор

Arduino UNO + двухцветная LED-матрица 8×8 (24 pin, 1588ABEG-5, bicolor — red+green)

Arduino Arduino Lang
01

Многие радиолюбители в попытке сэкономить становятся счастливыми обладателями безымянных недокументированных китайских компонентов. Такой же жертвой стал и я, получив довольно приличный и качественный набор радиоэлектронных компонентов среди которых оказался и герой этой статьи — LED-матрица 8×8 с маркировками 1588ABEG-5 и SMM-1588ASRG:

02
Светодиодные матрицы на Aliexpress — http://ali.pub/6ku7f
03

Интернет не даст ответ на вопрос, что это за матрица и что с ней делать, а опубликованные примеры введут заблуждение, так как большинство примеров с матрицами такого же размера — 8×8 — нам не подойдут, потому что пинов у них всего 16 — а у нашей — 24. Даташитов на нашу матрицу тоже вряд ли удастся найти — мне не удалось.

04

На помощь приходит страница на AliExpress — она немного проливает свет на конструктив матрицы, опубликованы некоторые схемы:

05
06
07

Ну и какое-никакое описание:

08
09

В итоге имеем — двухцветная (красный и зеленый) LED-матрица 8×8 с общим анодом, рабочее напряжение 5V, 8 пинов — анод (пины 1-4, 21-24), 8 пинов — катод зеленый (пины 5-12), 8 пинов — катод красный (пины 13-20). Нумерация пинов идет с нижнего правого угла, по часовой стрелке, если смотреть со стороны пинов (и наоборот, если смотреть со стороны диодов):

10
На обратной стороне матрицы в нижнем правом углу указана единица (обведена красным кругом) — отсюда и отсчет.
11

Теперь необходимо проверить правильно ли все указано, и правильно ли мы все поняли. Попробуем зажечь красный диод в 3 столбце, 4 строке — для этого, исходя из схемы нужно подать питание на 21 пин, а землю — на 18. Не забываем ставить понижающий резистор на 220 Ом — на всякий случай, нормального даташита нет, а доверять описанию китайского магазина не стоит:

12

13

Таким же образом проверив ещё пару диодов, убеждаемся, что показанная выше схема нашей LED-матрицы — корректна.

14

Использование. Вариант 1 — простой.

Для того, чтобы создать на матрице рисунок, разберемся с тем, что мы будем делать. Поскольку пинов на LED-матрице больше, чем выходов платы Arduino Uno, а вариант — простой — без использования дополнительных микросхем, будем экспериментировать только с красными диодами. Вместе с анодами получится 16 (8 + 8) пинов — вполне достаточно, чтобы все контакты запитать на плату:

15
Слева — исходная схема, справа — отбрасываем зеленые светодиоды, используем только красные
Слева — исходная схема, справа — отбрасываем зеленые светодиоды, используем только красные
16
На схеме 8 понижающих резисторов на 220 Ом
На схеме 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

Если мы подадим напряжение на анод, соответствующий первой строке — вся строка загорится, так как на всех катодных пинах нулевой потенциал:

21
22

Для того, чтобы выключить ненужные светодиоды нужно просто подать на них напряжение — таким образом, разность потенциалов пропадет, и ток через них течь не будет:

23
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

Похожие запросы:

  • arduino LED-matrix 8×8
  • LED-matrix 1588A datasheet
  • Datasheet 1588ABEG-5 matrix bicolor 8×8
  • Datasheer SMM-1588ASRG
  • Bicolor LED matrix 1588ABEG-5
  • How to Read Pins on 8×8 Dot Matrix LED
  • матрица 8×8 и динамическая индикация
comments powered by HyperComments

Яндекс.Метрика