Как реализовать управление 2-4 лентами ws2812B посредством аппаратного SPI?

RainMan
Offline
Зарегистрирован: 21.06.2011

Доброго всем дня и настроения! Ребята подскажите, каким образом можно управлять 2-4 лентами ws2812B посредством одного контроллера. Аппаратный SPI всего однин. Если все ленты подключить к нему, получится их адресовать как ведомая№1, ведомая №2 и т.д? Библиотека NeoPixel позволяет это сделать? Если да, то как понять на каком адресе какая лента висит?

Програмный Spi не подходит по скорости. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а при чем тут spi? там же однопроводной интерфейс вроде

а во вторых теоретически можно инициализировать на других пинах одновременно. а можно все по одному передавать

хотя все это софтварно. но там частота 800кгц. неужели недостаточно. может проблема не в либе, а в остальном коде. или светодиодов слишком много

RainMan
Offline
Зарегистрирован: 21.06.2011

за 1 секунду надо выводить в ленту 54 - 80 кб, к тому.же эти данные надо подготовить (расчитать). Думаю через аппаратный интефейс будет быстрее.  И SPI судя по даташиту можно попробовать работать по 1 линии (MOSI) учитывая однонаправленный характер пердачи данных. По буржуйским форумам бегло пробежался - там делают через SPI  

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

значит не в чистом виде spi. так как судя по даташиту данные передаются по другому. кодировка 1 и 0 не высоким и низким уровнем, а длиной импульса

80кб это получается 80*1024/24 =3413 светодиода в секунду, но не 3413 раз один светодиод так как должна быть пауза 50мкс минимум

либа при 800кгц выдает 33333 светодиода в секунду (в идеальном случае)

уж не рекламный щит делаешь?

RainMan
Offline
Зарегистрирован: 21.06.2011

Да именно комбинацией во времени длин  высокого и низкого уровней. Как SPI заточить под мои цели?

Мне понравилась, вот такая штука понравилась https://www.kickstarter.com/projects/minimonkey/monkey-light-pro-bicycle-wheel-display-system

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так ты тоже самое хочешь сделать? откуда такие объемы данных?

RainMan
Offline
Зарегистрирован: 21.06.2011

Да хочу повторить, и сложного ничего не вижу в этом. По крайней мере в программировании. В механической части прийдется повозится.

Ксати есть идея подсоединить большой модуль памяти, и можно даже клипы крутить:) 

(30 светодиодов в ленте) Х (100отрисовок на круг)*(3байта на пиксел)*(4 кадра в секунду)=36кб./c

Это у меня уменьшились аппетиты. Раньше хотел ставить ленту на 60 светодиодов. Вот и получалось72кб./с. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

у них 32 светодиода на полоске, 4 полоски в топ модели. разница конечно будет. но они врядли на ардуине делали

а ты вообще пробовал гонять данные на светодиоды? точно ли не успеет

посчитаем по даташиту по средним значениям. максимальную длительность имеет еденица 1.3мкс. от нее и будем отталкиваться

(1,3мкс*24бита*30 светодиодов+50мкс задержка)=986мкс вывести цвет 1 раз на 30 светодиодов

то есть 1000 раз можно обновить за секунду 30 светодиодов (отсылать все равно с таймингами как в даташите. если с ардуиной работает значит она это делает)

то есть с либой должно все получится

 

RainMan
Offline
Зарегистрирован: 21.06.2011

в моем варианте пока будет 2 ленты по 30 пикселов. Нашел библиотеку NeoPixel, она вроде по даташиту позволяет подключать ленту на любой цифровой пин, следовательно работает не через SPI. А на SPI можно повесить внешний модуль памяти, например такой - FM24V05.

Надеюсь библиотека Neopixel не будет конфликтовать с библиотекой SPI. К тому же хочется еще и на прерывание зацепиться. 

И кстати в даташите на WS2812B на диаграмме "Data transmission metod" нарисовано, что Reset code (пауза 50микросекунд ) надо отправлять после передачи каждых 3 байт данных. Или я неправильно понял что-то

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

неа. насколько я понял только после передачи всех байт. пауза нужна чтобы драйвер понял что данные переданы и их нужно вывести на светодиоды

эта память i2c если что)))

а насчет конфликтов проверь узнаешь, или либу просмотри. хотя по идее не должно. spi работает отдельно от таймеров. сам по себе

Logik
Offline
Зарегистрирован: 05.08.2014

RainMan пишет:

Ребята подскажите, каким образом можно управлять 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 бита.

 

 

RainMan
Offline
Зарегистрирован: 21.06.2011

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

Logik
Offline
Зарегистрирован: 05.08.2014

Если количество светодиодов позволяет то разумеется так. Если их слишком много или мало времени на заливку в ленту - то разделять на паралельные.

RainMan
Offline
Зарегистрирован: 21.06.2011

может если вас не затруднит, поможете с другим вопросом, вот тут -  http://arduino.ru/forum/processing/kak-sokhranit-v-fail-znacheniya-peremennoi-color

RainMan
Offline
Зарегистрирован: 21.06.2011

и еще вопрос. Я планировал измерять скорость вращения колеса велосипеда герконом или индукционным датчиком http://www.buyincoins.com/item/12325.html#.VRjrQdH3Pws Вот в этом проекте используют  аксеолерометр - http://arduino.ru/projects/POV_display_by_Arduino. Может будут идеи как мерять бесконтактно скорость вращения велосипедного колеса, без дополнительного обвеса со стороны рамы. Хотелось бы конечно реализовать с помощью связки акселерометр-гироскоп. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

датчик холла и магнит на раму. проще всего

RainMan
Offline
Зарегистрирован: 21.06.2011

а получится точно определить соостность  датчика Холла и магнита? Не получится ли так, что датчик будет выдавать максимальное значение  напряжения на выходе в диапазоне +- 1 см, от магнита?  

RainMan
Offline
Зарегистрирован: 21.06.2011

jeka_tm пишет:

датчик холла и магнит на раму. проще всего

В таком варианте подойдет? http://www.aliexpress.com/item/BETR-5A-Measuring-Range-Current-Sensor-Module-ACS712-Module/1886487211.html

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так у тебя колесо ведь крутится в основном вперед. ну будет срабатывать за 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...

 

RainMan
Offline
Зарегистрирован: 21.06.2011

этот датчик тока при помещении в магнитное поле тоже начинает здорово менять свои показания.

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

точно это оптический. но ставить такой на велосипед бесполезно. забьется пылью и грязью 

а насчет здорово менять показания есть доказательства? я предложил датчик холла с компаратором. второй мне больше понравился. на нем есть и аналоговый и цифровой выход. можешь взять осциллограф и сравнить

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

RainMan
Offline
Зарегистрирован: 21.06.2011

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

компаратор сделан на компараторе))

ты не читаешь. там 2 выхода. с самого датчика аналоговый, и с компаратора цифровой. но лучше цифровой. его на прерывание можно повесить. а с аналогового надо сначала на ацп постоянно и при определенном уровне что то делать. странно но дело твое

RainMan
Offline
Зарегистрирован: 21.06.2011

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да кто мешает эту простейшую плату сделать на твоей. схема простейшая

RainMan
Offline
Зарегистрирован: 21.06.2011

jeka_tm пишет:

да кто мешает эту простейшую плату сделать на твоей. схема простейшая

более чем согласен

RainMan
Offline
Зарегистрирован: 21.06.2011

такой компаратор подойдет http://www.chipdip.ru/product/max942epa/ ?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да какой хочешь. хоть LM339

а не проще купить готовую плату. отладится. срисовать схему и т.д.?

RainMan
Offline
Зарегистрирован: 21.06.2011

ждать 3 недели не хочется

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну тогда погугли схему или сам. посмотри какие сигналы формирует датчик холла