Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Купил у китайцев 5м светодиодной ленты, 60 диодов на метр, ws2812, те RGB, 256 уровней яркости, управление на каждый диод свое. с доставкой федэском в сингапур вышло ок $70. Купил тут блок питания 5В 3А, отрезал от ленты метр и вроде как прогу управления сделал на stm32f0-discovery. Лента мне понравилась - яркая, цвета неплохие, белый вполне человеческий(часто в синеву отдает). Скоро приеду домой, сделаю чо-нить к новому году. Вопросы к публике: - что-бы такое красивое сделать? - какую схему перемены цветов забубенить? - как питать эту радость? Жрет она по-конски - 5м чуть ли не 20A. Что-бы такое взять для блока питания 5В/15-20А - Нашел небольшой покос в CooIde - для моего чипа неверное кол-во RAM - как им засабмитить багрепорт или фикс на это дело?
144 диода на метр, 4метра 102$. единственно хочу чёрного цвета. а жрут они да, прилично - это же светодиоды. как смотришь на потребление всяких светодиодных табло, так сразу плохо становиться. если новогоднее, то много чего красивого можно сделать. как вариант что-то на подобии такого шара http://radiokot.ru/circuit/light/run/45/
хотя самое простое и быстрое - это намотать на цилиндр (и не нужно будет ленту резать).
как вариант тогда сделать примерно 20*30 или 15*40 и выводдить год (обратный таймер дней, часов, минут и потом секунд) будет экранчик + можно посмотреть, может что из стёкол или пластика можно сверху прикрепить что бы было красивей. хотя оно и без этого приятно будет смотреться. сами ленты же лепитьчуть ли не на что угодно можно - я недавно в одном видео видел, так там просто на плотную чёрную плёнку (я такую на хозрынке за недорого брал). а с режимами хз, но думаю лучше несколько реализовать с автоматическим или ручным переключение + режим часов обратного отсчёта. когда у меня туго с фантазией, то просто сначала беру за основу что-то готовое и потом или так оставляю или если фантазия просыпается, то уже переделываю. к примеру можно посмотреть что из плагинов визуализации к медиаплеерам есть или из скринсейверов. как вариант на фракталах, что-то на подобии http://www.dqd.com/~mayoff/programs/FractalClock/. хотя часть скринсейверов явно отсеится, разрешение маленокое, а расстояние между пикселями большое. роевые алгоритмы наверно также сразу отсеятся. в общем нужно попробовать поискать и прикинуть как оно на таком светодиодном экранике смотреться будет.
У меня 300 диодов. так что скорее 9*33. Ну или сегментами выложить. Еще засада, что это F0, а прогать приходится по 1-проводному интерфейсу, используя DMA. Бит-банга нету, так что на 1 бит, уходящий в ленту, в памяти тратится 3 байта. Очень неэкономненько, памяти едва хватает на 60 диодов. Видимо придется привлекать проц пожирнее или замучивать SPI. Ну или как-то еще выеживаться
а, точно. то я на автомате про экранчик на 600 диодов вспомнил. 10*30, 12*25 имхо или временно взять какой старший мк или подумать над алгоритмами, которым памяти много не нужно (попробовать на лету вычислять). к примеру старый и наверно уже не очень прикольный вариант с "матрица" (падающие буквы). несколько десятков записей (x, y, скорость + по желанию цвет или ещё что), остальное на лету можно. и т.д. тетрис наверно долго делать придётся, можно змейку, она к памяти не очень требовательна. можно "загнать" в ленту случайные числа, потом выход с ленты завести обратно на мк и по какому-то принципу попробовать менять цвета. вот примерно за такой экран на чёрной плёнке я писал
правда у них там похоже метров так под 16 этих лент. кстати если ещё есть возможность и появится желание именно табло сделать, попробуй поискать матрицы светодиодов и к ним копеечные max7219. я брал один вариант готовых diy наборов, но для соединения в табло они не подходят + они не ргб (если самому, можно и ргб взять, модули в посленее время более-менее нормально стоят, я 2шт. 8*8 брал в последний раз за 10$, на количестве понятное дело дешевле будет).
хз, может получится найти такие наборы, что можно и в табло соединиять. хотя это не сильно и проблема - или монтажки или лутом можно.
5050 со встроенным ws2811 брал по 13.8$ (там же цены иногда как бешеные скачут + частенько кто-то рейтинг набивает) за сотню, а обвес там 1 кондёр. снапшот заказа. а лучше или хуже это уже ситуационно - на светодиодных матрицах при желании может и дешевле выйти. хотя это пожалуй лучше в каждом конкретном случаем смотреть все за и против. на этих 5050 с 2811 с одной стороны удобно какой-нибудь амбилайт сделать или гирлянду на подобии
1.jpeg (2.6 КиБ) Просмотров: 3208
или длинную ленту для фоновой подсветки в комнате и т.д., с другой цены всё же немного кусаются уже при небольшом количестве, при большом разница всё больше и больше. знакомый привозил себе из катавая табло (по функциональности очень жутко примитивное, но цена...) - 20*15 матриц с 16*16 ргб светодиодов в каждой. стоила эта цаца в китаваях примерно 700$ + в комплекте 1-2 бп (которые благополучно быстро померли) + уже в цивильном корпусе. 76800 диода умножить даже пусть на гипотетически-безумные 2 цента за 5050 с этими ws, то это будет 1536$. вот такая арифметика. немного погуглил видева по теме. для некоторых вещей разрешения в данном случае маловато, но может что и понравится. в первом видео есть бегущие полосы (то, про что я писал в предыдущем сообении). можно попробовать задать разную скорость движения разным полоскам или сделать затухание яркости ("шлейф")
наверное елку сделаю. Кста, у меня ж еще дома гирлянда лежит на ws2801 ее можно туда же добавить. Там еще сотня-другая диодов, хотя и в другом форм-факторе
Добавлено спустя 44 минуты 38 секунд:
Angel71 писал(а):5050 со встроенным ws2811 брал по 13.8$
Это и есть ws2812. Ты удачно отхватил. сейчас тот же лот уже $35
elmot писал(а):Еще засада, что это F0, а прогать приходится по 1-проводному интерфейсу, используя DMA. Бит-банга нету, так что на 1 бит, уходящий в ленту, в памяти тратится 3 байта. Очень неэкономненько, памяти едва хватает на 60 диодов.
Как это? Ты там совсем с дефками заигрался? Даже не знаю как спросить, ведь можешь обидеться если скажу: "храни биты в байтах, а вытаскивай их маской". И если 1-проводной интерфейс, то при чем тут бит-банг? Как в памяти может тратиться 3 байт на один бит в ленту, если это надо делать в цикле. В F0 - 4 кило озу минимум, как его может не хватить? Колись, КАНЧАЙ быдлокодить
elmot, у них похоже сейчас предновогоднее обострение я только что заказывал и большую часть пока просто с такими ценами (многое на ~20-50% подорожало, это при том, что от старых цен ещё можно было приличную скидку выторговывать) брать не захотел, а скидки в середине декабря похоже просить бессмысленно - ещё чуть-чуть и они всей страной на долго загуляют.
Dmitry__ писал(а):Как в памяти может тратиться 3 байт на один бит в ленту, если это надо делать в цикле.
Ключевое слово было DMA. У ленты своеобразный нестандартный интерфейс. Для управления идет поток данных частотой 800кГц. Чтобы поменять конкретный бит, надо в очень точный момент (точность измеряется долями микросекунд) нужно дернуть уровень. И вот попасть в этот точный момент не так просто. Любая задержка/опережение приведет в результате к смене не того бита. Как результат "уедут" цвета всей ленты. Чтобы избежать этого используют прямой доступ, который тупо читает и пересылает данные. Т.к. дма работает на более высокой частоте, то чтобы "нарисовать" один бит потока ленты надо прочитать -дцать бит памяти. ------------------.......... Тут вот каждый символ - это бит в памяти, а на выходе получится 1 бит на более низкой частоте. Подробнее тут(англ) Объяснил как мог (сам чайник)
Dmitry__ писал(а):Как в памяти может тратиться 3 байт на один бит в ленту, если это надо делать в цикле.
Ключевое слово было DMA. У ленты своеобразный нестандартный интерфейс. Для управления идет поток данных частотой 800кГц. Чтобы поменять конкретный бит, надо в очень точный момент (точность измеряется долями микросекунд) нужно дернуть уровень. И вот попасть в этот точный момент не так просто. Любая задержка/опережение приведет в результате к смене не того бита. Как результат "уедут" цвета всей ленты. Чтобы избежать этого используют прямой доступ, который тупо читает и пересылает данные. Т.к. дма работает на более высокой частоте, то чтобы "нарисовать" один бит потока ленты надо прочитать -дцать бит памяти. ------------------.......... Тут вот каждый символ - это бит в памяти, а на выходе получится 1 бит на более низкой частоте.
Ну в принципе так и есть. Только вопрос не в скорости, 48мгц процу хватит скорости на такие тайминги. Но у меня нет тут осциллографа, ваще ничо нет, так что отлаживать программный цикл, чтобы точно держать время импульса - это как-нибудь в другой раз. Так что я зарядил DMA на 2.5 МГц, он у меня переписывает байты из памяти в порт GPIO. В байте только один значимый бит. Для записи бита в ленту я пишу последовательность или 110 или 100. Итого и есть 3 байта на бит. В ленте 60LED*24BIT*3=4320 байт + от лени душевной еще 200 нулевых байтов для сброса ленты перед обновлением. Могу присобачить 8 лент, с разных битов того же порта, в том же объеме памяти будет данных на 480 диодов. можно съекономить память, переписывая буфер DMA, но мне лень.