Симулятор матрицы 8x8 MAX7219: проверка скетча без пайки
MAX7219 на матрице 8x8 — третий проект, на котором новички застревают: пять проводов (VCC, GND, DIN, CS, CLK), библиотека LedControl, и вместо букв на матрице «снег» из случайных пикселей. Скетч из интернета компилируется, а пиксели не там — и нет обратной связи, что именно не так: пин перепутан, регистр не обнулён, или шрифт из примера под другую матрицу. На живом стенде я бы потратил вечер, в браузере — десять минут.
Встроенного устройства «матрица MAX7219» в каталоге симулятора пока нет — это текстовый лендинг с разбором, что проверять в браузере (логику, байты, порядок битов), а что требует живого модуля (ток на столбцах, димминг, тайминги SPI). Ниже — рабочий скетч, который вы можете вставить в основной симулятор, тест пикселей, шрифт 5x7 и честная граница модели и железа.
С чего начать: прототип без пайки
MAX7219 управляет матрицей через три провода SPI: DIN (поток битов), CS (выбор чипа) и CLK (такт). Библиотека LedControl прячет SPI за вызовами setRow, setColumn и setLed — каждый пиксель это бит в байте, а в матрице 8 строк по 8 битов. Логику «какой бит какой светодиод зажигает» удобно проверять в основном симуляторе, где Serial печатает байты: видите 0b10000000 — горит левый пиксель строки, 0b00000001 — правый. Ток, димминг и тайминги в браузере не живут — это в таблице ниже.
- Три провода SPI: DIN, CS, CLK — на любые цифровые пины, библиотека сама дёргает.
- LedControl(din, clk, cs, numDevices): один объект на одну матрицу; для каскада — numDevices > 1.
- setRow(addr, row, value): addr — индекс матрицы в каскаде, row — 0..7, value — байт, где бит = пиксель.
- setLed(addr, col, row, state): точечное управление — удобно для проверки одного пикселя.
- shutdown(addr, false) и intensity(addr, 0..15): включение и яркость — без shutdown(false) матрица молчит.
Скетч-проба: бегущий огонёк по строке
#include <LedControl.h> LedControl lc = LedControl(12, 11, 10, 1); // DIN, CLK, CS, 1 матрица void setup() { lc.shutdown(0, false); // вывести из сна lc.setIntensity(0, 8); // яркость 0..15 lc.clearDisplay(0); Serial.begin(9600);} void loop() { for (int row = 0; row < 8; row++) { for (int col = 0; col < 8; col++) { lc.setLed(0, row, col, true); delay(60); lc.setLed(0, row, col, false); } }}Скетч вставьте в основной симулятор: компилятор поймёт вызовы LedControl, а монитор порта подскажет, если пин перепутан. На живой матрице вы увидите бегущий огонёк; в браузере — только вывод в Serial, потому что устройства «MAX7219 матрица» в каталоге деталей пока нет. Полный разбор wiring, питания и к cascade-режиму — в уроке про SPI-MAX7219.
Шрифт 5x7: буквы из байтов
const byte A[5] = { 0b01111110, 0b10001000, 0b10001000, 0b10001000, 0b01111110}; void showChar(LedControl &lc, const byte *glyph, int startCol) { for (int c = 0; c < 5; c++) { lc.setColumn(0, startCol + c, glyph[c]); }} void setup() { LedControl lc = LedControl(12, 11, 10, 1); lc.shutdown(0, false); lc.setIntensity(0, 8); showChar(lc, A, 1);}void loop() {}Шрифт 5x7 — стандарт точечных матриц: пять столбцов по семь строк, верхняя строка обычно пустая для межстрочного интервала. В браузере удобно сверять биты: «А» это 0b01111110 (дуга) и три 0b10001000 (ножки), и при ошибке в шрифте сразу видно, какой столбец перевернут. Сдвиговый регистр как родня MAX7219 — обе детали работают по SPI, и урок про SPI и 74HC595 показывает тот же битовый поток в более простой задаче.
Честная граница: что в браузере, что только на плате
| Проверка | Симулятор | Только железо |
|---|---|---|
| Логика: биты, байты, шрифт | через Serial, не визуально | видно на матрице |
| SPI-вызовы LedControl | компилируется, но не отрисовывается | зажигает пиксели |
| Каскад матриц: numDevices > 1 | логически работает | потребует 5V питания и конденсатора |
| Яркость и димминг intensity | не виден | виден: 16 уровней через ШИМ чипа |
| Ток на столбцах и нагрев | нет: модель без физики | да — 8 LED × 20 мА = 160 мА пик |
| Тайминги SPI и клок SCK | не моделируются | да — свыше 10 МГц чип сбоит |
Браузер исполняет логику скетча и Serial — но саму матрицу не отрисовывает: в каталоге деталей MAX7219 нет. Поэтому в основном симуляторе вы проверяете код и ловите опечатки, а пиксели и ток — на живом стенде. Для теста логики без отрисовки попробуйте соседнюю 7-сегментную деталь: симулятор TM1637 и симулятор seg7 — те же биты и байты, только сегментов семь, а не 64.
Грабли MAX7219
- Забытый shutdown(0, false): матрица в sleep-режиме, и setLed/setColumn молчат — добавьте первую строку в setup.
- Перепутанные DIN и CLK: поток битов и такт меняются местами, пиксели «снег». Сверяйте с распиновкой модуля, не с примером из интернета.
- Питание 5V, а не 3V3: модуль 5-вольтовый, при 3V3 горит тускло или не горит вовсе; ток до 160 мА на пике.
- Конденсатор 10 мкФ по питанию: без него при включении всех пикселей строчка гаснет — модуль потребляет пик тока, USB-порт проседает.
- Шрифт из интернета под чужую матрицу: биты «перевёрнуты» по столбцам — транспонируйте или пишите свой по пять байтов на букву.