Официальный сайт компании Arduino по адресу arduino.cc
Как реализовать управление 2-4 лентами ws2812B посредством аппаратного SPI?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 24/03/2015 - 14:07
Доброго всем дня и настроения! Ребята подскажите, каким образом можно управлять 2-4 лентами ws2812B посредством одного контроллера. Аппаратный SPI всего однин. Если все ленты подключить к нему, получится их адресовать как ведомая№1, ведомая №2 и т.д? Библиотека NeoPixel позволяет это сделать? Если да, то как понять на каком адресе какая лента висит?
Програмный Spi не подходит по скорости.
а при чем тут spi? там же однопроводной интерфейс вроде
а во вторых теоретически можно инициализировать на других пинах одновременно. а можно все по одному передавать
хотя все это софтварно. но там частота 800кгц. неужели недостаточно. может проблема не в либе, а в остальном коде. или светодиодов слишком много
за 1 секунду надо выводить в ленту 54 - 80 кб, к тому.же эти данные надо подготовить (расчитать). Думаю через аппаратный интефейс будет быстрее. И SPI судя по даташиту можно попробовать работать по 1 линии (MOSI) учитывая однонаправленный характер пердачи данных. По буржуйским форумам бегло пробежался - там делают через SPI
значит не в чистом виде spi. так как судя по даташиту данные передаются по другому. кодировка 1 и 0 не высоким и низким уровнем, а длиной импульса
80кб это получается 80*1024/24 =3413 светодиода в секунду, но не 3413 раз один светодиод так как должна быть пауза 50мкс минимум
либа при 800кгц выдает 33333 светодиода в секунду (в идеальном случае)
уж не рекламный щит делаешь?
Да именно комбинацией во времени длин высокого и низкого уровней. Как SPI заточить под мои цели?
Мне понравилась, вот такая штука понравилась https://www.kickstarter.com/projects/minimonkey/monkey-light-pro-bicycle-wheel-display-system
Памяти маловасто у ардуины, теперь надо думать как ее расширить, да так чтобы виброустойчиво было. Програмулину, переводящую картинку во входной набор данных для отрисовки уже наваял
так ты тоже самое хочешь сделать? откуда такие объемы данных?
Да хочу повторить, и сложного ничего не вижу в этом. По крайней мере в программировании. В механической части прийдется повозится.
Ксати есть идея подсоединить большой модуль памяти, и можно даже клипы крутить:)
(30 светодиодов в ленте) Х (100отрисовок на круг)*(3байта на пиксел)*(4 кадра в секунду)=36кб./c
Это у меня уменьшились аппетиты. Раньше хотел ставить ленту на 60 светодиодов. Вот и получалось72кб./с.
у них 32 светодиода на полоске, 4 полоски в топ модели. разница конечно будет. но они врядли на ардуине делали
а ты вообще пробовал гонять данные на светодиоды? точно ли не успеет
посчитаем по даташиту по средним значениям. максимальную длительность имеет еденица 1.3мкс. от нее и будем отталкиваться
(1,3мкс*24бита*30 светодиодов+50мкс задержка)=986мкс вывести цвет 1 раз на 30 светодиодов
то есть 1000 раз можно обновить за секунду 30 светодиодов (отсылать все равно с таймингами как в даташите. если с ардуиной работает значит она это делает)
то есть с либой должно все получится
в моем варианте пока будет 2 ленты по 30 пикселов. Нашел библиотеку NeoPixel, она вроде по даташиту позволяет подключать ленту на любой цифровой пин, следовательно работает не через SPI. А на SPI можно повесить внешний модуль памяти, например такой - FM24V05.
Надеюсь библиотека Neopixel не будет конфликтовать с библиотекой SPI. К тому же хочется еще и на прерывание зацепиться.
И кстати в даташите на WS2812B на диаграмме "Data transmission metod" нарисовано, что Reset code (пауза 50микросекунд ) надо отправлять после передачи каждых 3 байт данных. Или я неправильно понял что-то
неа. насколько я понял только после передачи всех байт. пауза нужна чтобы драйвер понял что данные переданы и их нужно вывести на светодиоды
эта память i2c если что)))
а насчет конфликтов проверь узнаешь, или либу просмотри. хотя по идее не должно. spi работает отдельно от таймеров. сам по себе
Ребята подскажите, каким образом можно управлять 2-4 лентами ws2812B посредством одного контроллера. Аппаратный SPI всего однин.
Дак элементарно! Про SPI забываем, прерывания не трогаем. Алгоритм вывода на.. чё мелочится то! сразу 8 лент. Все ленты подключены к одному порту.
1. Выводим на порт 0x00 для формирования сброса. Подготавливаем в массив данные для вывода в течении не менее 50 мкс.
2. Инициализируем указатель на текущие данные на первый элемент массива.
3. Выводим в порт 0xff для начала передачи бита на все 8 лент.
4. Пауза в два NOP - формируем интервал в 3 такта - 0,375мкс. Возможно вместо них некоторые вспомогательные операции.
5. Вывод в порт текущего элемента массива. Завершаем вывод высокого уровня для передачи 0 на часть лент.
6. Пауза в два NOP - формируем интервал в 3 такта - 0,375мкс. Возможно вместо них некоторые вспомогательные операции.
7. Вывод в порт 0x00. Завершаем вывод высокого уровня для передачи 1.
8. Пауза в 5 операций - формируем интервал в 6 такта - 0,75мкс. В этих операциях - переход на новый элемент массива и реализация п.9.
9. Проверка на завершение цикла и переход к п.3. Возможно часть операций п.8-9 рассредоточить по п.4 и 6.
Реализовывать лучше на ассемблере. Если надо именно 4 ленты - п.4-8 повторяем подряд 2 раза, сдвинув элемент массива на 4 бита.
спасибо, но проще очевидно будет подключить обе ленты последовательно, и заливать данные в ленты через готовую библиотеку. Задержки не будет видно, т.к светодиоды загораются все одновременно после комманды Reset
Если количество светодиодов позволяет то разумеется так. Если их слишком много или мало времени на заливку в ленту - то разделять на паралельные.
может если вас не затруднит, поможете с другим вопросом, вот тут - http://arduino.ru/forum/processing/kak-sokhranit-v-fail-znacheniya-peremennoi-color
и еще вопрос. Я планировал измерять скорость вращения колеса велосипеда герконом или индукционным датчиком http://www.buyincoins.com/item/12325.html#.VRjrQdH3Pws Вот в этом проекте используют аксеолерометр - http://arduino.ru/projects/POV_display_by_Arduino. Может будут идеи как мерять бесконтактно скорость вращения велосипедного колеса, без дополнительного обвеса со стороны рамы. Хотелось бы конечно реализовать с помощью связки акселерометр-гироскоп.
датчик холла и магнит на раму. проще всего
а получится точно определить соостность датчика Холла и магнита? Не получится ли так, что датчик будет выдавать максимальное значение напряжения на выходе в диапазоне +- 1 см, от магнита?
датчик холла и магнит на раму. проще всего
В таком варианте подойдет? http://www.aliexpress.com/item/BETR-5A-Measuring-Range-Current-Sensor-Module-ACS712-Module/1886487211.html
так у тебя колесо ведь крутится в основном вперед. ну будет срабатывать за 1 или 2 см до магнита. какая разница если каждый раз все равно на этом же расстоянии будет срабатывать
а при чем тут этот датчик? это для измерения тока вообще то. перевочиком переведи))
тебе нужен вроде таких
http://ru.aliexpress.com/item/Hall-Sensor-Hall-Switch-Moudle-Professiona...
http://ru.aliexpress.com/item/Hall-Switch-Sensor-Module-For-Arduino-Smar...
этот датчик тока при помещении в магнитное поле тоже начинает здорово менять свои показания.
А насчет 1-2 см разницы в срабатывании, я переживаю в стабильности этой характеристики, т.к количество оборотов колеса надо мерять очень точно, чтобы не рвало синхронизацию или как вариант, если будет 2 ленты на колесо, то можно 2 раза за оборот колеса мерять скорость.
точно это оптический. но ставить такой на велосипед бесполезно. забьется пылью и грязью
а насчет здорово менять показания есть доказательства? я предложил датчик холла с компаратором. второй мне больше понравился. на нем есть и аналоговый и цифровой выход. можешь взять осциллограф и сравнить
в статье которую ты привел качается туда сюда, изза этого и нужен акселерометр. а у тебя вращается
ну по внешнему виду там компаратор реализован на однокристалке. Мне интересней было бы поставить датчик холла и самому обрабатывать с него сигнал, таким образом сделав конструкцию более универсальной
компаратор сделан на компараторе))
ты не читаешь. там 2 выхода. с самого датчика аналоговый, и с компаратора цифровой. но лучше цифровой. его на прерывание можно повесить. а с аналогового надо сначала на ацп постоянно и при определенном уровне что то делать. странно но дело твое
согласен, для тестовых целей готовый модуль пойдет. Но для тиражирования не хочется привязываться к чужим модулям. Да и в таком размере модуль мне не нужен... Спаибо за советы!
да кто мешает эту простейшую плату сделать на твоей. схема простейшая
да кто мешает эту простейшую плату сделать на твоей. схема простейшая
более чем согласен
такой компаратор подойдет http://www.chipdip.ru/product/max942epa/ ?
да какой хочешь. хоть LM339
а не проще купить готовую плату. отладится. срисовать схему и т.д.?
ждать 3 недели не хочется
ну тогда погугли схему или сам. посмотри какие сигналы формирует датчик холла