Светомузыка, мерцание ленты ws2811

shadal3
Offline
Зарегистрирован: 30.01.2018

Всем привет!

Сделал светомузыку на базе MSGEQ7 и при помощи ардуино уно

Проблема следующая.Есть блок питание на 25А, есть 16 метров ленты, для каждых 4-5 метров отдельное питание (то есть паралельное соеденение к блоку питания), Din и Do соеденены во всех 16 метрах последовательно, решил я добавить еще 6 метров ленты полосками по 1.5м то есть 4 штуки, кинул еще одну паралель от блокапитания и распалелил её раз, и потом еще раз и так повесил на каждою 1.5м полосу, тоже самое я сделал и с дигитальным проводом, распалелил его дважды, и как результат все 4 куска мерцают, пробовал подключить последовательно дигитальный провод, как подключился ко второму куску он так же стал мерцать.... уже и не знаю что сделать... в чем может быть причина ? 

Очень извиняюсь если написал не в тот раздел, или если не хватает информации

Заранее благодарю за ответы

arduinec
Offline
Зарегистрирован: 01.09.2015

Ленты бывают разные: от 30 светодиодов на метр до 144 с/м. Ленты питаются (обычно) от 5 или 12 вольт.
Один светодиод потребляет (по даташиту) 60 мА.

sadman41
Offline
Зарегистрирован: 19.10.2016

Тут, по-моему, кто-то недавно делал панно из ws2812 и тоже они мерцали на дальних сегментах. Помнится мне, что всё кончилось напайкой массы конденсаторов к светодиодам.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

16 метров + 6 метров... 22 метра?

Давайте дальше, 22 метра по:

30 диодов = 660шт

60 диодов = 1320шт

144 диода = 3168шт

Теперь считаем потребление ленты целиком:

30шт\м*22м*0,06А = 39.6А.. Упс, уже даже для самой простой ленты(30шт\м) - у нас почти в 1.5 раза нехватает питания....

Если же у вас лента 144диода\м.... всё еще печальней будет... =) 

144*22*0.06 = 190А....

shadal3
Offline
Зарегистрирован: 30.01.2018

У меня по 60 диодов на метр, и питаю я от 12В

Однажды я замерял ток ленты в 5 метрах, то есть при 300 светодиодах, и вышло около 2,5А при белом цвете.

Если взять 16 метров, которые работают на ура, нет не артефактов, не мерцания, то это получается 16м х 0,06 х 60 = 57,6А , когда мой БП расчитан на 25А, так что у меня есть некое сомнение что дело в БП :) 

shadal3
Offline
Зарегистрирован: 30.01.2018

Нашёл эту тему, ситуации похожи, но в том случае появлялись артефакты при понижении уровня яркости, у меня же они есть на максимальной яркости (приду домой попробую понизить яркость, посмотрю что будет) так же есть еще один слабенький БП, но раньше он все 5м питал, так что попробую запитать 2 полоски из последних 4 и посмотрю что будет. Выложу фото для ясности

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

"Однажды я замерял ток ленты в 5 метрах, то есть при 300 светодиодах, и вышло около 2,5А при белом цвете."

Мне кажется вы увидели что такое среднее потребление, осталось увидеть мгновенное....

"так что у меня есть некое сомнение что дело в БП :) "

посмотрите осциллографом что творится у вас на линии питания, и тогда уже можно сомневатся =)
 

Дальше мерцание, есть куча вариантов почему оно есть, например пульсации питания или помехи в линии данных, или просадка линии данных до критичных уровней(длинаа линии данных сколько? емкость?)

дальше схема включения пока что не очень понятна, все 22м включены последовательно(линия данных) ?)

 

shadal3
Offline
Зарегистрирован: 30.01.2018

В самом начале стоит токоограничивающий резистор на 180 Ом , после, 16 метров линии данных последовательно подключенной, после чего распаралеливание на 4 части каждая по 1,5 метра.

Что вы подразумеваете под ёмкостью? 

К сожалению я тот тип электронщика, который делает все без осциллоскопа :(

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

"после чего распаралеливание на 4 части каждая по 1,5 метра."

Вот тут ваши части по 1.5м начинают "мерцать" ? или просто выводить абы что =)

попробуйте, теста ради записать 17.5м белого цвета(у вас именно столько ленты видны для МК, те куски которые вы подключили паралельно - считайте как один кусок), но честно сказать не изучал как именно себя поведет лента подключеная паралельно, не было такой необходимости... 

и опять таки вопрос, мерцает вся лента? или только часть?

"Что вы подразумеваете под ёмкостью? "

Емкость - как у конденсатора, у любого кусочка провода(дорожки на плате) да и вообще всего что вас окружает - есть емкость.

Так вот если ваши "провода" обладают хоть сколь либо значимой емкостью - ардуина может просто не успевать поднимать напряжение на проводах до нужных логических уровней.

зы. еще стоит попробовать последовательно подключить всю ленту(шину данных) а не паралелить ее.

Гриша
Offline
Зарегистрирован: 27.04.2014

ТС, почитайте по ссылке, думаю поможет....

shadal3
Offline
Зарегистрирован: 30.01.2018

"зы. еще стоит попробовать последовательно подключить всю ленту(шину данных) а не паралелить ее."

Сразу решил так сделать, и получилась следующая картина, 16 метров работали отлично, подключил еще 1.5м последовательно, все работало, потом еще 1.5 последовательно, и этот последний кусок стал мерцать, все 16.5 до этого куска при этом обычно себя вели, всё с ними было в порядке.

"Емкость - как у конденсатора, у любого кусочка провода(дорожки на плате) да и вообще всего что вас окружает - есть емкость."

Спасибо за обьяснение), к сожалению не могу замерить ёмкость, так как у тестера нету этого режима.

"и опять таки вопрос, мерцает вся лента? или только часть?"

Мерцают именно эти полосы по 1.5 метра

"Вот тут ваши части по 1.5м начинают "мерцать" ? или просто выводить абы что =)

попробуйте, теста ради записать 17.5м белого цвета(у вас именно столько ленты видны для МК, те куски которые вы подключили паралельно - считайте как один кусок), но честно сказать не изучал как именно себя поведет лента подключеная паралельно, не было такой необходимости... "

Сделал именно как вы сказали, сейчас сниму видео, выложу на ютуб, и ссылку здесь оставлю

sadman41
Offline
Зарегистрирован: 19.10.2016

А ежели этот кусок мерцающий не к хвосту припаять, а к клюву... Т.е. вначале страйпа поставить - что изменится?

shadal3
Offline
Зарегистрирован: 30.01.2018

Вы имеете именно питание с другой стороны ? , так как линию данных с другой стороны не подключить (на каждом куске ленты один конечн вход Din другой выход Do)

Хочу попробовать дать питание этим страйпам по 1.5м от другого БП, посмотретть что выйдет.

А вот и видео

https://www.youtube.com/watch?v=z1xEEgVU5eg&feature=youtu.be

sadman41
Offline
Зарегистрирован: 19.10.2016

Было: МК ---> [resistor] ----> 6 м ---> 1,5м ---> 1,5м (моргает)

Пробовать:  МК ---> [resistor]  1,5м (моргает?) ----> 6 м ---> 1,5м 

Ежели перестанет моргать ближний и заморгает дальний - по-любому с питанием проблема.
ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Питание врятли при делах если подключено паралельно(а последовательно - оно самое виновно)

а вот подключить 6м данных отдельно таки стоит, чтобы исключить ошибку в ПО.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

"Ежели перестанет моргать ближний и заморгает дальний - по-любому с питанием проблема."

По любому проблема, но с питанием или данными так не выяснить =)

Проблема может быть как в линии питания так и в линии данных, искажения данных на 17+м непонятного провода могут быть очень даже неплохие =)

shadal3
Offline
Зарегистрирован: 30.01.2018

В статье рассказывыается о том, что надо поставить 2 конденсатора на 1000мкФ и на 0.1мкФ паралельно ленте.

У меня же получается так, все 22 метра подключены паралельно в БП, и им всем паралельно стоит один конденсатор на 1000мкФ и на 0.1мкФ, надо ли было отдельно к кажому питанию ленты, свои конденсаторы на 1000мкФ и на 0.1мкФ? 

https://pp.userapi.com/c841338/v841338476/5f4a7/HuRKDzIzBC8.jpg

получается так что у меня отдельное питание для 5.3м еще для 5.3м, еще 5.4, и для тех кусков по 1.5 которые мерцают то есть еще для 6м

для первых 16м у меня стоят оба конденсатора в паралель, для последних 6м у меня стоит только электролит на 1000мкФ

Знаю что немного по китайский всё сделанно, просто керамический не достал между краями питание на БП, но попробую ему щас ножки нарастить и поставить.

sadman41
Offline
Зарегистрирован: 19.10.2016

Спорить не буду, такие длинные веревки не питаю. Сужу по тому посту с панно - если конденсаторы там все поправили, то всяко питания не хватало на дальнем конце.

Гриша
Offline
Зарегистрирован: 27.04.2014

 найдите еще БП от компьютера и запитайте, все земли (минусы питания) должны быть объединены. Все ленты (для проверки) запитать с 2 сторон. 

про ws2811 написано много в инете, конденсаторы ставить обязательно - иначе лента долго не проживет. (самое малое написано по ссылке в посте 9)

shadal3
Offline
Зарегистрирован: 30.01.2018

Вы имеете ввиду, использовать у ардуино еще один пин для передачи данных, и попробовать передать по нему на последние 6м ? 

sadman41
Offline
Зарегистрирован: 19.10.2016

Можно и так. Питание оставить, как есть, а сигнальный покороче сделать. Если замыргает, то питания не хватат (наверняка).

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Именно, причем на вашем месте(видя видео) запитал бы каждые 6м от своих данных.

В идеале - от своих контроллеров, тем более что сейчас цена контроллера - копейки.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

shadal3 пишет:
В статье рассказывыается о том, что надо поставить 2 конденсатора на 1000мкФ и на 0.1мкФ паралельно ленте

1000мкф - сглаживает пульсации питания, на каждые 6м ленты стоит вешать, тем более они копеешные, и можно добыть из любой материнки пачками.

0.1 мкф - фильтр от помех, ставить по питанию - для фильтрации наводок окружающей среды, тоже желательно не сильно редко.

shadal3
Offline
Зарегистрирован: 30.01.2018

их у меня к счастью пачками, но не хотел замарачиваться, что бы к кажому проводу питания их припаивать, но теперь видимо придётся )

shadal3
Offline
Зарегистрирован: 30.01.2018

Это не точно, но у меня были мысли о том что если я так сделаю, то больше кэша потрачу, но в любом случае сейчас попробую дать данные с другого пина 

shadal3
Offline
Зарегистрирован: 30.01.2018

 

Поздно, уже подал питание с другого БП, проблема осталась

shadal3
Offline
Зарегистрирован: 30.01.2018

Одно решение найдено!!!!

Вот такая вот команда у меня была прописана 

Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED, PIN, NEO_GRB + NEO_KHZ800);

Когда стал гуглить как управлять лентами с двух пинов, наткнулся на статью о том что если лента типа ws2812 то KHZ800, если же лента типа ws2811 то должно быть установленно значение KHZ400

прописал вот так

Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED, PIN, NEO_GRB + NEO_KHZ400);

После чего мерцание и любые артефакты пропали

Незнаю, Ради эксперемента можно попробовать выставить обратно KHZ800 и попробовать дать управление с другого пина, но я думаю, что сработает

Спасибо всем огромное за помощь!

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

shadal3 пишет:
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED, PIN, NEO_GRB + NEO_KHZ800);

Вот тут я вам точно не помошник =) мне к сожалению библиотеки использовать не выходит, приходится читать даташиты и делать с нуля =) отказ от ардуины влечет последствия, но имеет и плюсы =)

shadal3
Offline
Зарегистрирован: 30.01.2018

И всё же это оказался не конец, спустя какое то время, заметил что эти мерцания все равно есть, но намного резже чем были, и менее заментные, тем не менее они остались.

Попробовал вариант с тем что бы кинуть провод с данными для последних 6 метров, и настройки выставил такие 

Adafruit_NeoPixel strip = Adafruit_NeoPixel(320, PINS, NEO_GRB + NEO_KHZ400);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(32, 6, NEO_GRB + NEO_KHZ800);
 
под strip первые 16 метров под strip2 последние 6 (которые распаралелены)
 
Так вот, если оставить частоту 800 у strip2, то все отлично работает, но при этом на низком звуке, жужание из колонок, если выставить частоту 400, любое жужание исчезает, но при этом одна полоса из 4 начинает мерцать, и по полной, чуть ли не в стадию "страбоскоп" входит, и потом может резко взять и стать нормально работать, и через несколько секунд все заного. Возможно в других полосках тоже есть мерцания, как то не обратил внимание, но вроде не заметил.
если менять частоту у strip то ничего не мерцает что при 400, что при 800, но при 800, есть очень еле заметное жужание.
 
Попробую пока что, к каждым 6 метрам поставить отдельно кондёры по 1000 и 0.1 может что то и изменится
 
Очень жду ваших идей :)
 
ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Вот вам ответ о причинах:

WS2812:

https://yadi.sk/i/vPsRi3FS3Rw9Fi

WS2811:

https://yadi.sk/i/PONn4VY73Rw9HF

Нарушение таймингов становилось критичным после 17.5м =)

Смотрите на временные рамки передаваемых бит.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Скорей всего не изменится, попробуйте сформировать вручную правильный сигнал(без библиотеки), заодно скил прокачаете и тоже со временем уйдете от ардуинки =)

shadal3
Offline
Зарегистрирован: 30.01.2018

Охх, честно говоря даже не представляю как это сделать, слышал что про преобразование фурье, и что на основе его делали светомузыку, но я не знаю использовали ли для этого какую то библиотеку :)

"попробуйте сформировать вручную правильный сигнал(без библиотеки), заодно скил прокачаете и тоже со временем уйдете от ардуинки =)"

Если не сложно, можно было бы про это поподробнее, или ссылку какую нибудь на информацию по этому делу)

shadal3
Offline
Зарегистрирован: 30.01.2018

Всё время не понимал особо тайминги, и биты, можно было бы тоже поподробнее, как вы поняли что нарушение таймингов становится критичным при 17.5м? и как вообще по этой таблица ориентироваться. Извиняюсь за глупый вопрос :)

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

shadal3 пишет:

Если не сложно, можно было бы про это поподробнее, или ссылку какую нибудь на информацию по этому делу)

Что именно подробней? в даташите же написан протокол работы ленты, чтобы запустить начало передачи заземляем линию больше чем на 50мкс, это значит начало передачи...

дальше идут последовательно все биты....

1) чтоб передать еденицу надо сначало подать 1(HIGH) на 1.2мкс потом 0 (LOW) на 1.3мкс
2) чтоб передать ноль      надо сначало подать 1(HIGH) на 0.5мкс потом 0 (LOW) на 2.0мкс

Чтобы зажечь 1 диод надо передать все 24бита или 3байта

вот порядок передачи бит:

https://yadi.sk/i/Rnq-Oy8c3Rw9wX

для второго диода не делая паузы шлем сразу его цвет(следующие 24 бита)...

как только отправили все свои диоды(320шт или сколько у вас их...) делаем паузу(подаем LOW) на 50 и более мкс. как только хотим снова изменить цвет идем к пункту 1(50мкс LOW, передача всех бит на все диоды, снова LOW).

Это касаемо вашей ленты, у WS2812 другие тайминги.

 

p.s. время описано для варианта 400кгц, хотите 800 - делите время передачи данных пополам(т.е. было 0.5мкс, стало 0.25мкс), время паузы не меняется, так же 50мкс

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

shadal3 пишет:
как вы поняли что нарушение таймингов становится критичным при 17.5м?

Из вашего видео, судя по всему после 17.5м лента начинает мерцать(неправильно читает данные) =) 

shadal3 пишет:
и как вообще по этой таблица ориентироваться. Извиняюсь за глупый вопрос :)

Легко, открываем даташит и смотрим просто на картинки =) 

1) https://yadi.sk/i/CAeq9IUd3RwATQ

2) https://yadi.sk/i/mPtUdRSW3RwAMU

3) https://yadi.sk/i/csYLXedm3RwAWb

Вот и сам даташит, первое что в гугле попалось по 2811

https://cdn-shop.adafruit.com/datasheets/WS2811.pdf

 

p.s. когда вы написали про разницу в частоте для 2811и 2812 я просто глянул в даташит и убедился что тайминги у них разные, хоть это и не критично на малых кусках ленты- на больших эта погрешность может вызывать непредсказуемые сбои...

так что предсказать что сбой будет на 10м, 17м или 40м - невозможно, просто нужно его ждать начиная с первого диода и до бесконечности =)

shadal3
Offline
Зарегистрирован: 30.01.2018

Посчитал я время, необходимое для того что бы засветить все светодиоды в белый например, около 21мс получилось, но что мне это даёт? Если тайминги нарушаются, значит ардуина не справляется? То есть идет разсинхронизация с тем, что данные еще не переданы на все светодиоды, а уэе надо следующий данные отправлять?

Такой вот еще вопрос, если для последних 6 метров, я поставлю отдельную ардуино, то тогда все должно быть в норме?, я имею ввиду мерцание пропадет, а в колонках не будет жужать?

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

shadal3 пишет:

Посчитал я время, необходимое для того что бы засветить все светодиоды в белый например, около 21мс получилось, но что мне это даёт?

Информация выше была не для подсчета на коленке, а для реализации без библиотеки =)

shadal3 пишет:
Если тайминги нарушаются, значит ардуина не справляется? То есть идет разсинхронизация с тем, что данные еще не переданы на все светодиоды, а уэе надо следующий данные отправлять?

Ардуины с лихвой хватает на передачу с нужными задержками, речь о том что для диода 2811 и для 2812 задержки разные....

shadal3 пишет:
Такой вот еще вопрос, если для последних 6 метров, я поставлю отдельную ардуино, то тогда все должно быть в норме?, я имею ввиду мерцание пропадет, а в колонках не будет жужать?

Достаточно даже подавать сигнал на последние 6м с другой ноги, но тут таки опять, не могу сказать принцип работы библиотеки, если когдато давно прочитаное ее описание верно, то она не использует прерываний, и вовсе их отключает на время записи, в таком случае - просто подавать данные с отдельного пина - достаточно.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

shadal3 пишет:

Охх, честно говоря даже не представляю как это сделать, слышал что про преобразование фурье, и что на основе его делали светомузыку, но я не знаю использовали ли для этого какую то библиотеку :)

Вы светомузыку делаете или подсветку просто? фурье нужен для того чтоб звук разложить на составляющие его частоты =)

shadal3
Offline
Зарегистрирован: 30.01.2018

Светомузыка, но у неё есть режими ожидания, в эти моменты она становится подстветкой, хах)

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Упс, не а слона то я и не заметил =) брр, тогда как же вы ее делаете без фурье ?)))))

shadal3
Offline
Зарегистрирован: 30.01.2018

Да вот решил её сделать на базе MSGEQ7, честно говоря, думал сделать через фурье, но сейчас просто времени нету разбираться с этим )

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Афигеть, 3 бакса за..... блин для фурье же кода готового полно, взял и пользуй, тем более под ардуинку.... =) ужс =)

shadal3
Offline
Зарегистрирован: 30.01.2018

На самом деле, надо бы ознакомиться, возможно я бы нашел решение с мерцанием, кроме как, подключать еще одну ардуино нано ( странно конечно, почему используя два пина, проблема осталась)

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

shadal3 пишет:

странно конечно, почему используя два пина, проблема осталась

Если по питанию точно проверили то проблемы остатся не должно, или что то подключено неверно, или что то с лентами

з.ы. Я же надеюсь тесты проводятся в режиме свечения а не светомузыки?))

shadal3
Offline
Зарегистрирован: 30.01.2018

Cейчас решил, полностью переписать код, только для этих кусков на шкафу, и проблема осталась, с 3 кусками все впорядке, и последний, просто жуткое мерцание, обрезал везде питание и данные, и оставил только этот последний кусок, и проблема не пропала, щас попробую как кто то советовал дать питание с двух сторон, если проблема не решится, то думаю проблема в ленте (открою диспут, пусть новую высылают)

По поводу тестов, проводил их и так и так, но сейчас последний раз, именно в режиме свечения)

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Просмотрите кусок ленты на предмет "поврежденной" дороги данных или диода(если один будет поврежден по линии данных - все что за ним будут мерцать)... это вероятней, еще как вариант зажечь белый и промерять напругу на последнем участке(но врятли...).

shadal3
Offline
Зарегистрирован: 30.01.2018

О боже свершилось чудо! , все удалось и отлично работае. Решением стало как и советовал фонарик использовать 2 пина для управления, что бы не возникало проблем с таймингами (провод с данными кинул на все полоски по 1,5м паралельно), но и это не все, для каждого шкафа пришлось делать отдпльное питание, почему не работало с магистралью которая потом расходилась на 2 шкафа, не могу сказать, видимо какие то примудрости у этой китайской ленты есть. Спасибо еще раз всем за помощь

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну так магистраль была тем же сечением, что и отводы, поди, кабелем на 0.05кв.мм.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

sadman41 пишет:
Ну так магистраль была тем же сечением, что и отводы, поди, кабелем на 0.05кв.мм.

Ы =) если магистраль это кабель в 5 соток то всё понятно... я как то не подумал когда говорилось про питание что будет речь о таких проводах идти =)

 

з.ы. Мой ник не переводится =) он как читается так и звучит =) 

shadal3
Offline
Зарегистрирован: 30.01.2018

Провод и отводы действительно такого сечения,  сделал расчеты, выдержит ли это кабель ток, вроде как должен был, значит  можно его смело  ставить.

Загадкой для меня осталось, то, когда я отключил питание и данные от всех лень что есть и оставил только на одном шкафу по 2 линии, и одна из них мерцала , другая нет, менял отводы местами, и провод с данными тоже, но результат был один, одна лента мерцает, другая нет, стал отрезать ее по чуть чуть, надеясь найти битый сегмент, ничего не помогло... но на след день проводя новое питание и перепаяв провода цепляющиеся к лентам на этом шкафу, все заработало.... могло ли быть так, из за того что плохо припаялся к ленте?)

sadman41
Offline
Зарегистрирован: 19.10.2016

Да всё что угодно может быть, как показывает практика. 

Два посетителя arduino.ru даже по простой схеме могут собрать два принципиально разных устройства.