Pull to refresh

Comments 45

Статья интересная и познавательная, но по-моему, автор ставит себе задачу подобную той, в которой укорил оппонентов — зачем решать проблемы с памятью и скоростью древнего Arduino, если более современные и при этом дешевые микроконтроллеры? Например: esp8266 или даже esp32 (хотя у него библиотеки сыроваты) — они обойдутся даже дешевле, чем получилось у автора.
Более современные и дешёвые микроконтроллеры даже близко не догонят по производительности FPGA (CPLD). Например, максимальная скорость выдачи данных из STM32F103 по DMA, которую мне удалось получить — всего 5 МБ/сек. На CPLD я читаю 50МБ/сек без проблем. Понятно, что можно уйти на более жирные процессоры, но там и цены другие.
Кроме того, управление даже небольшой LED панелью съедает практически все ресурсы микроконтроллера. У меня была задача — сделать отдельную платку, в которую послал данные и забыл про обслуживание экрана.
UFO just landed and posted this here
И толку от этого комбайна? FSMC — это уже жирные чипы серий HD и XL. 6 каналов сериалайзеров обойдутся как несколько 3064.
Вы просто не понимаете саму задачу — сделать использование LED панелей не сложной задачей с использованием F4 или F7 процессоров, сложной настройкой FSMC и т.д., а типичной ардуино-задачей — подоткнуть десяток интерфейсных проводов к плате класса ардуины, скачать готовую библиотеку и использовать как угодно не заморачиваясь.
UFO just landed and posted this here
Вот тут есть подобный проект. Есть желание тоже попробовать реализовать, про такие панели только сейчас узнал, но с fpga заморачиваться не хочу. Там, кстати, автор пришёл к выводу, что FSMC ему не подходит и лучший вариант — DMA на GPIO.
UFO just landed and posted this here
максимальная скорость выдачи данных из STM32F103 по DMA, которую мне удалось получить — всего 5 МБ/сек
— но ведь для решения поставленной задачи BAM-методом этого вполне достаточно. Если мы хотим получить 5-битный цвет(RGB555) с частотой обновления 50Гц без потери яркости — для бита с минимальным весом нам нужно защёлкнуть 6-битные данные цвета 64 раза за 1/50/32/32 секунды (625 мкс), то есть передавать данные в матрицу со скоростью до 3276800 байт/секунду. Если же мы хотим получить 8-битный цвет — этого можно добиться с почти той же скоростью передачи данных и небольшим снижением яркости, если допустить чтобы при передаче данных для битов цвета 0..2, время передачи данных было таким же как для бита 3, а время свечения — пропорционально весу бита. Тогда получим скорость передачи данных 50(Гц)*32(фазы)*64(пикселя по горизонтали)*35(периодов свечения бита 3) = 3584000 байт/секунду, и снижение яркости на 1/64 (1,5%).
Это впритирочку. То есть 32х32 еще выдадим с частотой порядка 50 Гц (а это мало для светодиодов — так как у них нет инерционности, то частоту лучше иметь не ниже 100Гц). А вот 64х32 уже частота падает ниже неприличности.
А мой контроллер на 100Гц тянет панель 128х128 в полном RGB888.
Этот расчёт — для матрицы 64х64. Можно и 100Гц получить, со снижением яркости на 3%. А ещё BAM-метод можно использовать для уменьшения мерцания, если светить разные биты цвета в разных фазах, то есть сделать не 1 цикл перебора фаз за кадр, а несколько.
А, да. Понял. Тут есть одна тонкость.
Когда я делал эту железяку, то мне очень не хотелось делать bit shuffling, который обязательно надо делать для режима «для бита с минимальным весом нам нужно защёлкнуть 6-битные данные цвета».
В таком режиме данные, относящиеся к одному пикселю, разбросаны побитно в 8 разных байтах экранного буфера. Поэтому, чтобы поставить одну точку надо считать из экранного буфера 8 байт, изменить в них по 3 бита и положить обратно в память. У меня данные одного пикселя лежат в трёх последовательных байтах, поэтому для защёлкивания 6-ти битных данных цвета надо забрать из памяти 6 байт. Поэтому при 50МГц выборке из памяти мы получаем частоту защелкивания данных в строку всего 50/6 = 8,3 МГц, что всего в два раза больше, чем может отдавать STM32.
Зато имеем очень простую, быструю и прозрачную работу с экранным буфером.
В общем-то, сделать версию, которая будет отдавать данные именно в таком видео и повысить скорость задвигания данных в буфер до полных 50МГц — как два пальца. Тогда размер обслуживаемой панели можно будет увеличить еще в 6 раз. То есть на 100Гц будет уже не 128х128, а 384х256, например.
Если вдруг кому-то будет сильно надо — сделаю — это можно сделать на том же железе легко :)
опечатка «в таком виде», конечно, не «видео».
Однако, даже если выводить на матрицу 64х64 видео 25 кадров/с — полнокадровый bit shuffling займёт всего лишь около 15% процессорного времени STM32F103, работающего на 72 Мгц. То есть можно просто формировать изображение в буфере вашего формата, а потом делать bit shuffling каждые 2 кадра — и всё равно в STM32F103 останется больше памяти и вычислительной мощности, чем в arduino. А можно сделать отдельный контроллер LED-матрицы на STM32F030, и подключить его к arduino по SPI. А для часов вообще непонятно, для чего нужна высокая скорость перерисовки. Но для панелей 128х128 или 384х256 — хорошее решение, только они пока стоят дорого.
Ошибся, потеря яркости будет не 1,5%, а 7,8%. Но такая потеря яркости тоже на мой взгляд не критична. А уменьшить мерцание практически до уровня, который будет при частоте 100Гц, с той же потерей яркости можно, если светить старшие 4 бита с частотой 100Гц (то есть разбить их свечение на 2 цикла по фазам индикации), а младшие — с частотой 50Гц.
В общем-то — всё.

Ожидал в конце фото «DIY проекта матричных светодиодных часов»
UFO just landed and posted this here
> есть же новые MAX V за 90 центов
А где можно купить за такие деньги? 5M40 стоит в farnell 1,98евро поштучно. И это 40 ячеек. Надо больше. 5M80 — 3.38евро.
Я делал плату, компоненты для которой любой желающий сможет купить на ali за 5$ в сумме.
Я делал плату, компоненты для которой любой желающий сможет купить на ali за 5$ в сумме.

Вот спасибо за это. Хоть кто-то понимает что в DIY важно не качество компонентов, а их доступность.
UFO just landed and posted this here
Цены выше, зато компоненты оригинальные конечно.
Но у меня проблема, что всякие маузеры и дигикеи не заточены для работы с обычными людьми, им предприятия подавай. Пару раз заказывал, доставка и налоги увеличили цену покупки в два раза где-то. И я не в России нахожусь, если что.
UFO just landed and posted this here
Как раз в России с этим проще чем в Европе. Есть много кто, кто продает обычным людям поштучно, потому что DIY развито. В Европе приходиться всё с Китая покупать, магазины работающие с DIY энтузиастами, заламывают нереальные цены.
UFO just landed and posted this here
>Хотя в Минск и Финку я таскал с digikey и особых проблем не было.
Все хорошо с DigiKey в Минске, кроме доставки в 50$ и 30% за превышение 22 евро.
Притянул одну посылку через решипперов в России, да дешевле и быстрее. Но +12-15$. И напиши росийской таможне объяснительную, приложи копию и скришоты всего чего можно. Не понравилось.
UFO just landed and posted this here
Я так понимаю доставка была DHL-ем?
Не помню. Вроде. Но все равно других опций небыло. На самом деле мне проще дождаться когда кто-нибудь из коллег в командировку в Сан-Хосе поедет. Только это и спасает. Ну и Али. Но там выбор не то чтобы большой.
UFO just landed and posted this here
MAX (3000, II, V) это CPLD
Cyclone IV это FPGA
FPGA знатно дороже и сложнее.
Да, там ошибка, я изначально хотел уйти на MaxII — это как раз CPLD. Но потом глянул на CycloneIV и они мне понравились тем, что там достаточно внутренней RAM и цена вполне человеческая. А CPLD на FPGA поменять уже забыл. Там to do вообще уже не сильно актуален — пока статья мариновалась на модерации я уже успел и плату новую развести и заказать, и кое-что другое сделать.
Да, я видел этот проект. STM32F4, 96х48 пикселей, то есть примерно в два раза больше пикселей, чем у меня сейчас.
Можно и так, конечно, хотя мне мой вариант нравится заметно больше — у меня выдал данные с процессора в контроллер и вообще забыл про панель до изменения картинки :)
Ну и по расчётам мой вариант должен вытянуть при частоте обновления 100 Гц панель примерно 128х128
1. Цитата: «матрицы 32х16 RGB светодиодов (протокол HUB75, маде ин Чина), разобрался с её управлением (читай — подковал), добился на Atmege-328 4 бита градаций BAM для каждого пикселя без мерцания, что в теории означает 4096 цветов». У меня сейчас матрица 64x32 сканируется в полном RGB888 с частотой выше 1 кГц. Есть разница? Простые табло я делал еще лет 5 назад на STM32F103 с выдачей через FSMC (до 512х32 там было, насколько я помню).
2. WS2812 в несколько раз дороже и минимальный шаг 10 мм.
  1. Ща есть мелкий типоразмер 3535 (не 5050). Да и всё зависит от руки разводки.
Есть. Еще в два раза дороже. Готовых панелей на них нет. Паять самому пару тысяч диодов? Причём с зазором меньше миллиметра? И получить панель с шагом 4.5мм, при этом готовые LED панели сейчас доступны от шага 2мм. Оно того стоит?

Ну если руки из Ж и делать ничего не хотите (терпение), то нет.
На счет габаритов это неправда, все ваши панели под HUB гигантских размеров, причем стоят не копейки, а мытаринья с ними по обмену — куча.
Для FPGA нужен ещё программатор (не бесплатный) и опыт не малый для их применения (пока разберешься в этих финшуйских убеждениях (производитель/язык) — туча времени нужна (проходили).
На счет дорого — это всё голословно и относительно. Один ходит по помойкам побирается, другой топовое железо имеет (причем на халяву). В общем эту тему можно вообще не обсуждать, каждый делает как ему доступно. А обсуждать с стороны линии сборки — там всё дешевле выходит, от количества. :D Вот если бы всё было сделано на одной FPGA — может имело смысл.
Если разговор о телодвижениях, то проще на WS делать, причем там же из-за протокола/времени будет ограничение на количестве, можно многоканальный вывод делать одновременно… и панели круче смотрятся. Один недостаток — потребление, но чтобы его решить, проще самому делать с нуля матрицу.

> все ваши панели под HUB гигантских размеров
Что-то я стал сомневаться, что Вы с ними дело хоть когда-нибудь имели.
У меня на столе сейчас панель 64х32 с шагом 3 мм, это 192х96мм. Это огромная панель? Её цена с доставкой — 21$. Светодиоды там — 2121, кстати.
Теперь смотрим. WS2812B в версии 3535 стоят около 60$ за 1000 штук. Чтобы собрать аналогичную панель надо 2048 светодиодов, то есть где-то 130 баксов только на светодиоды. Если же берём самые маленькие на сегодняшний день APA102 2020, то 1000 штук их стоят каких-то 200$. То есть на 64х32 уйдёт всего-то каких-то 400$
Ну и мне очень хочется посмотреть — во сколько обойдётся соответствующая плата, шаблон для термопасты для неё, термопрофильная печь и всё прочее развлечение. Что-то подозреваю, что самодельная единичная панель 64x32 на APA102 2020 в итоге обойдётся примерно баксов так в 600-700.
И альтернатива — готовая панель с шагом 3мм за 22$ + платы (2$ за десяток при первом заказе на jlcpcb) + 5$ на детали + USB blaster за 3$. Итого 32$. Ну да, ну да, однозначно проще и дешевле на WS2812B делать, ну кто бы спорил :)
UFO just landed and posted this here
Там толстая рамка прикручена шурупчиками к обычной плате. Никто не мешает её открутить.
Моя плата сделана так, что на неё можно напаять разъем HUB75E мамой и воткнуть её прямо в плату панели. Тогда получается очень компактный бутерброд — плата оказывается внутри.
Точный размер рамки сейчас не скажу — панель лежит на работе сейчас.
Наводки цветов на соседние ряды могут быть из-за того, что в самой панельке ключи — это биполярные транзисторы и работают в режиме насыщения (эмиттер на шину питания или землю, в базу управляющий ток и на коллекторе нагрузка) и как следствие — медленно выключаются. Чтоб избавиться от наводок, надо сначала погасить ряд, потом переключиться на другой, потом зажечь новый. Ну или как-то так.

Это исходя из первого предположения (о том, что там биполярные транзисторы в режиме насыщения).
Цитирую статью:
PRE_DELAY и POST_DELAY — это интервалы гашения до и после output enable (OE) для того, чтобы мультиплексоры успели переключить выходы и ключи открыться/закрыться. Без них будут «тянучки» от горящих пикселей на соседние строки. Значения подбираются экспериментально для конкретной панели.
Ну, кстати, круто! Выложите куда-нить новые платы, пожалуста.
В смысле? Всё лежит на github
Герберы для самостоятельного заказа
Разводка в шестом sprint layout
Там еще добавлены выходные буферы 74HCT245PW — две штуки на плату. Платы заказаны, но еще не пришли, поэтому на практике не проверены.
Как придут — спаяю, проверю, выложу фотки и результаты проверки.
А можно ссылку на сами используемые панели. Спасибо.
Sign up to leave a comment.

Articles