Устройство собрано, скетч работает адекватно (спасибо всем, кто помогал!). Признаю, что много сделано коряво, “в лоб“ и не по-програмистски. Буду постепенно вылизывать. Есть вещь, которая на работу не влияет, но …. При включении питания на 7-сегментных индикаторах (max7219) сначала происходит беспорядочное мелькание символов (в основном - “восьмерки”), потом все работает адекватно. Как бы от этого явления избавиться?
В setup(), после инициализации объекта max7219, отправь “пустые” числа на дисплей (ну то есть “пробел” или что там у него “пустое”).
Должно помочь, но на 100% я не уверен.
Увы, не помогло. Тем более, что в септапе (первым делом) уже есть очищение дисплеев. Вот фрагмент скетча (взято из примеров библиотеки LedControl.h):
void setup ()
{
Serial.begin (115200);
//БЛОК ИНДИКАТОРОВ МАХ7219_________________________________________________________________
//Пины индикатора max7219 на выход
pinMode(pin_din, OUTPUT);
pinMode(pin_clk, OUTPUT);
pinMode(pin_cs, OUTPUT);
//Инициализация индикаторов с выравниванием яркости
lc_max7219.shutdown(0, false); //Выводим из спящего режима
lc_max7219.setIntensity(0,7); //Яркость дисплея на 7. Всего возможных режимов яркости от 0 до 15
lc_max7219.clearDisplay(0); //Очистить дисплей
lc_max7219.shutdown(1, false); //Выводим из спящего режима
lc_max7219.setIntensity(1,7); //Яркость дисплея на 7. Всего возможных режимов яркости от 0 до 15
lc_max7219.clearDisplay(1); //Очистить дисплей
lc_max7219.shutdown(2, false); //Выводим из спящего режима
lc_max7219.setIntensity(2,3); //Яркость дисплея на 7. Всего возможных режимов яркости от 0 до 15
lc_max7219.clearDisplay(2); //Очистить дисплей
lc_max7219.shutdown(3, false); //Выводим из спящего режима
lc_max7219.setIntensity(3,3); //Яркость дисплея на 7. Всего возможных режимов яркости от 0 до 15
lc_max7219.clearDisplay(3); //Очистить дисплей
// Далее всё прочее
}
Ну тогда, видимо, только плату с led’ами “лопатить” и подтяжку резисторами делать, чтобы не мерцало…
А может это у max7219 режим такой при старте (типа проверки работоспособности лиодов)?
Возможно… Тест - под сомнением: больно уж хаотичное мерцание и не всех разрядов, часть пустые. Ладно, попробую покопаться. Немного раздражает, но не критично. Спасибо!
shutdown(0, false);
setIntensity(0,7);
clearDisplay(0);
Попробуй изменить последовательность команд и яркость на этапе инициализации поставь на минимум, может прокатит.
И, как я понял, там несколько дисплеев по SPI подключено?
Вы точно инициализируете драйвер в правильно порядке? Сделайте как написано в даташите
Initial Power-Up
On initial power-up, all control registers are reset, the display is blanked, and the MAX7219/MAX7221 enter shutdown mode. Program the display driver prior to display use. Otherwise, it will initially be set to scan one digit, it will not decode data in the data registers, and the intensity register will be set to its minimum value
Т.е. полностью проинициализируйте драйвер до первого использования. Проблемы быть не должно!
Шалом! У меня в коммерческом проекте на есп32 (важно потому, что запуск долгий) мы с заказчиком НЕ ПОБЕДИЛИ это поведение программно. Есть время от подачи питания до начали инициализации и в это время Макс делает, что хочет. Только транзистор на ногу энейбл и включить “свет” после полного запуска.
Чтобы избавиться, сначала надо установить причину.
Ну или “поставить диагноз”, если Вам так понятнее.
А для того, чтобы поставить диагноз, как это обычно и бывает, не хватает анализов информации.
Например, информации о том, как именно Вы прошиваете контроллер. Если для этого используется порт USB, то в Ародуино принято, что загрузчик, начиная работу сразу после перезагрузки/включения_питания примерно секунду ждет, не будет ли предпринята попытка его перепрошивки. Если да - начинается перепрошивка. Если нет, после примерно секукды ожидания он передает управление ранее прошитому скетчу.
То есть в нормальном режиме работы скетч начинает выполняться не сразу, а примерно через секунду после включения. Естественно, периферия на протяжении этой секунды ведет себя непредсказуемо. Чтобы избавиться от такого поведения Ардуину нужно прошивать не встроенными средствами, а внешним программатором, причем без загрузчика.
Это именно тест. В своей библиотеке я по умолчанию тест отключаю, ничего на старте не мигает, ссылку на нее я вам давал, делал как раз на основе LedControl.h, но раз не хотите, то и не надо ))