Everyone likes LEDs. I like when I have a bunch of them. So one day I realised that I have about 15 big 32×16 RGB LED matrices in my lab. They are cheaper versions of Adafruit’s led matrixes. Both matrices use standard HUB75 pinout. The pinout is same, LED count is the same, but display doesn’t work — it is wired differently inside.
Driving matrices
Most simple way to do a led matrix is to drive low side columns with sinking driver chips and rows with high side mosfets. When you have bigger display — let’s say 24 driver chips in total, then usually you will make multiple parallel lines of data to clock information faster.
HUB75
HUB75 is a standard interface to control matrices like that. It has binary inputs for mosfet control: A, B, C and D. So you can have up to 16 rows. Also, you have 6 data buses: R1, G1, B1, R2, G2, B2. Now, to control a matrix you have to know two things: how many virtual rows and columns does your matrix have and how are they mapped with reality.
Backside of my LED matrix, 24 drivers are visible.
Differences from device to device
The Adafruit matrix has 12 driver chips and 8 rows controlled by mosfets. Mine have 24 driver chips and 4 rows. Also, Adafruit’s one seems to be mapped quite straightforward way. Mine in the other hand.. rows are separated to eight banks that are all in different directions. Still — no problem. Mark Laane, a programmer in my lab, sat down with the matrix and soon we had a working library. You can find it from here:
Arduino Micro soldered to HUB75
Electrical wiring
I soldered my matrices directly to Arduino Micros. Since the pinout is slightly different from Uno, the connection diagram got hurt a bit. This library works with following connections:
HUB75
Connect to
On Micro
R1
PB2
MOSI
G1
PB3
MISO
B1
PB4
8
GND
GND
R2
PB5
9
G2
PB6
10
B2
PB7
11
GND
GND
A
A0
B
A1
C
A2
D
GND
CLK
A3
LAT
A4
OE
A5
GND
GND
11 thoughts on “ HUB75 RGB LED matrices with Arduino ”
Good hope’re well, I have the same screen for a project in college I have problems to detratar data display out of shape erronera and tried to code adafruit and alternative you present here and still does not show clearly the words
Can not find Adafruit_GFX
Hi..my display module is similar as your .it has 24 chips and 8 banks(HUB 75).And for row control the 4 pins A,B,C,D are displayed as A,B,NC,GND on the Display module PCB.So by these details , i infer that it is a 1/4 scan board.is it right?
hallo, i have rbg 32×16 modul with 1/4 scan rate, can you tell me how its work on my arduino uno? thank you
I have the same problem. But, this link can be a «start»
the thing is, turn that excel like conversion into code, any idea?
Воспользуйтесь цветной светодиодной панелью для создания рекламы в вашем магазине.
Видеообзор
Общие сведения
Светодиодная панель выполнена в пластмассовой рамки. С лицевой стороны расположены 2048 RGB-светодиодов в виде сетки, а с обратной — печатная плата с электронными компонентами.
На рамке корпуса с обратной стороны расположены отверстия под винт М3 для крепления матриц между собой или установкой в корпус.
Матрица фактически разделена на два блока: верхние 16 строк и нижние 16 строк. В верхний блок данные поступают через сигналы R1 , G1 и B1 , а в нижние — через R2 , G2 и B2 .
Одновременно светится только одна строка каждого блока. Для полноценного свечения организована развёртка и данные передаются динамически. Фактически в каждом блоке расположен сдвиговый регистр с выбором адреса на строку.
Сигналом LAT сигнализируем, чтобы сдвиговый регистр принял строку данных. Дальше в цикле 16 раз выставляем данные (R1,G1,B1,R2,G2,B2) и запихиваем их низким импульсом CLK. Сразу в оба сдвиговых регистра.
Входами A, B, C, D выбираем строку отображения. А точнее две строки верхнего и нижнего блока.
Сигнал поступает на вход панели, через буферные микросхемы транслируется дальше, к следующим панелям. Попутно сигнал ответвляется и попадает на контроллеры ICN2012, которые уже управляют драйверами DP5020B. Светодиоды соединены в матрицу и соответственно есть горизонтальные и вертикальные линии.
Каждый из драйверов получает как сигнал включения светодиода, так и команду управления его яркостью свечения, так управляются светодиоды.
Можно использовать в любых проектах, где требуется вывод данных на цветной дисплей размерами 64×32 пикселя. В качестве данных для вывода могут использоваться изображения, символы или бегущая строка.
Представлена в 3 вариантах:
Видео:
Спецификация:
Шаг пикселя:
P2.5: 2.5мм;
P3: 3мм;
P4: 4мм;
Питание: 5В/до4А;
Интерфейс модуля: HUB75;
Структура пикселя: 1R1G1B;
Режим сканирования: 1/16;
Яркость: 1100
1300кд/кв.м;
Оттенки серого: 14бит;
Глубина цвета: >16бит;
Кадровая частота: 60Гц/с;
Частота обновления: 100Гц/с;
Расстояние комфортной видимости: >4м;
Углы обзора: 160°/160°;
Степень защиты: IP50 (лицевая панель)/ IP4X (задняя панель);
Количество пикселей: 2048;
Рабочая температура: -10°
40°С;
Размеры модуля:
P3: 192мм x 96мм х 15мм;
P2.5: 160мм х 80мм х 15мм;
P4: 256мм x 128мм х 15мм;
Подключение:
Шлейф:
Для подключения матрицы используется 16-проводной шлейф:
Вывод матрицы
Шлейф
Подключение шлейфа
Распиновка шлейфа
Выводы:
Для подключения шлейфа к управляющей плате Вам понадобится 16 проводов папа-папа.
Вывод шлейфа
Вывод Arduino UNO (максимально 32х32)
Вывод Piranha ULTRA
Вывод Arduino Mega
Вывод R1
Вывод G1
Вывод B1
Вывод R2
Вывод G2
Вывод B2
Вывод A
Вывод B
Вывод C
Вывод D
Вывод CLK
Вывод OE
Вывод LAT
Выводы GND
Вывод 2
Вывод 3
Вывод 4
Вывод 5
Вывод 6
Вывод 7
Вывод A0
Вывод A1
Вывод A2
Вывод A3
Вывод 8
Вывод 9
Вывод 10
Выводы GND
Вывод 8
Вывод 9
Вывод 4
Вывод 5
Вывод 6
Вывод 7
Вывод A0
Вывод A1
Вывод A2
Вывод A3
Вывод 11
Вывод 12
Вывод 13
Выводы GND
Вывод 24
Вывод 25
Вывод 26
Вывод 27
Вывод 28
Вывод 29
Вывод A0
Вывод A1
Вывод A2
Вывод A3
Вывод 11
Вывод 9
Вывод 10
Выводы GND
Питание:
К RGB матрице 64х32 подключается питание напряжением 5В и током до 4А.
Чтобы матрица не вышла из строя раньше времени, рекомендуем воспользоваться надёжным источником питания.
Подробнее о матрице:
Данная матрица может быть подключена к Arduino Uno и её аналогам, к Piranha ULTRA или Arduino Mega. В случае с Arduino Uno и её аналогами памяти для управления всеми светодиодами матрицы не хватит, что означает либо ограничение количества управляемых светодиодов, либо переход на более ресурсоёмкую Piranha ULTRA или Arduino Mega.
Выбор разрешения матрицы:
Данная библиотека поддерживает масштабируемость изображения. При объявлении объекта Вы можете указать тот размер, который Вам необходим: 32х32, 64х32.
Для выбора разрешения при объявлении объекта укажите следующие параметры:
Для разрешения 32х32 (изображение будет продублировано):
Для разрешения 64х32:
Так же матрицу возможно подключить к плате семейства Raspberry или Teensy (3.5, 3.6). Данные платы обладают характеристиками для подключения сразу нескольких матриц как единого целого, что позволит увеличить рабочую область.
Подключение к Arduino Uno и её аналогам:
Характеристики Arduino Uno и её аналогов позволяют работать с матрицами разных размеров вплоть до 32х32 пикселя. Для работы с матрицами большего размера Вам придётся ограничить количество отображаемых светодиодов до максимально поддерживаемого (32х32).
Для того, чтобы матрицы размера 64х32 и меньше работали на Arduino Uno и её аналогах, необходимо в начале любого скетча изменить следующие строки:
Выводы CLK, OE, LAT:
Разрешение:
При объявлении объекта необходимо указать требуемое разрешение:
Корпус
Для матриц P2.5 и P3 нами так же были разработаны корпуса, используя которые Вы сможете создать законченное устройство.
Для матрицы с шагом 2.5мм:
Для матрицы с шагом 3мм:
Примеры:
Включение светодиодов случайным образом
Перелив всей матрицы от одного цвета к другому
Отображение квадратов на матрице
Вывод гаммы цвета в круге
«Прыгающие» по матрице круги
Бегущая строка
Вывод произвольного изображения
Описание функций библиотеки:
Библиотека Adafruit RGBmatrixPanel работает только в паре с библиотекой Adafruit GFX, учитывайте это при работе с матрицей.
На заметку: Если у Вас матрица с драйверами FM6126A, то необходимо использовать библиотеку скаченную с нашего сайта или с нашего репозитория на Github.com, в которую мы добавили инициализацию этих драйверов.
Подключение библиотеки:
Если Вы используете матрицу 32х16, тогда закомментируйте строку с константой D, и удалите её в дальнейшем в строке объявления объекта;
Если Вы используете матрицу 32х32, тогда удалите из строки объявления объекта значение 64 в конце;
Если Вы используете матрицу 64х32, тогда оставьте всё, как есть;
Функция begin();
Назначение: Функция инициирует работу светодиодной матрицы.
Синтаксис: begin();
Параметры: Нет.
Возвращаемые значения: Нет.
Примечание:
Функцию необходимо вызвать до обращения к любым другим функциям библиотеки.
Функцию достаточно вызвать один раз в коде setup .
Функцию можно использовать для определения наличия светодиодной матрицы.
Пример:
Функция fillScreen();
Назначение: Заливка всей матрицы указанным цветом.
Синтаксис: fillScreen(ЦВЕТ):
Параметры:
ЦВЕТ — заливка светодиода указанным цветом:
matrix.Color333(R,G,B):
R — яркость красного цвета, указывается числом от 0 до 7;
G — яркость зелёного цвета, указывается числом от 0 до 7;
B — яркость синего цвета, указывается числом от 0 до 7;
Возвращаемые значения: Нет.
Примечание:
Установленная яркость не сохраняется после отключения питания.
Пример:
Функция drawPixel();
Назначение: Заливка одного светодиода указанным цветом.
Синтаксис: drawPixel(X, Y, ЦВЕТ):
Параметры:
X — координата светодиода по горизонтали;
Y — координата светодиода по вертикали;
ЦВЕТ — заливка светодиода указанным цветом:
matrix.Color333(R,G,B):
R — яркость красного цвета, указывается числом от 0 до 7;
G — яркость зелёного цвета, указывается числом от 0 до 7;
B — яркость синего цвета, указывается числом от 0 до 7;
Возвращаемые значения: Нет.
Примечание:
Указанная фигура не сохраняется после отключения питания;
Пример:
Функция drawLine();
Назначение: Заливка линии толщиной 1 пиксель указанным цветом.
Синтаксис: drawLine(X1, Y1, X2, Y2, ЦВЕТ):
Параметры:
X1 — левая верхняя координата линии по горизонтали;
Y1 — левая верхняя координата линии по вертикали;
X2 — правая нижняя координата линии по горизонтали;
Y2 — правая нижняя координата линии по вертикали;
ЦВЕТ — заливка светодиода указанным цветом:
matrix.Color333(R,G,B):
R — яркость красного цвета, указывается числом от 0 до 7;
G — яркость зелёного цвета, указывается числом от 0 до 7;
B — яркость синего цвета, указывается числом от 0 до 7;
Возвращаемые значения: Нет.
Примечание:
Указанная фигура не сохраняется после отключения питания;
R — яркость красного цвета, указывается числом от 0 до 7;
G — яркость зелёного цвета, указывается числом от 0 до 7;
B — яркость синего цвета, указывается числом от 0 до 7;
Возвращаемые значения: Нет.
Примечание:
Указанная фигура не сохраняется после отключения питания
Пример:
Функция fillCircle();
Назначение: Заливка окружности указанным цветом.
Синтаксис: fillCircle(X, Y, R, ЦВЕТ):
Параметры:
X — координата окружности по горизонтали;
Y — координата окружности по вертикали;
R — радиус окружности;
ЦВЕТ — заливка светодиода указанным цветом:
matrix.Color333(R,G,B):
R — яркость красного цвета, указывается числом от 0 до 7;
G — яркость зелёного цвета, указывается числом от 0 до 7;
B — яркость синего цвета, указывается числом от 0 до 7;
Возвращаемые значения: Нет.
Примечание:
Указанная фигура не сохраняется после отключения питания
Пример:
Функция drawBitmap();
Назначение: Вывод произвольного изображения;
Синтаксис: drawBitmap(X, Y, ИМЯ_МАССИВА, ШИРИНА,ВЫСОТА, ЦВЕТ);
Параметры:
X — координата левого верхнего угла изображения по горизонтали;
Y — координата левого верхнего угла изображения по вертикали;
ИМЯ_МАССИВА — имя массива с изображением;
ШИРИНА — размер изображения в пикселях по ширине;
ВЫСОТА — размер изображения в пикселях по высоте;
ЦВЕТ — заливка светодиода указанным цветом:
matrix.Color333(R,G,B):
R — яркость красного цвета, указывается числом от 0 до 7;
G — яркость зелёного цвета, указывается числом от 0 до 7;
B — яркость синего цвета, указывается числом от 0 до 7;
Возвращаемые значения: Нет.
Пример:
Функция setCursor();
Назначение: Указание верхней левой точки начала вывода текста;
Синтаксис: setCursor(X, Y):
Параметры:
X — координата по горизонтали;
Y — координата по вертикали;
Возвращаемые значения: Нет.
Примечание:
По умолчанию, начальной точкой вывода текста является точка <0;0>;
Пример:
Функция setTextWrap()
Назначение: Перенос текста на следующую строку;
Синтаксис: setTextWrap(ФЛАГ):
Параметры:
bool true / false — флаг переноса строки.
Возвращаемые значения: Нет.
Примечание:
При указании false строка выводится единым целым, всё, что не влезло по размеру отсекается;
При указании true строка выводится на матрицу так, что всё, что не влезло, автоматически переносится на следующую строку;
Пример:
Функция setTextSize();
Назначение: Задание размера букв текста;
Синтаксис: setTextSize(РАЗМЕР):
Параметры:
РАЗМЕР — указывается числом от 1 до 8;
Возвращаемые значения: Нет.
Примечание:
По умолчанию размер текста указан равным 1.
Размер символов размера 1: 8х5 пикселей;
Пример:
Функция setTextColor();
Назначение: Задание цвета выводимому тексту;
Синтаксис: setTextColor(ЦВЕТ):
Параметры:
ЦВЕТ — заливка светодиода указанным цветом:
matrix.Color333(R,G,B):
R — яркость красного цвета, указывается числом от 0 до 7;
G — яркость зелёного цвета, указывается числом от 0 до 7;B — яркость синего цвета, указывается числом от 0 до 7;
Возвращаемые значения: Нет.
Пример:
Функция print();
Назначение: Вывод текста;
Синтаксис: print(ТЕКСТ):
Параметры:
ТЕКСТ — текст, выводимый на матрицу;
Возвращаемые значения: Нет.
Пример:
Функция backBuffer();
Назначение: Возвращает адрес массива с элементами матрицы;
Синтаксис: backBuffer();
Параметры: Нет.
Возвращаемые значения:
адрес буфера матрицы;
Примечание:
Данная функция используется с целью ускорения вывода изображения, позволяя записывать данные сначала в буфер, а затем на матрицу, но при этом время инициализации увеличивается;
Функция указывается до matrix.begin();
Пример:
Функция включения двойной буферизации;
Назначение: Включает двойную буферизацию для сглаживания эффектов анимации и уменьшения эффекта «мерцания»;
bool true / false — флаг включения двойной буферизации;
Возвращаемые значения: Нет
Примечание:
Если включена двойная буферизация, то данные не будут выводиться на экран до тех пор, пока не будет вызвана функция swapBuffer();
Если указан флаг false, тогда используется обычная буферизация;
Если указан флаг true, тогда используется двойная буферизация, в связи с чем объём памяти, требуемый для выполнения кода, увеличивается;
Пример:
Функция swapBuffers();
Назначение: При включенной двойной буферизации — выводит из буфера данные;
Синтаксис: swapBuffers(ФЛАГ);
Параметры:
bool true / false — флаг циклического копирования в буфер;
Возвращаемые значения:
адрес буфера матрицы;
Примечание:
Данная функция используется для сглаживания вывода изображения и уменьшения эффекта «мерцания»;
Если включена двойная буферизация, то данные не будут выводиться на экран до тех пор, пока не будет вызвана функция swapBuffers();
Если указан флаг false, тогда данные копируются в буфер однократно и в дальнейшем могут быть удалены. При выводе новой информации на матрицу, она будет отображаться поверх старой;
Если указан флаг true, тогда данные циклически копируются в буфер при каждом выполнении кода, что позволяет отображать информацию «поверх» всего остального;
Пример:
Функции width() и height();
Назначение: Позволяют получить значение размера матрицы
Синтаксис: width() / height();
Параметры: Нет;
Возвращаемые значения:
width() — возвращает максимальное значение пикселей по горизонтали (ширина);
height() — возвращает максимальное значение пикселей по вертикали (высота);
Примечание: Нет;
Пример:
Функции указания цвета
Изначально, библиотека была рассчитана на вывод цвета в формате 3R3G3B (3 бита на канал).
В дальнейшем, после внесения в неё изменений, формат вывода менялся на 4R4G4B (4 бита) и 8R8G8B (8 бит), а в последней версии стал универсальным для всех дисплеев и матриц, и теперь выводится в формате 5R6G5B(16 бит).
В связи с этим, у библиотеки есть несколько функций задачи цвета, которые в конечном итоге выводят цвет в формате 5R6G5B: