Ви не увійшли.
Нашёл вот аналогичную траблу и её решение в другом месте - 8×8 LED Matrix MAX7219 - неправильное исполнение элементарного кода:
Ещё полезное обсуждение в тему - о формировании цифр на 7-сегментном индикаторе: Вывод информации на 4 разрядный 7сегментный индикатор - здесь + предыдущих 3 страницы форумного обсуждения ... можно полезное извлечь.
Вот теперь всё становится на свои места (с пользовательской точки зрения, не влезая в детали того, как оно там устроено на уровне электроники):
- MAX7219 - это не индикатор (хотя они продают под таким названием именно индикаторы ... в переводе с китайского на волапюк ), MAX7219 - это плата аппаратного драйвера индикаторов 2-х разных типов, которые могут монтироваться на такую плату: 7-сегментный цифровой или 8х8 светодиодов LED панели;
- у MAX7219 протокольно интерфейс Serial 3-Wire... это такой "недоношенный SPI";
- аппаратно под протокол используются 3 линии (пина) MAX7219: Din, Cs, CLK + 2 пина питания VCC 5В и GND;
- в Arduino IDE этот "недоношенный SPI" поддерживается библиотекой LedControl, которая и обеспечивает протокольный обмен;
Драйвер может управлять восемью семисегментными индикаторами с точкой, либо отдельно 64 светодиодами в LED панелях с общим катодом. Таким образом, данные микросхемы подходят не только для семисегментных, но и для матричных индикаторов.
Вот это важно!
Потому как китайские друзья выслали мне вослед ещё индикатор с тем же драйвером MAX7219, но с установленными 2-мя 8-сегментными индикаторами типа 3641AH, вот такими:
Вот ещё интересная (мне) информация ... мне она достаточная, для того чтобы писать .ino : MAX7219, MAX7221 — драйвер для светодиодной индикации.
Подумал, что кому-то это тоже может показаться полезным.
Драйвер может управлять восемью семисегментными индикаторами с точкой, либо отдельно 64 светодиодами в LED панелях с общим катодом. Таким образом, данные микросхемы подходят не только для семисегментных, но и для матричных индикаторов.
У MAX7219 интерфейс Serial 3-Wire.
Формат данных посылаемых в MAX7219 (MAX7221) показан в таблице 2. Данные отсылаются по 16 бит, старшим битом вперед.
Таблица 2.
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
ADRES D11-D8
DATA D7-D0
В битах D15…D12 полезной информации не передается. Лично я в этих битах передаю ноль.
В поле ADRES указывается, что необходимо сделать.Если в ADRES передается значение 1…8 (0001…1000), то это выбор знакоместа. В поле DATA в этом случае передается информация о сегментах выбранного знакоместа. Если DATA равна 0 (00000000), то сегменты не светятся. Если DATA равна 255 (11111111), то светятся все сегменты выбранного знакоместа, включая точку. В режиме декодирования DATA несет иную информацию, подробности см. в Datasheet на MAX7219/7221.
Если в ADRES передается значение 9…15 (1001…1111), то это указание выполнить некоторую служебную инструкцию, см. Таблицу 3.
... тут много интересного, но посмотрите по URL ...
Важно!:
Для нормальной работы микросхемы её необходимо инициализировать после подачи питания. Инициализация подразумевает некоторую последовательность команд, после которой микросхема начинает нормально работать и реагировать на команды и данные. Без инициализации микросхема ничего высвечивать не будет, но, тем не менее, при этом микросхема спокойно переходит в режим TEST (ADRES = 0x0F) и зажигает все сегменты одновременно.
Для инициализации необходимо выполнить:
ADRES = 0x0F, DATA = 0x00 – Тест индикатора выключен
ADRES = 0x0С, DATA = 0x01 – Выйти из сна
ADRES = 0x0B, DATA = 0x07 – Кол-во задействованных символов — 8 символов
ADRES = 0x09, DATA = 0x00 – Дешифраторы отключены
ADRES = 0x0A, DATA = 0x0F – Интенсивность свечения (яркость) максимальна
После этого на дисплее будут всякие крякозяблы – сегменты, светящиеся случайным образом.Это необходимо учесть и после инициализации выполнить очистку дисплея, например, записать во все знакоместа символ 0 (ноль) или погасить все сегменты, например, используя ADRES = 0x01…0x08, DATA =0x00.
Вот теперь этого достаточно.
P.S. Важно!:
При выборе кол-ва отображаемых символов (ADRES = 0x0B) менее четырех, предварительно необходимо уменьшить яркость (ADRES = 0x0A), иначе есть вероятность повредить микросхему и/или светодиоды в индикаторе.
https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
MAX7219/MAX7221
Serially Interfaced, 8-Digit LED Display Drivers
datasheet детальнейший и много проясняет ... но:
- они описывают 8 цифровой индикатор - у меня 4 цифровой, под той же маркировкой MAX7219
- они описывают (не)совместимость MAX7219 / MAX7221 так:
The MAX7219 and MAX7221 are identical except for two parameters: the MAX7221 segment drivers are slew-rate limited to reduce electromagnetic interference (EMI), and its serial interface is fully SPI compatible.
И если MAX7219 "почти совместим" с SPI, или "совместим но не совсем", то в чём?
- datasheet описывает детальнейшим образом чипы, распиновку этих чипов, электрический и климатические параметры ... но недостаточно описан обмен с управляющим устройством ... по крайней мере, недостаточно для понимания.
Остаётся надежда на библиотеку LedControl, что она сделает поддержку и все времянки как надо!
https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
Спасибо, гляну.
Нашёл вот аналогичную траблу и её решение в другом месте - 8×8 LED Matrix MAX7219 - неправильное исполнение элементарного кода:
/* Создаём объект класса LedControl
* Используем пины 12, 11, 10 на плате Arduino в качестве SPI интерфейса
* для драйвера MAX7219
*
* Подключаем устройства согласно таблице:
* Arduino[Pin 12] <-> Display Module MAX7219 [DIN]
* Arduino[Pin 11] <-> Display Module MAX7219 [CLK]
* Arduino[Pin 10] <-> Display Module MAX7219 [LOAD/CS]
*
* Прототип создания объекта класса LedControl:
* LedControl(int dataPin, int clkPin, int csPin, int numDevices);
* где:
* int dataPin - пин 12 на плате Arduino
* int clkPin - пин 11 на плате Arduino
* int csPin - пин 10 на плате Arduino
* int numDevices - количество устройств на шине SPI
*/
/* Для начала подключим библиотеку */
#include "LedControl.h"
/* Создаём объект класса LedControl для 5-ти устройств */
LedControl LC = LedControl(12, 11, 10, 1);
void setup()
{
/*
* Выводим устройство с адресом равным 0 из
* энергосберегающего режима
*/
LC.shutdown(0, false);
/* Устанавливаем интесивность свечения
* для устройства с адресом равным 0
* на средний уровень
*/
LC.setIntensity(0, 8);
/* и очищаем дисплей с адресом равным 0*/
LC.clearDisplay(0);
}
void loop()
{
LC.setLed(0, 2, 7, true);
delay(500);
LC.setLed(0, 2, 7, false);
delay(500);
}
Там же, в комментариях, необходимо и достаточно расписано подключение индикатора к Arduino.
И решение там оглашённой проблемы:
причина оказалась в питании. Заработало только после подключения 12 вольт к vin-порту.
https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
Вот такое чудо прислали китайцы с AliExpress:
В маркировке они пишут так:
Ws16 5 В MAX7219 8x8 матричный светодиодный MCU Управление Дисплей Micro Управление; 4 в 1 модуль + 5 P линии для Arduino Raspberry Pi
Бренд:WQScosea
Контакты (справа на картинке), в описании названы так (так же подписаны на плате):
VCC 5 В
GND GND
Din p2.2
Cs p2.1
CLK P2.0
Помогите определиться догадками: что там за интерфейс (стандарт) к этому чуду? каким способом его подключать?
Дальше я уже как-то сам совладаю...