Библиотека для адресных RGB лент STM32

  Рет қаралды 6,292

Crazy Geeks

Crazy Geeks

Күн бұрын

Эффективный драйвер (библиотека) для адресных светодиодных лент для STM32.
Рациональное использование памяти с DMA.
Поддерживаются чипы: WS2812(b), WS2811, WS2813, SK6812 и другие.
________
ТЕКСТОВОЕ ОПИСАНИЕ: crazygeeks.ru/stm32-argb-lib
________
Сайт: crazygeeks.ru/
Хабр: habr.com/ru/users/yasnolesski...
Telegram: t.me/crazy_geeks
VK: crazy_geeks
Insta: / crazygeeks.ru
Почта: sd@crazygeeks.ru
________
Таймкоды:
00:00 Вступление
00:28 Описание протокола адресных
01:16 Организация протокола
02:11 Описание работы таймера в STM32
05:21 Управление таймером
08:00 Преобразование логики
09:46 Режим Open Drain
11:37 Однобитный транслятор логики
12:27 Подключение библиотеки в CLion
16:14 Описание функций
18:03 Написание примера и подключение
19:20 Демонстрация работы
19:36 Заключение
________
#STM32 #библиотека #адреска #WS2812 #ARGB

Пікірлер: 85
@artvk8294
@artvk8294 Жыл бұрын
Спасибо! Подписался. Качество изложения и представленных материалов, на мой взгляд, лучшее из просмотренных мной. Хотел сделать что-то для управления argb "на коленке", а здесь уже все есть на 99%).
@AlexZjustLetter-NotWar
@AlexZjustLetter-NotWar Жыл бұрын
ВПН пашет, теперь можно посмотреть про работу лампочек) очень доходчиво, спасибо, буду разбираться дальше
@tupoy_ytub_uberi_psevdonim
@tupoy_ytub_uberi_psevdonim Жыл бұрын
Ты лучший просто, мне так повезло найти кого то у кого то же f401-ый.
@artsiomkazlouski5127
@artsiomkazlouski5127 Ай бұрын
Очень интересно… но посмотрю потом)
@SloRez118
@SloRez118 2 жыл бұрын
Спасибо за видео! Сделай видео про виртуальные таймеры.
@easystm6865
@easystm6865 2 жыл бұрын
Интересно, подпишусь
@ArthurIslamRU
@ArthurIslamRU 2 жыл бұрын
Красавчик
@ptaengineering5317
@ptaengineering5317 Жыл бұрын
Супер! Спасибо тебе за твой труд! Подскажи, а на плате STM32F 102C8T6 на какой пин подключать ?
@CrazyGeeks
@CrazyGeeks Жыл бұрын
Какой выставлен в кубике, на тот и подключать, разницы то нет )
@edba7410
@edba7410 9 ай бұрын
Пытался повторить по видео, для stm32f103c8t6, но у меня почему-то нет файлов проекте CMakeLists.txt, CMakeLists_template.txt и ещё нескольких. Можете подсказать, где что нужно установить, чтобы они сгенерировались?
@mexanik240
@mexanik240 Жыл бұрын
Добрый день. Пробую запустить на STM32F030. Вроде все по инструкции сделал но генерации нету. Эту библиотеку на такой камень можно натянуть?
@user-vr1gx2mi7w
@user-vr1gx2mi7w 4 ай бұрын
Подписался. У меня C++ головного мозга. Оберну-ка я драйвер в класс.
@kostiantynhordii3244
@kostiantynhordii3244 Ай бұрын
День добрый. Решил повторить ваш проект, установил все, прошел по инструкции, но почему-то период тактов на ленту не 1,25 а 5 us. Можете подсказать в чем дело? Или хотя бы где искать проблему?) nucleo-l476rg
@sergey705
@sergey705 Жыл бұрын
Спасибо за либку. Как раз проверил на ней G030K6T6 с али. Единственный непонятный момент - линейка 8 светодиодов, дефайн NUM_PIXELS ставлю 8 - работает только 2 диода, ставлю 32 - работают все 8
@CrazyGeeks
@CrazyGeeks Жыл бұрын
Да, там есть некоторое количество багов, например при определённом количестве диодов цепочка зацикливается и не останавливается На разных камнях разные шины - поэтому автоподбор клоков не работает - не было возможности проверить это всё прям везде Пока просто нет времени чинить, но это обязательно случится )) А с количеством - может ошибка с размером ячейки у дма
@sergey705
@sergey705 Жыл бұрын
@@CrazyGeeks косяк был найден. В настройках таймера (дма) сначала сделал как на сайте - длина данных: периферия - слово, память - байт. Поставил слово-слово (как в этом видео) и все заработало ) Правда с примером змейки (из видео) с задержкой в 1 мс чуть эпилепсию не словил
@Scherbakov
@Scherbakov 2 жыл бұрын
👍
@user-pe4jc1oe3s
@user-pe4jc1oe3s Жыл бұрын
Отлично мне интересноэ, а ты можешь более научно или подробнее обьяснить просто тяжело термины понимать которые впервый раз слышишь, не именно этот ролик а вообще, собрался учится на stm программировать понимать бы мне как новичку, Ардуино я почти прошел все курсы Алекса Гайвера, начать бы как то stm чик
@v0lm0ntg
@v0lm0ntg Жыл бұрын
Интересная ситуация. На Nucleo F446, таймер не останавливается, молотит без остановки вечность ( с любой конфигурацией DMA и разным количеством диодов ).
@CrazyGeeks
@CrazyGeeks Жыл бұрын
Да, там действительно косяк есть такой, ещё встречается и на других камнях Там на определённом количестве диодов таймер тоже не останавливается Я кажется пытался починить эту проблему, но ничего не вышло Пока ещё собираю обратную связь, пока нет времени на починку, особенно не всплывает пока никаких проектов, чтоб целенаправленно починить Я в основном всё на F103 и F401 тестил, так что на других сериях могут проблемы вылезать, да Но в какой-то момент это случится ) Даже были потуги в многоканальную передачу, возможно оно увидит опен-сурс
@user-yt4mh2xg9r
@user-yt4mh2xg9r Жыл бұрын
12:47 - это скорее всего блэкпил. Блю на f103.
@paulokaydan
@paulokaydan 10 ай бұрын
привет. подскажи пожалуйста какой можно взять найменьший по габаритам микроконтроллер, который бы справился с адресной лентой и при этом не был слишком избыточньім в плане своей производительности?
@CrazyGeeks
@CrazyGeeks 10 ай бұрын
ну можно в сторону G0 посмотреть, ядро М0 должно всё потянуть
@drollery6399
@drollery6399 Жыл бұрын
В Атмегах есть SPI, обрезаешь входной провод, и кидаешь в регистр по 8 бит. Работает на частоте 800КГц спокойно. По прерыванию, от SPI. Код основной крутится, не замечая прерывание. Не надо грязи, на эти МК лить. С этим ОМНОМ они справяться. Для этого и сделаны. STM32 нужны эхолоты делать(где экран только отнимет половину мощности), автомобильные блоки управления вполне для STM работа, медицинские приборы, и другое сложное оборудование(промышленное). Рулить лентой с помощью STM это забивать гвозди, микроскопом. В принципе можно, но так по дурацки. Хотя для начинающих самое оно, как пример. Но не надо при этом невзначай кидать какашки на Атмеги 🙂 По ходу так сказать, для красного словца.
@CrazyGeeks
@CrazyGeeks Жыл бұрын
Я долго думал, что ответить, но вот созрел Тут встаёт ключевой вопрос о том, как эти прерывания блокируют выполнение кода, ведь в Cortex-M есть DMA всё таки, который позволяет "вкинуть пачку данных и забыть" Да и занимать целый SPI в камнях с малым количеством выводов это очень расточительно Про автомобильные блоки и медицинские устройства тоже не согласен. Сравните количество и разнообразие периферии просто. В AVR её считай нет На что-то простое мне например проще F0 повесить, потому что AVR-GCC я не изучал, на ардуино мне писать зашкварно, на стм мне задачу решить быстрее. А по производительности F0 будет едва быстрее 328 меги Не говоря уже о том, что атмега сейчас местами тупо дороже, чем F0/L0 Естественно использовать ARM исключительно для отрисовки адрески это бред. Но кто говорит про использование в самостоятельном виде? Открою секрет: та адреска, что у меня висит за спиной в новостных роликах, управляется ардуинкой. Потому что ничего другого от неё и не нужно, мне дешевле по времени перед записью накидать цвета и прошить, чем изобретать свой контроллер на стм. Вот у меня есть устройство, под которое эта библиотека и разрабатывалась: Там и 2 USB: один Host, другой Device (на UART я проприетарный протокол городить не хочу), всё это общается по SPI с ESP32, по SDIO с SD-картой, и т.д. Для другого коммерческого устройства готовлю многоканальный вариант (16 и более каналов адрески) Прошлой зимой ко мне заказчик пришёл, дал задачку на портирование arduino-прошивки на STM, с добавлением доп. функционала Потому что AVR это такая вещь, что по-отдельности всё работает, а всё вместе - нет. Я так же к STM и пришёл. У меня на 32u4 тупо не работала связка USB + USB Host Shield (MAX3421E) + Адреска + ESP32 Вот и все доводы
@user-tx8om1kg1q
@user-tx8om1kg1q 7 ай бұрын
а что делать если я уперся в динамическую память? мне нужно рулить 720-ю светодиодами при помощи arduino nano. это 5 метров ленты (144 ЛЕДа на метр).
@SevenNightdreemVeryPavlovny
@SevenNightdreemVeryPavlovny 3 ай бұрын
Внезапно STM ещё и дешевле получается, а дма канал это вообще песня, повесил на него что надо и переключай контекст. Огромная разгрузка ядра
@janedoe6182
@janedoe6182 5 ай бұрын
Почему подтягивающий резистор, а не пуш-пулл режим? Адресная лента отлично работатет от импульсов амплитудой 3.3В
@CrazyGeeks
@CrazyGeeks 5 ай бұрын
Обычно МК питается от дохлых ЛДО, которые дают 3.0 Вольта и ниже. А лента питается от БП 5.1 Вольта, например. Вот и выходит, что логика совершенно не согласуется
@janedoe6182
@janedoe6182 5 ай бұрын
@@CrazyGeeks А что за ЛДО такие? Вот у меня NodeMCU, питается через USB от длиинного провода, на котором теряется 0.5 вольта. Потом LDO HT7333 делает из 4.5 вольт 3.3, и питает ESP, который кушает до 450мА в моменты передачи по Wi-Fi. И лента подключена без подтяжки, а просто через килоомный резистор, чтобы вывод случайно не пожечь. И все работает. Я думаю, если ты эту свою подтяжку уберешь, у тебя тоже заработает. Ну а если LDO из 5 вольт 3.3 не может сделать, то это не подтяжки надо, а LDO менять.
@vernnms78
@vernnms78 Жыл бұрын
Несправедливо: у умных настоящих инженеров каналы с мизерными подписками.
@levik91111
@levik91111 Жыл бұрын
Спасибо, может душню, но ошибочка в расчете, в блоке где про частоту. 72 000 000 / 800 000 - должно быть
@CrazyGeeks
@CrazyGeeks Жыл бұрын
На 800, да Ну, что уж теперь
@levik91111
@levik91111 Жыл бұрын
@@CrazyGeeks да так просто написал, что б кто еще только разбирается голову не ломал почему у него не сходится)
@tupoy_ytub_uberi_psevdonim
@tupoy_ytub_uberi_psevdonim Жыл бұрын
Все завелось после того как я пересчитал для таймера число сброса, у меня вышло 105-1 при частоте 84 МГц. В видео я не увидел этот момент но прочитал из оригинальной статьи англоязычной. Функции заполнения ленты придумаю как нибудь уже сам.
@CrazyGeeks
@CrazyGeeks Жыл бұрын
Странно, должно само считаться
@tupoy_ytub_uberi_psevdonim
@tupoy_ytub_uberi_psevdonim Жыл бұрын
@@CrazyGeeks главное работает и я понял как переносить библиотеку на разные микроконтроллеры STM. Вот жаль пока не очень понял принцип работы DMA и переключение между буферами. Довольно сложно осмыслить)
@tarasbarbos9035
@tarasbarbos9035 Жыл бұрын
Всё чудесно, но неясно чем таймеры в AVR не подходят. А, и ещё, что за гамма-коррекция такая? Публика жаждет подробностей :)
@CrazyGeeks
@CrazyGeeks Жыл бұрын
В AVR нет DMA) Вот и всё) А гамма-коррекция должна как-то цвета подстраивать, не я реализовывал, поэтому сказать ничего не могу
@user-og9fp4es5h
@user-og9fp4es5h Жыл бұрын
ситуация такая есть гироскутерный контроллер, прошивка+пароль от нее, как клонировать эту прошивку, чтобы записать на другой контроллер. Прошивка меняется при вводе пароля(думаю что защита от копирования есть
@CrazyGeeks
@CrazyGeeks Жыл бұрын
А что за контроллер? Какая микросхема стоит?
@user-og9fp4es5h
@user-og9fp4es5h Жыл бұрын
@@CrazyGeeks stm32f103rct6
@user-og9fp4es5h
@user-og9fp4es5h Жыл бұрын
То есть до ввода пароля я спокойно могу клонировать прошивку, как только ввожу пароль, на прошивке разблокируются некоторые нужные функции, но прошивка уходит в защиту от копирования
@user-og9fp4es5h
@user-og9fp4es5h Жыл бұрын
@@CrazyGeeks есть какие нибудь мысли у вас?
@CrazyGeeks
@CrazyGeeks Жыл бұрын
Ну это пароль верхнего уровня скорее, на самой прошивке СТМ пароля быть не может Напишите мне в ЛС в ВК, так удобнее будет) vk.me/crazy_geeks
@olegafanasiev9959
@olegafanasiev9959 Жыл бұрын
Все сделал так, как в видео. Плата stm32f102c8t6 отладочная. Сколько таймеры не менял, полная тишина(( Осцилогр молчит. использовал в тч и ножку PB10 T2ch3 (FT). Тишина. в чем может быть дело ? (файлы библиотеки кидал в core\inc и core\Src\ соответственно напрямую) дебажится без ошибок. К +5 подтягивал.
@CrazyGeeks
@CrazyGeeks Жыл бұрын
Что отладка программы говорит?
@olegafanasiev9959
@olegafanasiev9959 Жыл бұрын
@@CrazyGeeks знать бы, куда там смотреть еще, в отладке) я только могу ошибки посмотреть, их нет...
@tupoy_ytub_uberi_psevdonim
@tupoy_ytub_uberi_psevdonim Жыл бұрын
PS осциллограф вообще ничего не видит на выходе ШИМ. Я использовал режим PUSH PULL для тестов.
@CrazyGeeks
@CrazyGeeks Жыл бұрын
А ножка точно та? Скорость ножки какая стоит?
@tupoy_ytub_uberi_psevdonim
@tupoy_ytub_uberi_psevdonim Жыл бұрын
@@CrazyGeeks Тактирования? Максимальная стоит. А таймер настроен на 800 КГц, светодиоды исправно ловят команды. У меня осциллограф цифровой по юсб и он несколько глючный, часто тормозит так сильно, что по 5 секунд обновляется поле с осциллограммой. Я уже думаю он просто сломался.
@CrazyGeeks
@CrazyGeeks Жыл бұрын
Ну вот в осциллографе скорее всего дело Если как я понимаю у вас всё работает
@olegafanasiev9959
@olegafanasiev9959 Жыл бұрын
PUSH PULL ? а Open drain не работал ?
@sergbo3114
@sergbo3114 3 ай бұрын
Не знаю у меня это работает на плис. В плисине есть память и она 30 раз в секунду обновляет данные из своей памяти. А уже в плис льешь из МК когда тебе хочется. Хоть одним пикселем, хоть сразу всей матрицой. Как по мне эта задача слишком тупая для МК.
@redtex
@redtex 2 жыл бұрын
Откуда адреса у сдвиговых регистров?
@CrazyGeeks
@CrazyGeeks 2 жыл бұрын
Как таковых адресов ж нет Адреса мнимые, потому что сигнал по цепочке последовательно передаётся 1 диод имеет мнимый адрес 1, 2ой мнимый 2, и т.д. Я думал, что это слишком очевидно, чтоб пояснять в ролике)
@redtex
@redtex 2 жыл бұрын
@@CrazyGeeks Сдвиговые регистры имеют каскадное включение. У каскада есть только номер каскада и отношение к другому как младшему или старшему.
@sozdatelEd
@sozdatelEd 2 жыл бұрын
О чем будет канал? Что в будущем?
@CrazyGeeks
@CrazyGeeks 2 жыл бұрын
Всё так же об embedded. STM32 и прочая электроника Пока переношу статьи с сайта в видеоформат, дальше думаю и над другими форматами
@sozdatelEd
@sozdatelEd 2 жыл бұрын
@@CrazyGeeks embedded очень разросся. Может возможно обозначить направления по которым будут материалы? Или рассказать какие устройства будут разобраны в будущих видеороликах?
@CrazyGeeks
@CrazyGeeks 2 жыл бұрын
@@sozdatelEd мне интересны Cortex-M. В первую очередь STM32, но и другие серии тоже: GD32, Миландр, NXP и прочее Пощупать хочется ПЛИС, Cortex-A, MIPS, и другое Пока ресурсов и компетенций таких просто нет, но всё впереди)
@sozdatelEd
@sozdatelEd 2 жыл бұрын
@@CrazyGeeks ясненько. Будем посмотреть
@USER-ruzer2000
@USER-ruzer2000 2 жыл бұрын
Ребят, есть вменяемая литература на РУССКОМ ЯЗЫКЕ по описанию стм32, а именно регистров, функций, команд, описании HAL LL CMSIS ?
@redtex
@redtex 2 жыл бұрын
Переведёшь - будет.
@USER-ruzer2000
@USER-ruzer2000 2 жыл бұрын
@@redtex ладно, а что тогда по английски посоветуете?
@redtex
@redtex 2 жыл бұрын
@@USER-ruzer2000 Найди канл Vladimir Medintsev, там посоветуют.
@USER-ruzer2000
@USER-ruzer2000 2 жыл бұрын
@@redtex Я в его телеграмканале спрашивал. Не ответили. Ситуация как с мужем при неверной жене, все вокруг знают, но ему никто не скажет.
@CrazyGeeks
@CrazyGeeks 2 жыл бұрын
Универсальной литературы, панацеи по всем вопросам нет. Ну либо я про такое не в курсе Есть например Mastering STM32, которую перевели, можно с неё начать, она по HAL Пока твёрдой уверенности с HAL не будет - глубже будет больно лезть Всё остальное в AppNotes да в Programming Manual-ах прописано, все они лежат на сайте ST у каждого камня в разделе "Documentation" Некоторые переводят, надо по номерам искать Какие-то учебные материалы, подборки литературы есть у моего товарища Олега Волкова kzfaq.info/love/zZKTNVpcMSALU57G1THoVw Другие каналы и ресурсы я у себя в статье указывал crazygeeks.ru/ardu-to-stm32/#%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8 Сам я не по литературе учился, а на реальных задачах, всю инфу порционно, по требованию изучал, либо интуитивно, методом тыка
@ciklomat
@ciklomat 3 ай бұрын
Очень странная реализация использовать байт для отправки одного бита. Шим с переменным заполнением может решить проблему быстрее и проще. 300 байт озу на 100 светодиодов
@CrazyGeeks
@CrazyGeeks 3 ай бұрын
Это и есть шим с переменным заполнением. 300 байт - откуда такая цифра? Протокол 24-битный, значит на каждый диод нужно 24 разных скважности. Для разгрузки процессорного времени используется DMA, который берёт 32-битные указатели, значит на каждый диод будет 24*4 = 96 байт Итого на 100 светодиодов выйдет 9.600 байт Применённый подход с прерываниями по половинкам DMA отправки позволяет как раз использовать 300 байт на массив цвета, плюс 48*4 = 192 байта на буфер скважностей
@gin87100
@gin87100 Жыл бұрын
Не заработало. Нужно плясать с бубном. и что за функция void main(void) ? Откуда ее вызывать?
@CrazyGeeks
@CrazyGeeks Жыл бұрын
а какой МК у вас? на разных сериях по-разному немного всё работает, так что надо вот это для начала понять void main(void) это ни что иное как главный цикл в примере он просто для наглядности обозначен
@gin87100
@gin87100 Жыл бұрын
@@CrazyGeeks камень c8t6. Главная функция обычно int main(void). Что значит не возвращаемая. А главный цикл while(1){}
@Saurelius
@Saurelius 6 ай бұрын
@@gin87100 Обычно функция main() при выплнении программы в среде ос возвращает код завершения, который явлеятся целым числом, по этому указан тип int. В случае с МК возвращать код ни к чему - программа одна, отчитываться не кому. Потому и void, что ничего не возвращает и return не используется.
@svbHiTek
@svbHiTek 8 ай бұрын
Почисти систему охлаждения ноута, а то у тебя проц в 100 долбится.
@FJHCJCJCJHCHFHFJJFJCFJ
@FJHCJCJCJHCHFHFJJFJCFJ Жыл бұрын
Для ЛГБТ лент😂
@ptaengineering5317
@ptaengineering5317 Жыл бұрын
Вот такая ошибка при дебаге, я нуб, не понимаю куда копать.... 'RCC_CFGR_PPRE2' undeclared (first use in this function); did you mean 'RCC_D1CFGR_HPRE'? ARGB.c /h750_test/Core/Src line 140 C/C++ Problem
@CrazyGeeks
@CrazyGeeks Жыл бұрын
это у вас проц H750? там вероятно другая система тактирования можно попробовать заменить на то, что он предлагает
@ptaengineering5317
@ptaengineering5317 Жыл бұрын
@@CrazyGeeks заменил, ошибка компилятора пропала, но - сигнал вообще не формируется ни при pul&push ни при opendrain. Хотя, на stm32f103 все завелось супер. В чем может быть дело ?
@CrazyGeeks
@CrazyGeeks Жыл бұрын
@@ptaengineering5317 А прерывания по DMA прилетают?
@ptaengineering5317
@ptaengineering5317 Жыл бұрын
@@CrazyGeeks Спасибо, все завелось ! Подскажи, у меня после ПИНа стоит мосфет (н- канальный), он инвертирует сигнал, в каком месте библиотеке мне нужно поравить, что бы инвертировать сигнал ?
@edba7410
@edba7410 9 ай бұрын
@@ptaengineering5317 А можно для stm32f103 куда-нибудь исходники выложить. А то пытался по видео делать, но у меня почему-то не все файлы в проекте присутствуют. Нет файлов CMakeLists.txt, CMakeLists_template.txt и ещё нескольких. И не пойму, где что нужно указать, чтобы они сгенерировались.
Do you have a friend like this? 🤣#shorts
00:12
dednahype
Рет қаралды 57 МЛН
A pack of chips with a surprise 🤣😍❤️ #demariki
00:14
Demariki
Рет қаралды 9 МЛН
Can you beat this impossible game?
00:13
LOL
Рет қаралды 58 МЛН
ESP32 и Matter. Скоро на канале!
0:30
Crazy Geeks
Рет қаралды 1,6 М.
Изучаю STM32!
20:26
Лёша Кластер
Рет қаралды 188 М.
How to transfer fiber optics and the Internet in the apartment #rkd 5 series
8:26
Студия дизайна Haarchitect
Рет қаралды 22 М.
STM32. C чего начать? Быстрый старт после Arduino.
13:08
PT4115 - лучший LED драйвер?
12:13
Заметки Ардуинщика
Рет қаралды 132 М.
iPhone 12 socket cleaning #fixit
0:30
Tamar DB (mt)
Рет қаралды 21 МЛН
Main filter..
0:15
CikoYt
Рет қаралды 1 МЛН
Carregando telefone com carregador cortado
1:01
Andcarli
Рет қаралды 2,3 МЛН