Управление адресной светодиодной лентой без использования библиотек
- Войдите на сайт для отправки комментариев
Втр, 04/06/2019 - 13:29
Здравствуйте.
(Заранее извиняюсь за возможно неправильный выбор раздела)
Как понятно из названия темы мне нужно управлять Адресной Светодиодной Лентой без использования библиотек.
В даташите на ленту изображён побитовый способ передачи цвета (а именно временные задержки и порядок передачи).
Вопрос:
Как с помощью ардуино соблюдать временные задержки при передаче данных о цвете.
Примечание:
АСЛ (сокращение от Адресная Светодиодная Лента) имеет чипы WS2812b.
Даташит на них.
Какой длительности задержки?
Почитайте здесь: http://arduino.ru/forum/proekty/pokhvalimsya-khudozhestvennoi-samodeyatelnostyu-na-ws2812
работает неплохо, и без библиотек. Правда немного критично к версии IDE. Под 1.6.5 работает точно под 1.6.9 - нет.
Исходный код:
Мой экспериментальный код:
Как энтомолог-любитель хочу поинтересоваться:
1. А чем, собственно.ю тот же fastled не устраивает?
2. Какова конечная цель исследований?
----------------------------------
Что до твоего вопроса, то умнож 144 на 3, сравни с 256 и жди постижения дзена... Если дойдет, к чему это, то постижение близко.
Вы и вправду думаете, что сумеете отладить чужой код на ассемблере, при том, что задаёте вопросы типа: "Как с помощью ардуино соблюдать временные задержки"?
Может лучше и впрямь,
слушать "Валенки"пользоваться библиотекой и не выпендриваться?1. FastLED занимает достаточно много памяти и вычислительной мощности.
2. Узнать как можно ускорить отображение цвета на ленту. А также для общего развития.
----------------------------------
Проблему вроде как понял (
В строке:
стоит переменная типа byte но число (144 * 3) которое должно занять его место больше по этому и не работает (однако пробовал менять на int/word, не работает))
Вопрос тот-же:
Как заставить работать больше, чем 85 светодиодов.
1. FastLED занимает достаточно много памяти и вычислительной мощности.
А вы ее открывали? фастлед занимает ровно столько же памяти, сколько ваш код - 3 байта на кадый диод.
Что касается неведомой "мощности" - то опять же совет - откройте Фастлед и посмотрите, как она работает с лентой. Что-то мне сдается. что код внутри куда более простой и эффективный. чем та поделка. что вы пытаетесь править. И в любом случае, вам полезно будет подсмотреть в Фастледе, как она обходит "проблему байта" - то есть когда число элементов массива становится более 256 :)
Или вы не в курсе, что код внутри библиотек можно открывать и просматривать и даже (о Боже!) - иногда править
Не знаю, поможет или нет, но можно притырить 30 строчек на ассемблере из Adafruit Neopixel. Там счёт идёт в переменной размерности word.
Правда, Ложик может обидеться и начать пузыри пускать...
1. FastLED занимает достаточно много памяти и вычислительной мощности.
2. Узнать как можно ускорить отображение цвета на ленту. А также для общего развития.
Фастлед писали профессионалы. А ты не знаешь, что с байтом делать. И ты так уверен, что сможешь написать нечто, занимающее меньше памяти и отъедающее меньше мощности, чем у них?
Самому не смешно?
Как заставить работать больше, чем 85 светодиодов.
У меня есть кусок кода ровно на 144 светодиода с обновлением 50 раз в секунду. Только зачем он тебе? А вдруг потребуется 143 или 145? Снова "памагити" кричать будешь?
--------------
Запомни, работать с этой лентой очень непросто. Это задача не для "начинающих ардуинщиков". Сто пудов не для них.
Запомни, работать с этой лентой очень непросто. Это задача не для "начинающих ардуинщиков". Сто пудов не для них.
Щас гайвера приплетут как контрпример :)))))
Так гайвер-то ГУРУ!!! Тоже мне, начинающего нашли! :)))
1. FastLED занимает достаточно много памяти и вычислительной мощности.
WS2812b работают на фиксированной скорости передачи. Ускорить нельзя. С вычислительной мощьностью тоже особо ничего поделать нельзя, поскольку в АВР нету хардверных блоков которые можно было бы задействовать для обмена с WS2812b без участия CPU.
Управление адресной светодиодной лентой без использования библиотек
Вот здесь
http://forum.cxem.net/index.php?/blogs/entry/580-ws2812-%D0%B8%D0%BB%D0%...
//Вот здесь
Не. SPI там без толку юзать. Слишком импульсы короткие. Ни прерывания ни "подключить буферы в SPI" непоможит. На длительностях 350-800нсек имеем считаные такты. И они посчитаны что у меня, что в Фастледе. Тут только асм, только хард ;) А SPI только откусит аппаратную часть под то, что и без неё работает с теми же свойствами - блокирующий вызов на все время записи в ленту.
Однако путь к поддержке дохрена светодиодов никак не закрыт. В http://arduino.ru/forum/proekty/pokhvalimsya-khudozhestvennoi-samodeyatelnostyu-na-ws2812?page=1#comment-327386 рабочий пример. Основывается на идее определения цвета каждого светодиода в паузе после записи в предыдущий. Соответственно буфер становится не нужен, нет и ограничения на кол-во светодиодов. В примере определение цвета в
void
GetColor(word n, word t)
делается. Надо только помнить о ограничении времени её выполнения. В даташите пишут "RES low voltage time Above 50µs" это время превышать нельзя. На самом деле даже хуже, моя лента не дает делать паузу более 10мксек, но я и в 2мксек успеваю делать GetColor. Получается чтоб поддерживать 100500 светодиодов надо: 1. Немного перевернуть мозги, чтоб уметь кодить эффекты ленты как функцию от номера светодиода и времени 2. Уметь писать быстрый код, который до 10мксек (а может и быстрей) реализовывал бы п.1ПС. Хочу свою поделку на WS2812 из той темы переписать на новый подход, но времени нет руки не доходят. А сейчас - так вобще. Каникулы, бля! Отогнать малого от компа - нереально. Да и куча других забот. Вобщем дерзайте сами! Пока ;)