shMAX72xxMini - небольшая быстрая библиотека для работы с драйверами MAX7219 и MAX7221

Основные возможности библиотеки:

  • управление состоянием светодиодов подключенных устройств поштучно, по строкам и по столбцам;
  • управление положением изображения - поворот и отражение по горизонтали (по строкам) в случае необходимости (привет китайским светодиодным модулям);
  • возможность вывода данных со смещением по вертикали для столбцов и по горизонтали для строк;
  • библиотека может использоваться для работы как со светодиодными матрицами 8х8 светодиодов, так и с семисегментными цифровыми индикаторами;
  • возможность изменения частоты SPI-интерфейса для работы драйвера; поддержка SPI-транзакций, т.е. ваше устройство не будет мешать работать другим устройства, подключенным к этому же интерфейсу, но имеющим другие настройки;
  • возможность выбора интерфейса SPI для МК, которые это поддерживают;
  • возможность переназначения пинов SPI-интерфейса для МК, которые это поддерживают;

Ссылка на GitHub - GitHub - VAleSh-Soft/shMAX72xxMini: Небольшая быстрая Ардуино-библиотека для работы с драйверами MAX7219 и MAX7221

Приходилось делать кучу проектов под 7219. Последний был с матрицами 8х8. И вот тут беда. Все они собраны по хрен знамо какой схеме. И, естественно, заказчик ничего не знает. А как определишь? Хорошо что есть MD_MAX72xx_Dynamic_HW, который открытым текстом пишет наименования железа. Ну, а дальше уже подставляешь наименование в библиотеку и вперёд. Иначе уйму времени убил бы. Даже не представляю сколько!(

Все бы хорошо, но нету у этих модулей обратной связи, подключение только к MOSI, MISO не задействовано. Как в этом случае можно определить тип железа, я не представляю :slightly_smiling_face:

Визуально.) Человек увидел надпись и сообщил.

Вот. И эта библиотека конкретно под MAX7219 или MAX7222

Не буду врать, но мне казалось что существует с 10-к схем матриц 8х8. Т.е., их можно соединить как непопадя, как по Х, так и по Y. А у тебя в библиотеке нужно конкретно указать ХY. А вот в MD_MAX79XX пофигу на подключение. Нужно только указать типа матрицы и она уже сама всё вертит. Ага?

Их нельзя подключать как ни попадя. Они все подключаются последовательно. Даже если располагаются в несколько рядов. Эта библиотека не предполагает прямое обращение к столбцу/строке ВСЕЙ матрицы, а только конкретного устройства, а уж в каком месте матрицы устройство расположено - это программист должен сам знать/определять :slightly_smiling_face:

Ну да, матрицы то последовательно, но внутри матрицы как? Вот варианты:

  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
  };

Так это должно быть известно изначально. Вариантов ровно два - построчно или по столбцам. Количество что строк, что столбцов можно по пальцам пересчитать чисто визуально.
Впрочем, нет числа человеческим извращениям, если кто вперемешку в шахматном порядке соединял, то тут я пас :sweat_smile:

Так в том то и дело! Китайцы разводят платы, и им пофигу на твою логику. Если так можно, то почему бы и нет. Вот от этого и куча вариантов. А чел покупает на Али и что, ему ли известна схема?) Такая вот фигня.)

ОК, будем считать, что эта библиотека только для матриц с известной схемой подключения ))

Да, эта библиотека только если ты сам знаешь схему подключения.) А так, иной раз, нужно утомительно смотреть по плате, что к чему подключено.) И то, не вариант, что это поможет.(

Да чего там смотреть? Пишешь простой скетч, который поочередно зажигает устройства, запускаешь его и смотришь, в какой последовательности они включаются. И никаких микроскопов не нужно :slightly_smiling_face:

Спойлер
#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);

SPI_CSPIN подключал к портам 2 и 0, это если программатор отключаемый(как у witty cloud).
Работет.

+1 рабочий GPIO У ESP8266.

Я пробовал CS на пару других пинов цеплять, на одном не заработало, на другом через время перестали работать три матрицы из четырех. Дальше экспериментировать не стал, D8 - значит D8 :slightly_smiling_face: