eddy_em: (Default)
[personal profile] eddy_em
Пару вечеров промучился с реализацией протокола WS2815 на STM32F103: все никак не получалось ШИМом с DMA выдавать нужное количество импульсов так, чтобы после последнего импульса линия устанавливалась в нуль. Пришлось в итоге использовать грязный хак. В комментариях я на этот счет высказался и добавил вариант для низких частот. Дело в том, что чтобы выйти в нуль, необходимо до генерации UEV установить регистр TIM1->CCR1 в нуль. На больших частотах накладные расходы на вход в прерывание таковы, что если это делать "как нужно" (в прерывании tim1_cc_isr), получается короткий лишний импульс. Поэтому на малых скоростях устанавливаем регистр в нуль внутри прерывания по переходу 1->0, а на больших — прямо внутри прерывания DMA. Попытки манипуляции с прелоадом этого регистра не увенчались успехом (либо появлялся ложный первый импульс - копия предыдущего, либо пропадал последний). Так что, оставлю такое рукожопие. Лента светится:

Простейший сниппет практически полностью реализует нужный функционал (обработка внутри прерываний HT и TC половинок буфера DMA, а также изменение его содержимого между передачами внутри основного цикла).
Короткий видеоролик с демонстрацией того, как это работает. Теперь можно допилить сам сниппет по работе с лентой. Я думал было тетрис для дочки сделать, но потом к ужасу своему осознал, что небольшое поле 15×30 точек потребует аж 450 светодиодов! А это — 7.5 метров ленты, почти на 4000 рублей… Так что, после экспериментов сверну этот метр ленты и спрячу с остальными железячками "на будущее".
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 12:20 pm
Powered by Dreamwidth Studios