управление состоянием светодиодов подключенных устройств поштучно, по строкам и по столбцам;
управление положением изображения - поворот и отражение по горизонтали (по строкам) в случае необходимости (привет китайским светодиодным модулям);
возможность вывода данных со смещением по вертикали для столбцов и по горизонтали для строк;
библиотека может использоваться для работы как со светодиодными матрицами 8х8 светодиодов, так и с семисегментными цифровыми индикаторами;
возможность изменения частоты SPI-интерфейса для работы драйвера; поддержка SPI-транзакций, т.е. ваше устройство не будет мешать работать другим устройства, подключенным к этому же интерфейсу, но имеющим другие настройки;
возможность выбора интерфейса SPI для МК, которые это поддерживают;
возможность переназначения пинов SPI-интерфейса для МК, которые это поддерживают;
Приходилось делать кучу проектов под 7219. Последний был с матрицами 8х8. И вот тут беда. Все они собраны по хрен знамо какой схеме. И, естественно, заказчик ничего не знает. А как определишь? Хорошо что есть MD_MAX72xx_Dynamic_HW, который открытым текстом пишет наименования железа. Ну, а дальше уже подставляешь наименование в библиотеку и вперёд. Иначе уйму времени убил бы. Даже не представляю сколько!(
Все бы хорошо, но нету у этих модулей обратной связи, подключение только к MOSI, MISO не задействовано. Как в этом случае можно определить тип железа, я не представляю
Не буду врать, но мне казалось что существует с 10-к схем матриц 8х8. Т.е., их можно соединить как непопадя, как по Х, так и по Y. А у тебя в библиотеке нужно конкретно указать ХY. А вот в MD_MAX79XX пофигу на подключение. Нужно только указать типа матрицы и она уже сама всё вертит. Ага?
Их нельзя подключать как ни попадя. Они все подключаются последовательно. Даже если располагаются в несколько рядов. Эта библиотека не предполагает прямое обращение к столбцу/строке ВСЕЙ матрицы, а только конкретного устройства, а уж в каком месте матрицы устройство расположено - это программист должен сам знать/определять
Ну да, матрицы то последовательно, но внутри матрицы как? Вот варианты:
enum moduleType_t
{
GENERIC_HW, ///< Use 'generic' style hardware modules commonly available.
FC16_HW, ///< Use FC-16 style hardware module.
PAROLA_HW, ///< Use the Parola style hardware modules.
ICSTATION_HW, ///< Use ICStation style hardware module.
DR0CR0RR0_HW, ///< Structured name
DR0CR0RR1_HW, ///< Structured name
DR0CR1RR0_HW, ///< Structured name equivalent to GENERIC_HW
DR0CR1RR1_HW, ///< Structured name
DR1CR0RR0_HW, ///< Structured name equivalent to FC16_HW
DR1CR0RR1_HW, ///< Structured name
DR1CR1RR0_HW, ///< Structured name equivalent to PAROLA_HW
DR1CR1RR1_HW ///< Structured name equivalent to ICSTATION_HW
};
Так это должно быть известно изначально. Вариантов ровно два - построчно или по столбцам. Количество что строк, что столбцов можно по пальцам пересчитать чисто визуально.
Впрочем, нет числа человеческим извращениям, если кто вперемешку в шахматном порядке соединял, то тут я пас
Так в том то и дело! Китайцы разводят платы, и им пофигу на твою логику. Если так можно, то почему бы и нет. Вот от этого и куча вариантов. А чел покупает на Али и что, ему ли известна схема?) Такая вот фигня.)
Да, эта библиотека только если ты сам знаешь схему подключения.) А так, иной раз, нужно утомительно смотреть по плате, что к чему подключено.) И то, не вариант, что это поможет.(
Да чего там смотреть? Пишешь простой скетч, который поочередно зажигает устройства, запускаешь его и смотришь, в какой последовательности они включаются. И никаких микроскопов не нужно
Спойлер
#include <shMAX72xxMini.h>
#define CS_PIN 10
#define NUM_DEVICES 16 // или сколько там нужно
// инициируем модуль из шестнацати устройств, вывод CS модуля подулючен к пину D10 Ардуино, выводы DIN и CLK модуля подключены к пинам D11 и D13 Ардуино соответственно
shMAX72xxMini<CS_PIN, NUM_DEVICES> disp;
void setup()
{
disp.setBrightnessForAllDevices(8);
}
void loop()
{
for (byte i = 0; i < NUM_DEVICES; i++)
{
for (byte j = 0; j < 8; j++)
{
disp.setColumn(i, j, 0xFF);
}
disp.update();
delay(1000);
}
}
Пишешь такой скетч и отсылаешь ему. Он его прошивает и присылает тебе результат.
ЗЫ: таки делать что-то, не имея устройства под рукой - то еще удовольствие, имхо
Ну да. А что прикажешь делать? Приходится и так. Хорошо, если заказчик с головой дружит.) Бывает так, что всех нервов не хватает.(
Я же говорю, просишь запустить MD_MAX72xx_Dynamic_HW из библиотеки, и ни о чём не нужно думать.)
Библиотека поддерживает работу с ESP8266 , в этом случае матрица подключается к пинам модуля HSPI, а именно:
DataIn ( DIN ) — к пину MOSI ( GPIO13 , он же D7 для NodeMCU и т.п.);
CLK — к пину CLK ( GPIO14 , он же D5 для NodeMCU и т.п.);
CS ( LOAD ) — к GPIO15 (он же D8 для NodeMCU и т.п.);
#include <esp8266_hw_spi_max7219_7seg.h> #define SPI_SPEED 20000000 //SPI@20MHZ частота шины SPI #define SPI_CSPIN 2//16 //SPI CS=GPIO16 любой свободный порт,CLK обязательно на GPIO14, DIN обязательно на GPO13(на этом же порту синий светодиод, который совершенно не мешает обмену данными с дисплеем) #define DISP_BRGTH 1 //brightness of the display (0-15) #define DISP_AMOUNT 2 //number of max 7seg modules connected
BgrMax7seg ld = BgrMax7seg(SPI_SPEED, SPI_CSPIN, DISP_AMOUNT);
Я пробовал CS на пару других пинов цеплять, на одном не заработало, на другом через время перестали работать три матрицы из четырех. Дальше экспериментировать не стал, D8 - значит D8