Руководство по матрицам ELABORY R/G/B 8х8
Общие сведения
Матрицы ELABORY R/G/B 8х8 имеют миниатюрные размеры (28х28 мм) и предназначены для использования в различных гаджетах и приборах в качестве многофункциональных индикаторов. Например, на них можно отображать буквы, цифры и мнемонические знаки, информируя пользователей о тех или иных состояниях устройства.
Матрицы R/G/B 8х8 можно также использовать в т. н. «бегущих строках» для вывода различной информации, а также в мини-дисплеях, состоящих из нескольких матриц R/G/B 8х8, сгруппированных по горизонтали и вертикали.
Матрицы выпускаются в трёх основных цветах: красном, зелёном или синем. Это монохромные матрицы, которые могут отображать информацию в заранее определённом цвете и не могут менять цвет своего свечения.
Технические подробности
Каждый модуль R/G/B 8х8 содержит 64 светодиода, управляемых специализированной микросхемой MAX7219, а управление происходит по 5 линиям:
VCC — напряжение питания 5 В
GND — «земля»
DIN — вход линии данных (DATA IN)
CS — линия «CHIP SELECT»
CLK — линия импульсов синхронизации
В случае создания дисплея из нескольких матриц, последующие модули подключаются к выходному разъёму модуля:
VCC — напряжение питания 5 В
GND — «земля»
DOUT — выход линии данных (DATA OUT)
CS — линия «CHIP SELECT»
CLK — линия импульсов синхронизации
Управление матрицами R/G/B 8х8
К микроконтроллерам модули R/G/B 8х8 подключаются при помощи интерфейса SPI, а управление выводом осуществляется соответствующим программным обеспечением. Это может быть ваш собственный код для любого микроконтроллера, либо можно использовать готовые библиотеки для управления матрицами на чипах MAX72XX.
В этом руководстве мы рассмотрим примеры работы с матрицами R/G/B 8х8 при помощи популярной системы Arduino.
Поскольку светодиодные модули на MAX72XX очень популярны, то и библиотек для работы с ними существует множество. Все эти библиотеки отличаются как набором функций, так и их реализацией. Мы будем рассматривать примеры работы с библиотекой LedControl.
Управление одной матрицей
Для начала рассмотрим пример работы с одной матрицей R/G/B 8х8. Схема соединения в этом случае очень проста — модуль матрицы подключается к микроконтроллеру при помощи двух линий питания (5V и GND) и трёх линий управляющего интерфейса DIN, CS, CLK.
DIN — GPIO11
CLK — GPIO13
CS — GPIO10
В этом примере мы выводим на матрицу слово «Arduino» по отдельным буквам, одну за другой.
/*
ELABORY MAX72XX
One module example
*/
#include "LedControl.h"
// DIN, CLK, CS, modules
LedControl lc = LedControl(11, 13, 10, 1);
unsigned long delayWord = 2000;
void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 1);
lc.clearDisplay(0);
}
void writeWord() { // Word "Arduino" (need at least 5x7 leds)
byte a[5] = {B01111110, B10001000, B10001000, B10001000, B01111110};
byte r[5] = {B00111110, B00010000, B00100000, B00100000, B00010000};
byte d[5] = {B00011100, B00100010, B00100010, B00010010, B11111110};
byte u[5] = {B00111100, B00000010, B00000010, B00000100, B00111110};
byte i[5] = {B00000000, B00100010, B10111110, B00000010, B00000000};
byte n[5] = {B00111110, B00010000, B00100000, B00100000, B00011110};
byte o[5] = {B00011100, B00100010, B00100010, B00100010, B00011100};
lc.setRow(0, 0, a[0]); lc.setRow(0, 1, a[1]); lc.setRow(0, 2, a[2]); lc.setRow(0, 3, a[3]); lc.setRow(0, 4, a[4]); delay(delayWord);
lc.setRow(0, 0, r[0]); lc.setRow(0, 1, r[1]); lc.setRow(0, 2, r[2]); lc.setRow(0, 3, r[3]); lc.setRow(0, 4, r[4]); delay(delayWord);
lc.setRow(0, 0, d[0]); lc.setRow(0, 1, d[1]); lc.setRow(0, 2, d[2]); lc.setRow(0, 3, d[3]); lc.setRow(0, 4, d[4]); delay(delayWord);
lc.setRow(0, 0, u[0]); lc.setRow(0, 1, u[1]); lc.setRow(0, 2, u[2]); lc.setRow(0, 3, u[3]); lc.setRow(0, 4, u[4]); delay(delayWord);
lc.setRow(0, 0, i[0]); lc.setRow(0, 1, i[1]); lc.setRow(0, 2, i[2]); lc.setRow(0, 3, i[3]); lc.setRow(0, 4, i[4]); delay(delayWord);
lc.setRow(0, 0, n[0]); lc.setRow(0, 1, n[1]); lc.setRow(0, 2, n[2]); lc.setRow(0, 3, n[3]); lc.setRow(0, 4, n[4]); delay(delayWord);
lc.setRow(0, 0, o[0]); lc.setRow(0, 1, o[1]); lc.setRow(0, 2, o[2]); lc.setRow(0, 3, o[3]); lc.setRow(0, 4, o[4]); delay(delayWord);
lc.setRow(0, 0, 0); lc.setRow(0, 1, 0); lc.setRow(0, 2, 0); lc.setRow(0, 3, 0); lc.setRow(0, 4, 0); delay(delayWord);
}
void loop() {
writeWord();
}
Здесь мы указываем номера используемых GPIO и задаём работу с одной подключённой матрицей.
LedControl lc = LedControl(11, 13, 10, 1);
Затем инициализируем и настраиваем матрицу.
lc.shutdown(0, false); lc.setIntensity(0, 1); lc.clearDisplay(0);
Далее в бинарном формате создаём начертание букв слова «Arduino».
byte a[5] = {B01111110, B10001000, B10001000, B10001000, B01111110};
byte r[5] = {B00111110, B00010000, B00100000, B00100000, B00010000};
byte d[5] = {B00011100, B00100010, B00100010, B00010010, B11111110};
byte u[5] = {B00111100, B00000010, B00000010, B00000100, B00111110};
byte i[5] = {B00000000, B00100010, B10111110, B00000010, B00000000};
byte n[5] = {B00111110, B00010000, B00100000, B00100000, B00011110};
byte o[5] = {B00011100, B00100010, B00100010, B00100010, B00011100};
И выводим по буквам само слово на матрицу.
Управление несколькими матрицами
Теперь рассмотрим более сложный вариант работы с несколькими матрицами. В этом случае мы будем использовать два модуля матриц R/G/B 8х8, но этот же принцип можно экстраполировать и на большее количество модулей.
Примечание: в случае создания дисплеев из нескольких матриц, физически все они соединяются последовательно, а геометрия целого дисплея и ориентация в нём отдельных модулей задаются уже на программном уровне (используемая вами библиотека должна поддерживать эту возможность).
Схема подключения первого модуля такая же, как и схема подключения единственного модуля, а последующие модули подключаются своими входными разъёмами на выходные разъёмы предыдущих модулей.
В этом примере мы выведем два разных процесса на первую и вторую матрицы отдельно. Первая матрица будет построчно заполняться точками, а во вторую матрицу мы будем выводить хаотическое заполнение точками. Это два разных процесса и этот пример демонстрирует принцип независимого вывода информации в различные подключённые матрицы.
DIN — GPIO11
CLK — GPIO13
CS — GPIO10
Физическое соединение микроконтроллера и матрицы такое же как в предыдущем примере, разница состоит только в том, что в данном случае мы подключили сборку из двух модулей R/G/B 8х8.
/*
ELABORY MAX72XX
Multi modules example
*/
#include "LedControl.h"
// DIN, CLK, CS, modules
LedControl lc = LedControl(11, 13, 10, 2);
bool statePnts = true;
bool stateRndm = true;
unsigned long delayTime = 3;
int row = 0;
int col = 0;
void setup() {
int devices = lc.getDeviceCount();
for (int addr = 0; addr < devices; addr++) {
lc.shutdown(addr, false);
lc.setIntensity(addr, 1);
lc.clearDisplay(addr);
}
}
void points() {
row++;
if (row > 7) {
row = 0;
col++;
if (col > 7) {
col = 0;
if (statePnts) {statePnts = false;}
else {statePnts = true;}
}
}
lc.setLed(0, row, col, statePnts);
}
void rndm() {
int col = random(0, 8);
int row = random(0, 8);
if (stateRndm) {stateRndm = false;}
else {stateRndm = true;}
lc.setLed(1, row, col, stateRndm);
}
void loop() {
points(); delay(delayTime);
rndm(); delay(delayTime);
}
Здесь мы инициализируем и настраиваем матрицы в мульти-режиме (в данном случае это 2 матрицы). Обратите внимание, что инициализация одной матрицы из прошлого примера и инициализация сборки из нескольких матриц отличаются.
void setup() {
int devices = lc.getDeviceCount();
for (int addr = 0; addr < devices; addr++) {
lc.shutdown(addr, false);
lc.setIntensity(addr, 1);
lc.clearDisplay(addr);
}
}
Далее мы создаём функцию построчного заполнения первой матрицы:
void points() {
row++;
if (row > 7) {
row = 0;
col++;
if (col > 7) {
col = 0;
if (statePnts) {statePnts = false;}
else {statePnts = true;}
}
}
lc.setLed(0, row, col, statePnts);
}
И функцию хаотического заполнения второй матрицы:
void rndm() {
int col = random(0, 8);
int row = random(0, 8);
if (stateRndm) {stateRndm = false;}
else {stateRndm = true;}
lc.setLed(1, row, col, stateRndm);
}
И выводим разную информацию о двух разных процессах в две разные подключённые в сборку матрицы R/G/B 8х8.
Заключение
Это руководство по матрицам ELABORY R/G/B 8х8 даёт общее представление о подключении их к контроллерам и приёмах и методах их программирования. Кроме библиотеки LedControl существует ещё множество библиотек для работы с матрицами светодиодов на чипе MAX72XX и вы можете выбрать ту из них, которая больше соответствует вашим задачам или создать собственное ПО для работы с R/G/B 8х8.
Купить
Купить модули матриц ELABORY R/G/B 8х8 можно в наших магазинах:
Наши услуги по разработке проектов, электроники, сервисов, 3D печати и т. д.