STM Урок 142. WS2812B. Подключаем ленты количеством 150-300 светодиодов. Часть 3

 

 

 

В предыдущей части урока мы изменили код проекта под использование ленты на 150 светодиодов и проверили его на практике.

 

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

Закроем наш проект и сотворим теперь из него отдельный проект для 300 светодиодов (в папках Inc и Src теперь удалять ничего не надо, так как версия Cube MX остаётся та же) с именем WS2812_300.

Откроем проект в Cube MX, и, также ничего там не трогая, сгенерируем проект для Keil и откроем его там, также затем настроив программатор на авторезет и также подключив к дереву проекта файл ws2812.c.

Попробуем собрать проект.

Включим в розетку блок питания ленты, а также подключим к ПК программатор.

В файле ws2812.h изменим количество светодиодов в макросе

 

#define LED_COUNT 300

 

Теперь в файле ws2812.c изменим в функции ws2812_setValue количество итераций цикла

 

for(n=0;n<20;n++)

 

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

Поэтому начнём с первого, для этого в функции ws2812_test01 мы сначала переменной изменим тип

 

 

Затем прибавим количество итераций цикла

 

for(i=0;i<299;i++)

 

И добавим число бит

memcpy((void*)(BUF_DMA+48+7176),(void*)DMA_BUF_TEMP,48);

 

Соберём код, прошьём контроллер и посмотрим результат

 

 

Перейдём к следующему тесту — ws2812_test02.

В нем также изменим тип переменной i

 

 

И заменим количество итераций в двух местах

 

for(i=0;i<300;i++)

 

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

 

 

В следующем тесте — ws2812_test03 — мы также сначала меняем тип переменной

 

 

И также в двух местах меняем количество итераций

 

for(i=0;i<300;i++)

 

А ещё в двух местах добавим интервалов

 

if((i<15)||((i>=30)&&(i<45))||((i>=60)&&(i<75))||((i>=90)&&(i<105))||((i>=120)&&(i<135))

||((i>=150)&&(i<165))||((i>=180)&&(i<195))||((i>=210)&&(i<225))||((i>=240)&&(i<255))

||((i>=270)&&(i<285)) )

 

Проверим тест

 

 

 

Переходим к следующему — четвертому тесту — ws2812_test04.

Здесь мы меняем уже тип двух переменных

 

 

Добавим количество итераций здесь

 

for(j=0;j<20;j++)

 

здесь

 

for(jj=0;jj<300;jj++)

 

и здесь

 

for(i=0;i<299;i++)

 

Изменим также количество обрабатываемых битов

 

memcpy((void*)(BUF_DMA+48+7176),(void*)DMA_BUF_TEMP,48);

 

Всё! Тест готов. Можно проверить его со всеми вариантами аргументов

 

 

Всё прекрасно работает.

Следующий и последний пятый тест — ws2812_test05.

Изменим в нем также сначала тип переменной i

 

 

А затем добавим количество итераций цикла

 

for(i=0;i<300;i++)

 

А вот и результат

 

 

Всё! Проект на 300 светодиодов готов. К сожалению, невозможно передать всю красоту тестов в текстовой версии урока, поэтому обязательно смотрите видеоурок, там намного будет лучше, так как все тесты вы увидите в динамике (в движении).

А лучше всего, конечно будет, если вы сами соберёте проект, подключите ленту. Вот тогда вы ощутите реальную красоту.

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

 

В следующей части урока мы под готовим провод питания 220 вольт для нашей ленты и присоединим к нему колодку.

 

Предыдущая часть Программирование МК STM32 Следующая часть

 

Исходный код для ленты на 150 светодиодов

 

 

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Программатор недорогой можно купить здесь ST-Link V2

Светодиодные ленты 1м-5м 1м-5м 150-300 светодиодов Защита IP60-IP67 можно приобрести здесь WS2812B

Импульсный источник питания 5 В в 40A 200 Вт можно приобрести здесь 5 В в 40A 200 Вт

Логический анализатор 16 каналов можно приобрести здесь

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM WS2812B. Подключаем ленты количеством 150-300 светодиодов

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*