Какой выбрать мк для ws2812b

valera0141
Offline
Зарегистрирован: 25.05.2017

Всем доброго времени суток. Имеется несколько светодиодных лент Суммарное количество светодиодов будет ~700 штук. Нужно реализовать контроллер управления. В наличии есть arduino nano, arduino mega, stm32f103. Изначально пробовал писать всё в среде разработки arduino. Но в случае с atmega328 и stm32 удалось зажечь около 600 светодиодов. Atmega2560 же спокойно завела 900 светодиодов (больше в наличии просто не было), но она будет избыточна в данном проекте. Пробовал писать на чистом c++ в atmel studio на atmega328, но количество светодиодов в итоге не смог увеличить. Какой мк можно использовать для данного проекта?

-NMi-
Offline
Зарегистрирован: 20.08.2018

64 или 128 мега.

rkit
Offline
Зарегистрирован: 23.11.2016

Количество светодиодов от МК не зависит совсем. Хоть миллионы можно зажечь, при правильном подходе.От МК зависит программа, которую ты не удосужился упомянуть.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну, вообще-то библиотеки, которые работают с ws2812, обычно используют, как не трудно догадаться, по 3 байта на светодиод. Ну а дальше - арифметику в школе проходили?

Ну а так: минимально, думаю Micro, но я бы предпочел stm32.

-NMi-
Offline
Зарегистрирован: 20.08.2018

valera0141 пишет:

Но в случае с atmega328 и stm32 удалось зажечь около 600 светодиодов.

Atmega2560 же спокойно завела 900 светодиодов (больше в наличии просто не было)

Кит, шо нипраснулсо? На один диод скока байт нужно? Пральна - ТРИ!    Употреби 600 НА_ТРОИХ - будет МАЛО!!!

rkit
Offline
Зарегистрирован: 23.11.2016

andriano пишет:

Ну, вообще-то библиотеки, которые работают с ws2812, обычно используют, как не трудно догадаться, по 3 байта на светодиод. Ну а дальше - арифметику в школе проходили?

Ну а так: минимально, думаю Micro, но я бы предпочел stm32.

Ну вообще-то не обязательно и даже нежелательно держать все светодиоды в памяти одновременно. Так что арифметика ни о чем.

valera0141
Offline
Зарегистрирован: 25.05.2017

Вот я и хотел на stm32 сделал. Использовал комплектную библиотеку из этого репозитория https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries. Не помню точное число. Если задать 400 светодиодов, то лента нормально светиться. Если задать 700, то прошивка собирается, но лента перестаёт реагировать. Я так понимаю, что дело всё в оптимизации кода. Но пока не соображу, куда копать

valera0141
Offline
Зарегистрирован: 25.05.2017

Для среды ардуино использовал либы от adafruit, fastled, alex gyver. На всех примерно один результат

nik182
Offline
Зарегистрирован: 04.05.2015

А если светодиодов 512 и 513 - работает?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

valera0141 пишет:

Вот я и хотел на stm32 сделал. Использовал комплектную библиотеку из этого репозитория https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries. Не помню точное число. Если задать 400 светодиодов, то лента нормально светиться. Если задать 700, то прошивка собирается, но лента перестаёт реагировать. Я так понимаю, что дело всё в оптимизации кода. Но пока не соображу, куда копать

Я бы в первую очередь начал копать в сторону применения более серьезного источника питания: 700 светодиодов могут потреблять более 40А. Ну и, само собой, грамотная разводка питания по ленте (не в одной точке).

valera0141
Offline
Зарегистрирован: 25.05.2017

Ленту питал от двух бп от компов (каждый по 350w, по 5в линии макс нагрузка 30А), разделив её на две части

b707
Offline
Зарегистрирован: 26.05.2017

valera0141 пишет:

Вот я и хотел на stm32 сделал. Использовал комплектную библиотеку из этого репозитория https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries. Не помню точное число. Если задать 400 светодиодов, то лента нормально светиться. Если задать 700, то прошивка собирается, но лента перестаёт реагировать. Я так понимаю, что дело всё в оптимизации кода. Но пока не соображу, куда копать

преобразователь уровней 3.3 -> 5в ставили? - для большого числа диодов нужен обязательно

а так на стм32 можно засветить, теоретически, 5-6 тыс диодов

valera0141
Offline
Зарегистрирован: 25.05.2017

Судя по описанию либы, лента на прямую цепляется на контакт. Я пробовал, она работает, но если задать больше значение светодиодов, то перестаёт реагировать. Я так понимаю, что из-за ограничений по spi интерфейсу. Там в библиотеке есть проверки на переполнение

b707
Offline
Зарегистрирован: 26.05.2017

valera0141 пишет:

Судя по описанию либы, лента на прямую цепляется на контакт. Я пробовал, она работает, но если задать больше значение светодиодов, то перестаёт реагировать. Я так понимаю, что из-за ограничений по spi интерфейсу. Там в библиотеке есть проверки на переполнение

где там проверка на переполнение, покажите. Переполнение чего?

У стм логический уровень 3.3в, а ленте нужно 5в. Пока диодов мало, уровня сигнала хватает., когда их много, напряжение падает. Поставьте преобразователь уровня, не спорьте.

valera0141
Offline
Зарегистрирован: 25.05.2017

Вот тут есть проверка на память

void WS2812B::updateLength(uint16_t n)
{
  if(doubleBuffer) 
  {
	  free(doubleBuffer); 
  }

  numBytes = (n<<3) + n + 2; // 9 encoded bytes per pixel. 1 byte empty peamble to fix issue with SPI MOSI and on byte at the end to clear down MOSI 
							// Note. (n<<3) +n is a fast way of doing n*9
  if((doubleBuffer = (uint8_t *)malloc(numBytes*2)))
  {
    numLEDs = n;	 
	pixels = doubleBuffer;
	// Only need to init the part of the double buffer which will be interacted with by the API e.g. setPixelColor
	*pixels=0;//clear the preamble byte
	*(pixels+numBytes-1)=0;// clear the post send cleardown byte.
	clear();// Set the encoded data to all encoded zeros 
  } 
  else 
  {
    numLEDs = numBytes = 0;
  }
}

Попробую ближе к вечеру собрать согласователь уровня и подцепиться с ним. А на каком транзисторе можно собрать, что порекомендуете?

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

B707, я читал, что ws2812 имеют на борту "восстановитель сигнала". Поэтому проблемы с ослаблением нет. Конвертор нужен только для того, чтобы первый пиксель правильно подхватил битстрим, далее они сами разбираются.

b707
Offline
Зарегистрирован: 26.05.2017

valera0141 пишет:

Вот тут есть проверка на память

у Stm32F103 на борту 20к оперативки, а для 700 диодов нужно всего 2100 байт. Так что эта проверка не при делах

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:
B707, я читал, что ws2812 имеют на борту "восстановитель сигнала". Поэтому проблемы с ослаблением нет. Конвертор нужен только для того, чтобы первый пиксель правильно подхватил битстрим, далее они сами разбираются.

тем не менее, личный опыт. Собирал клиенту матрицу с параллельным выводом на 4 ленты. Тестировали на Дуе и СТМ32. В обоих случаях на 30-60 диодах все работало, а начиная со 100 штук - нет. После уставновки конвертера уровней все завелось, прошивка не менялась

valera0141
Offline
Зарегистрирован: 25.05.2017

b707 пишет:

sadman41 пишет:
B707, я читал, что ws2812 имеют на борту "восстановитель сигнала". Поэтому проблемы с ослаблением нет. Конвертор нужен только для того, чтобы первый пиксель правильно подхватил битстрим, далее они сами разбираются.

тем не менее, личный опыт. Собирал клиенту матрицу с параллельным выводом на 4 ленты. Тестировали на Дуе и СТМ32. В обоих случаях на 30-60 диодах все работало, а начиная со 100 штук - нет. После уставновки конвертера уровней все завелось, прошивка не менялась

А на каком транзисторе собирали конвертер уровней? По интернету нашёл две схемы

rkit
Offline
Зарегистрирован: 23.11.2016

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

valera0141
Offline
Зарегистрирован: 25.05.2017

rkit пишет:

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

Вы имеете ввиду, что нужно по питанию на ногу +5 вольт ленты поставить диод

b707
Offline
Зарегистрирован: 26.05.2017

valera0141 пишет:

А на каком транзисторе собирали конвертер уровней?
 

брал готовый

rkit
Offline
Зарегистрирован: 23.11.2016

Что в слове "первый светодиод" не понятно? Первый. Светодиод.

valera0141
Offline
Зарегистрирован: 25.05.2017

valera0141 пишет:

Вот я и хотел на stm32 сделал. Использовал комплектную библиотеку из этого репозитория https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries ...

Сейчас подключил к stm32 всего один светодиод ws2812b. Открыл готовый пример из либы и зашил. Всё работает. Если указать количество светодиодов более 627, то светодиод перестаёт загораться.

b707
Offline
Зарегистрирован: 26.05.2017

valera0141 пишет:

Сейчас подключил к stm32 всего один светодиод ws2812b. Открыл готовый пример из либы и зашил. Всё работает. Если указать количество светодиодов более 627, то светодиод перестаёт загораться.

вспомнил.

если там используется SPi через DMA - то на каждый пиксель нужно толи 24, толи даже 48 байт

Возьмите библиотеку FastLED, она тоже работает с СТМ32 аддоном от кларка, но использует традиционные 3 байта на пиксель

valera0141
Offline
Зарегистрирован: 25.05.2017

b707 пишет:

valera0141 пишет:

Сейчас подключил к stm32 всего один светодиод ws2812b. Открыл готовый пример из либы и зашил. Всё работает. Если указать количество светодиодов более 627, то светодиод перестаёт загораться.

вспомнил.

если там используется SPi через DMA - то на каждый пиксель нужно толи 24, толи даже 48 байт

Возьмите библиотеку FastLED, она тоже работает с СТМ32 аддоном от кларка, но использует традиционные 3 байта на пиксель

Да, там как раз через DMA. А на счёт FastLed под стм32 не видел. Сейчас поищу по инету и попробую

b707
Offline
Зарегистрирован: 26.05.2017

valera0141 пишет:

Да, там как раз через DMA. А на счёт FastLed под стм32 не видел. Сейчас поищу по инету и попробую

кстати, у Кларка на форуме или в его блоге есть продвинутый вариант его же либы, где разбиение байтов на биты делается не заранее (когда под каждый бит отводится целый байт), а на лету.

Соответвенно памяти требуется не 24 бата, а опять же только 3 байта на пиксель.

Но ссылку сейчас не найду. поищите.

valera0141
Offline
Зарегистрирован: 25.05.2017

b707 пишет:

valera0141 пишет:

Сейчас подключил к stm32 всего один светодиод ws2812b. Открыл готовый пример из либы и зашил. Всё работает. Если указать количество светодиодов более 627, то светодиод перестаёт загораться.

вспомнил.

если там используется SPi через DMA - то на каждый пиксель нужно толи 24, толи даже 48 байт

Возьмите библиотеку FastLED, она тоже работает с СТМ32 аддоном от кларка, но использует традиционные 3 байта на пиксель

Нашёл, проверил. Спокойно 1000 светодиодов завелось. Всем большое спасибо за советы. Поразбираю эту либу для общего понимания

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

-NMi- пишет:

valera0141 пишет:

Но в случае с atmega328 и stm32 удалось зажечь около 600 светодиодов.

Atmega2560 же спокойно завела 900 светодиодов (больше в наличии просто не было)

Кит, шо нипраснулсо? На один диод скока байт нужно? Пральна - ТРИ!    Употреби 600 НА_ТРОИХ - будет МАЛО!!!

Так нехрен с пролетарской прямотой буферизировать все. И зазжеш хоть 100500 на любом МК.