К1921ВГ015 общее
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
Re: К1921ВГ015 общее
Да понятное дело, что есть. Вам нужен только OpenOCD и сам JTAG. Предлагаю скачать мой самосбор, после чего посмотреть, что лежит у меня в папке Flash. А в ней найдите openocd.cfg и отредактируйте по своим потребностям. А потом просто запускаете openocd.exe и смотрите результат.
-
RabidRabbit
- Сообщения: 136
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: К1921ВГ015 общее
Например, так:
Код: Выделить всё
python3 ../tools/k1921vg015_uploader.py --run-openocd --openocd-host=127.0.0.1 --adapter-speed=500 --openocd-exec=openocd --openocd-interface=/usr/share/openocd/scripts/interface/jlink.cfg --openocd-target=../tools/k1921vg015.cfg --boot-mode=flash ./loader.bin-
Egor Zhorov
- Сообщения: 1
- Зарегистрирован: 25 мар 2026, 13:20
- Предприятие: ООО "Эликс Базис"
Re: К1921ВГ015 общее
Добрый день, форумчане и админы!
Мне понадобилось научиться управлять адресными светодиодами типа WS2812 с использованием К1921ВГ015. С установкой синтакора как-то не задалось (скачанные по инструкции архивы не соответствовали описанию из инструкции), потому разработку я веду в VS-Code + PlatformIO + Platform-VG015* (адаптация родного SDK для использования в PlatformIO) (по инструкции на сайте электроника-и-программирование**).
Для управления светодиодами я использую TMR1_OUT1 на пине B9. TMR1 настроен на тактирование от системного источника 50 МГц без делителей. По прерыванию от CAPCOM[0] на пине устанавливается высокий логический уровень, по прерыванию от CAPCOM[1] устанавливается низкий уровень. По прерыванию от TMR1 идёт обращение к DMA, который устанавливает в CAPCOM[1].VAL следующее значение.
Периодически у меня возникают непонятки с работой DMA. Некоторые передачи устанавливают в CAPCOM[1].VAL некорректное значение, из-за чего работа всех светодиодов идёт наперекосяк (будто у них начинается истерика). На осциллографе это выглядит, как будто CAPCOM[1] просто пропустил своё срабатывание, и пин остаётся на высоком уровне. Получается так, что импульсы склеиваются и вся оставшаяся часть посылки сдвигается на 1 бит. При этом изменения в коде, мало связанные с работой DMA и таймера (например, добавление printf перед формированием и отправкой данных в светодиоды или изменение тайминга) приводят либо к исправлению этой проблемы, либо к её возвращению. Обратите внимание на строки 192 и 296 в src/main.c, эти места можно трогать и будет меняться поведение. В строке 18 можно менять количество светодиодов, в строках 208-210 можно менять параметры отправляемого сигнала. Если я правильно понимаю, main.c можно подсунуть в проект на синтакоре, поскольку ничего стороннего, кроме родного SDK, я не использовал.
Проект - в архиве. Видео с поведением светодиодов и осциллограммами - в папке videos. На осциллограммах можно смотреть на +Pulses снизу слева, по нему хорошо видно как склеиваются импульсы. Спасити-памагити!
Архив с проектом и видео можно найти тут - https://disk.yandex.ru/d/mBI36UohviReRQ
* - https://gitflic.ru/project/binome/platform-vg015
** - https://электроника-и-программирование. ... ormio.html
Мне понадобилось научиться управлять адресными светодиодами типа WS2812 с использованием К1921ВГ015. С установкой синтакора как-то не задалось (скачанные по инструкции архивы не соответствовали описанию из инструкции), потому разработку я веду в VS-Code + PlatformIO + Platform-VG015* (адаптация родного SDK для использования в PlatformIO) (по инструкции на сайте электроника-и-программирование**).
Для управления светодиодами я использую TMR1_OUT1 на пине B9. TMR1 настроен на тактирование от системного источника 50 МГц без делителей. По прерыванию от CAPCOM[0] на пине устанавливается высокий логический уровень, по прерыванию от CAPCOM[1] устанавливается низкий уровень. По прерыванию от TMR1 идёт обращение к DMA, который устанавливает в CAPCOM[1].VAL следующее значение.
Периодически у меня возникают непонятки с работой DMA. Некоторые передачи устанавливают в CAPCOM[1].VAL некорректное значение, из-за чего работа всех светодиодов идёт наперекосяк (будто у них начинается истерика). На осциллографе это выглядит, как будто CAPCOM[1] просто пропустил своё срабатывание, и пин остаётся на высоком уровне. Получается так, что импульсы склеиваются и вся оставшаяся часть посылки сдвигается на 1 бит. При этом изменения в коде, мало связанные с работой DMA и таймера (например, добавление printf перед формированием и отправкой данных в светодиоды или изменение тайминга) приводят либо к исправлению этой проблемы, либо к её возвращению. Обратите внимание на строки 192 и 296 в src/main.c, эти места можно трогать и будет меняться поведение. В строке 18 можно менять количество светодиодов, в строках 208-210 можно менять параметры отправляемого сигнала. Если я правильно понимаю, main.c можно подсунуть в проект на синтакоре, поскольку ничего стороннего, кроме родного SDK, я не использовал.
Проект - в архиве. Видео с поведением светодиодов и осциллограммами - в папке videos. На осциллограммах можно смотреть на +Pulses снизу слева, по нему хорошо видно как склеиваются импульсы. Спасити-памагити!
Архив с проектом и видео можно найти тут - https://disk.yandex.ru/d/mBI36UohviReRQ
* - https://gitflic.ru/project/binome/platform-vg015
** - https://электроника-и-программирование. ... ormio.html
-
RabidRabbit
- Сообщения: 136
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: К1921ВГ015 общее
Есть рабочие примеры, для SPI (https://gitflic.ru/project/rabidrabbit/ ... ex_ledsrgb) и для UART (https://gitflic.ru/project/rabidrabbit/ ... _ledsrgb_2), в случае с UART необходим инвертор между выходом UART и WS2812.Egor Zhorov писал(а): ↑25 мар 2026, 13:46 Мне понадобилось научиться управлять адресными светодиодами типа WS2812
Ваш проект посмотрю.
-
RabidRabbit
- Сообщения: 136
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: К1921ВГ015 общее
У Вас просто иногда не успевает DMA, т.к. для передачи бита "0" используется 16 "тиков" системной тактовой частоты в 50 МГц.Egor Zhorov писал(а): ↑25 мар 2026, 13:46 Для управления светодиодами я использую TMR1_OUT1 на пине B9. TMR1 настроен на тактирование от системного источника 50 МГц без делителей. По прерыванию от CAPCOM[0] на пине устанавливается высокий логический уровень, по прерыванию от CAPCOM[1] устанавливается низкий уровень. По прерыванию от TMR1 идёт обращение к DMA, который устанавливает в CAPCOM[1].VAL следующее значение.
Код: Выделить всё
RMT_ticks_buffer[i*8+j] = ((tx_buf[i]>>(7-j)) & 1) ? 47 : 15;Либо переходите на "аппаратные" интерфейсы, примеры выше
-
RabidRabbit
- Сообщения: 136
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: К1921ВГ015 общее
Ещё вот такая заметка:Egor Zhorov писал(а): ↑25 мар 2026, 13:46 Для управления светодиодами я использую TMR1_OUT1 на пине B9. TMR1 настроен на тактирование от системного источника 50 МГц без делителей. По прерыванию от CAPCOM[0] на пине устанавливается высокий логический уровень, по прерыванию от CAPCOM[1] устанавливается низкий уровень. По прерыванию от TMR1 идёт обращение к DMA, который устанавливает в CAPCOM[1].VAL следующее значение.
Код: Выделить всё
bool RMT_is_bisy = 0;Код: Выделить всё
volatile bool RMT_is_bisy = 0;