Как стать автором
Обновить

Комментарии 31

На данном рисунке показана блок-схема микроконтроллера PSOC 5LP Family

В приведенном линке 4 серия, а не 5.
Вообще прикольно конечно, но на STM32 SPI например (это точно 20 Mbit/s получается) все это, несколько строчек кода. И за треть цены.

atmega4809 и др. тоже имеет FPGA часть (Configurable Custom Logic).

Я скорее к тому, что для данного протокола FPGA не нужен, достаточно SPI.
Впрочем статья неплохая, как пример (template) проекта. На этих блоках ,USB контроллер например реализовать, что нибудь посложнее чем в статье.
Когда надо будет управлять 20 000 SW2812B, да еще одновременно просчитывать кадр, то SPI может не хватить. Но это, как всегда, разговор ни о чем, «идеальных» решений не существует, кому-то хватит SPI, кому-то понадобиться что-то помощнее.
На 20 тысяч вам никакого контроллера не хватит. Посчитайте сколько нужно параллельных каналов для приличного FPS.И указанного в статье Вам тоже точно не хватит. На 20 тысяч led используют совсем другие решения. Вот для матрицы 64х32х2
github.com/sdima1357/stm32f407vg_RGB64x32x2_LED_PANEL
Если ещё больше, то fpga конечно.
Я считал, надо 20 модулей описанных в статье, и они уместятся в этом микроконтроллере. Я думаю, если разрабатывать сразу для управления таким количеством, то можно уместить и больше, экономя на общих ресурсах для всех модулей.
20 модулей, описанных в статье, могут управлять 1024*20=20 480 светодиодов.
Думаю что у Вас заметно дороже выйдет, чем готовая матрица. Их еще кормить данными нужно. Откуда то.
Повторюсь, я не претендую на «идеальное» решение. Доводами, которые я привожу, я всего лишь хочу показать, что требования бывают разные и те решения, которые предлагаете вы, могут не подойти.
Так Вы же спецификацию не приводили. А то что было в примере — можно реализовать и проще и дешевле. Или приведите целевую спецификацию. И практически гарантировано, что Infinia PSOC + WS2812 — не самое оптимальное решение.
Это туториал, я всего лишь упомянул возможность легкого расширения как преимущество данного решения.
На сколько я смог вникнуть, в этом решении не все так просто как кажется, так как нет синхронизации между таймером и SPI. И перед отправкой данных надо перезапускать таймер. И на счёт формирования импульса сброса ничего не написано.
Вам прям код накидать? На 20 MHz
Сброс — 25 нулевых бит.
0 это 8 единиц 17 нулей
1 это 17 единиц 8 нулей

Запускаем circular DMA с double buffer. В прерывании рисуем следующую часть
Мы в ветке про Atmega4809.
25 нулевых бит при 20МГц — это вроде как бы 1,25мкс. Импульс сброса — 50мкс.
Да, действительно не обратил внимания. Резет длиннее. Но это не усложняет код. Он просто длиннее.
Получается в вашем варианте вы вынуждены минимум в 25 раз увеличить фреймбуфер, проводить дополнительную обработку данных, чтобы преобразовать их из RGB в SPI последовательность. Плюс шину будете занимать в 25 раз дольше при DMA.
Ну так пример то был на видео на 81 led. А то в примере одно, в голове другое.
В видео 100 светодиодов и это просто демо.
Классная штука. Жаль только нет консольных синтезаторов логики. Ставить винду и этот комбаин для того, чтобы решить проблему сложного АЦП конечно можно. Но пока что проще поставить второй МК из дешевых на платку и написать блокирующий код для него. Думаю, что решить задачу 20 линий в одном цикле ручного ногодрыга всеми лапками одновременно вполне получится. И цена суммарно за два арма выйдет дешевле, чем за один кипарис.
Вот если такой блок стандартизируют и появится конкуренция, я был бы счастлив.
По моему мнению, решить задачу ногодрыга на 20 линий по 1000 светодиодов это из разряда высшего искусства и простотой тут совсем не пахнет.
1) создаём таблицу состояний пинов
uint32_t bits[someMemSize]
2) заполняем оную как надо
3)
uint16_t step = 0;
while(1)
{
 GPIOA->ODR =  bits[step++];
if(step ==someMemSize) step = 0;
updateBits();
delay();
}

Если updateBits() знимает заметную часть времени, то перед ним мы запомним состояние таймера, а в delay вносим корректировку.
Можно ещё краше — биты править по DMA, который дёргается таймером, а в цикле только пресчитывать состояния. Но тогда не забываем про двойную буферизацию: правим один буфер, а в DMA другой.
Это сожрёт всю память МК, но нам не страшно — этот кристалл работает только на ногодрыг.
Вот если бы мне надо было бы по каждой линии принимать решение по результатам ответа на этой линии, было бы больно. Но тут и вентилей в кипарисе может не хватить.
Кстати! Тут придумал, что нам даже полноразмерный GPIO не нужен. Хватит паровозика сдвиговых регистров с защёлкой (74HC595) и SPI по DMA. Защёлкой рулить с таймера. А в цикле МК только пересчитывать буферы.

В теории красиво, на практике не забудьте, что эти данные вам надо обновлять, в результате будут плавать временные интервалы. А на 74hc 595 реализация потребует тактовой частоты spi 100mhz, это мало какой контроллер потянет, плюс данные вам нужно сформировать прежде чем отправить в регистр. Может это все и заработает, но это будет очень сложно реализовать, что уже граничит с искусством.

Недооценил масштаб для регистров, да.
Но ногодрыг по DMA всё ещё справляется. Правда, нам надо заливать в полученную «видеокарту» 20000*24 бит в 30мс, или меньше 16 мегабит в секунду. Если не использовать кодек, задача сама по себе сложная.
Но освоение нового МК, да ещё и с новым IDE и новым языком всё равно выглядит сложнее. Повторюсь, был бы этот блок стандартизирован эти потери времени были бы оправданы. Но только ради WS2812 использовать сложный и закрытый фреймворк не оправдвно.
Странно вы как-то считаете, за 0.2 мкс (чтобы корректно сформировать бит, надо этот бит, длительностью 1.2 мкс, разбить на 6 частей) вам надо заполнить 20 битный регистр, таким образом длительность тактового импульса для 74HC595 будет равняться 0.2 мкс / 20 = 0.01 мкс, что соответствует тактовой частоте 100 МГц.
На 4 (+0, +0,4, +0,85, +12,5). Но всё равно 100MHz. Я считал для прямого ногодрыга, про регистры признал неправоту сразу.

На STM32 DMA цикл записи в порт из памяти занимает 10 тактов системной шины: DMA мифы и реальность. Так что можно прикинуть, какая должна быть тактовая частота у микроконтроллера. На дешёвых STM32, точно не взлетит.

НЛО прилетело и опубликовало эту надпись здесь
Полностью с Вами согласен. В Рекомендациях по оформлению постов не сказано как это сделать. Вариант
<a href="/BigPic"><img src="PreView"/></a>
не сработал. Буду очень благодарен Вам, если дадите ссылку на то как это сделать.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации