Доброго времени суток! Не всегда корректно работает табло max7219, то выпадает один модуль то два, могут просто включить все пиксели и пока не перезагрузишь устройство нормально не заработает. В чем может быть проблема? Работает в связке с NODEMCU(esp8266).
Ваш ник указывает на вашу проблему.
Конкретнее если не затруднит.
либо не хватает питания, либо нужно ставить преобразователь уровня сигнала от ЕСП (3.3в) к матрице(5в)
Плохой контакт.
спасибо за ответ.
либо не хватает питания, либо нужно ставить преобразователь уровня сигнала от ЕСП (3.3в) к матрице(5в)
спасибо за ответ.
Плохой контакт.
это исключено.
Подача питания на MAX'ы происходит одновременно с подачей питания на ESP, или с какой-то разницей? Я просто сталкивался пару раз с глюками, когда команда на инициализацию максов в самом начале старта МК не всегда прокатывала, и приводило это именно к случайным глюкам.
Решил повторной инициализацией через какое-то время после первой. Так сказать, контрольной. С некоторой задержкой между ними.
При плохом монтаже, плохом питании, плохих контактах любая импульсная наводка может сбить инициализацию модулей. После этого часть сегментов, всегда с момента наводки до конца перестают отображать информацию. Пока просто жму ресет. Надо попробовать вставить инициализацию модуля раз в секунду. Может поможет.
Решил повторной инициализацией через какое-то время после первой. Так сказать, контрольной. С некоторой задержкой между ними.
Простой отложенный инит делу не помогает?
Плохой контакт.
это исключено.
Нет. Сам удивился, и долго игрался именно задержками. То помогало, то нет. Или скажем помогало на столе, но вылезало в машине по холодку периодически. Посему плюнул, и сделал повторный инит. Проблема ушла.
либо не хватает питания, либо нужно ставить преобразователь уровня сигнала от ЕСП (3.3в) к матрице(5в)
ибо в букваре Logic High Input Voltage VIH 3.5V (min)
Здравствуйте, товарищи.
Ситуация такая.
Хочу передавать данные на MAX7219 через shiftOut, без библиотек.
До этого делал часы на 74HC595, там все понятно и всё работает.
В документации на мах вычитал что нужно передавать 16 байт для каждой матрицы, адрес + данные, вроде все понятно.
1.Опускаю chipselect
2. Передаю адрес потом данные через shiftOut, все это в цикле for крутиться 8 раз.
3. Поднимаю chipselect
Данные это двухмерный массив, первый параметр массива определяет какую цифру я хочу отправить в матрицу (состоит из 8 байт), второй указывает на сам конкретный байт который shiftOut отправляет на матрицу, вроде всё верно.
4 таких цикла for вызываются друг за другом, то есть сначала передается 16 байт для первой матрицы, потом для второй (данные проталкиваются дальше как по 595 сдвиговым регистрам) потом для третьей и четвертой.
В результате на экране белиберда...
Железо
1. Ардуино уно
2. Экран их 4х модулей с матрицами 8х8
Сижу туплю уже неделю, вроде все возможные варианты перебрал...
Дайте наводку, что не так то?
Спасибо всем.
В чем выражается билеберда?
Должны быть цифры, а получаются хаотичные пиксели, статичные. Отдаленно конечно что то напоминает, но точно не цифры.
Причем если использовать вот эту конструкцию (см.ниже), то цифры корректно (почти) выводятся, но этот массив байтов последовательно заполняет все матрицы, но мне же нужно в каждую матрицу записать свой массив что бы каждая матрица показывала разные цифры.
// Это выводит одинаковые цифры на всех матрицах
092
digitalWrite(csPin, LOW);
093
shiftOut(dataPin, clockPin, MSBFIRST, addr);
094
shiftOut(dataPin, clockPin, MSBFIRST, vol);
095
digitalWrite(csPin, HIGH);
я не очень хорошо помню устройство MAX7219, но похоже вы ошибаетесь в числе сдвиговых регистров в микросхеме и числе байт, которое можно задвинуть в нее за раз.
Попробуйте не выдумывать, а поднимать и опускать защелку после каждого байта, как в примере:
Спасибо за совет.
Если дергать защелку внутри циклов, то корректно отображается только последняя правая матрица (загрузка происходит через нее).
Остальные матрицы так же отображают тоже что и первая но с артефактами, как буд то потерялись некоторые байты.
На этом фото верно отображается только 0, хотя отправляются числа 1320.
А это те самые 4 цикла for которые последовательно выводят разные массивы.
ну я ж говорил, что не помню, как 7219 работает :)
Значит надо пропихивать данные сразу во все 4 матрицы
замените все ваши 4 цикла одним
должно вывести либо 1320 или 0231, в зависимости от тотго, как соединены матрицы. Пробуйте
Нашел в одном описании вот это.
24 — DOUT. Последовательный вывод данных. На этом выводе появляются принятые на входе DIN данные c задержкой в 16 с половиной тактов. Почему именно 16.5, а не 16 или 17? Потому что в SPI первая половина такта (после переднего фронта для MODE 0) — чтение, вторая половина такта (задний фронт для режима MODE 0) — сдвиг, а данные появятся на выходе только после сдвига. С помощью DOUT можно каскадно соединить несколько драйверов, при этом выход (DOUT) первого драйвера подключается ко входу (DIN) второго драйвера, выход второго — ко входу третьего и т.д.
Всё получилось!
Блин! Вот я лошара!
Как я сам то до этого не додумался... И ведь была у меня мысль что нужно загонять всё сразу, как с теми же 595.
Спасибо большое!
Вообще-то на фото последняя матрица является первой - отсчет идет от ввода данных. Еще одна проблема этих модулей - у них перевернуты строки, поэтому нужно еще мудрить с поворотом картинки. Что касается вашего фото, то очень похоже, что передача идет только в первую матрицу, остальные получают те же, но, возможно, искаженные данные.
Поэтому отправлять нужно не два байта за раз - они всегда будут приниматься первой матрицей, а набор байтов для всех четырех матриц сразу. Если нужно вывести строку только в одной, то подаваться должно примерно так
И да, в цикле
должно быть все-таки
Таки в матрицах по восемь строк, индекс последней - как раз 7 ))
Про поворот картинки да, это реализовано во многих библиотеках, но у меня заработало без поворота, модули на smd микросхемах.
Если несколько модулей, то нужно заганять последовательно адрес+данные сразу для всех модулей и только потом защелкивать.
Если дергать защелку 8 раз внутри цикла при передаче данных на каждый модуль то фигня выходит.
Короче говоря эти драйвера по способу загрузки очень похожи на 595 сдвиговые регистры, только тут добавляется еще 1байт с адресом строки.
Сейчас всё заработало вот с таким циклом кстати обратите внимание, цикл стартует с 0 и до 8, а адресность строк в регистре начинается с 1, по этому к адресу плюсуем 1.
Еще раз большое спасибо за советы и подсказки.