Динамическая скважность ШИМ в каждом ипульсе

Чукча не читатель, чукча писатель?
Если Вы продолжаете утверждать, что это напоминает ШИМ, ответьте на вопросы, заданные в сообщении №3.

Для начала нужно понять, что к ШИМу это никакого отношения не имеет.
Пока Вы этого не поймете, дальше не продвинетесь.

Для начала сообщите, с каким именно контроллером Вы пытаетесь использовать прерывания. Надеюсь, не с Атмегой?

С ней самой, Atmega328 (Arduino Nano). В первом сообщении темы упоминается.

Да уж…
С третьего прочтения нашел.

2ТС: А ничего, что 16 МГц Атмеги не делятся нацело ни на 5 МГц (200 нс), ни на 1.67 МГц (600 нс)?
И еще: как при входе в прерывание, так и при выходе из него интенсивно используется стек. Поэтому максимальная частота вызова прерываний составляет порядка 110 кГц, что почти в 50 раз меньше, чем Вам нужно.
В общем, при таком подходе шансы на удачу равны нулю.

Не, парни… Ассемблер это совсем не мой конёк :frowning: :woozy_face: Я с ним общался только в 1988 году, когда диплом для Бурана писал и тогда мы с ним распрощались.

Обидно и досадно, что не выходит красиво написать, но куда деваться… Приведенный выше говнокод показывает, что в принципе Atmega328 справится с этой ленточкой. Да это будет говнокод с костылями, но для моей местячковой задачи проканает. 1000 светодиодов обработать займет что-то в районе 31.5 ms, - могу себе позволить потерпеть такие блокирующие куски кода.

Да и вряд ли кому-то еще будет интересен этот чип. Не каждый такой вот Плюшкин, чтоб откапывать пару тысяч мамонтов у себя в кладовке :wink: Разве что чисто теоретически и на перспективу добить этот код, чтоб потом где-то использовать, как болванку.

1000 диодов по 4,5 байта не лезут в 328ой ни как !!!

@BABOS у нас умеет “упаковывать” в 1-2 байта, так что нинада))

3 лайка

Мой код самой процедуры на ассемблере трогать не надо. Просто передавайте в неё массив данных из расчета 4,5 байта на диод. Тайминги очень похожи. Главное правильно формировать цвет точек в 36 битах…

Повторяйте последовательность FF F0 00 00 0F FF 00 00 00 и после вывода будет ясно какой цвет идет первым …

Потом 00 00 00 FF F0 00 00 0F FF - треттий цвет

1 лайк

Он одним цветом.

Что одним цветом? Кто одним цветом? Перед тем, как запускать что-то совсем цветное, надо хотя бы все 3 канала вкл/выкл в полную дурь. Не надо вводить в заблуждение аудиторию!

Согласен.

Лента в 1000 штук. Или в каком они виде у вас? Хотя это не принципиально.
Вот кстати неожиданно интересный цветовой визуал, при простой укладке ленты.



А можно мне показать, где сказано, что все 1000 диодов будут именно в памяти храниться?

Согласен. Делал без буфера. Своеобразно и интересно, правда раскритиковали меня знающие.
…Люди которые могут вне библиотеки уже обозначились.

Вот в таком вот виде

Это означает всего лишь то, что за 31.5 ms 1000 сферических коней добегут до конца вакуума.

Если это делать на ESP32 контроллере, то там как раз есть то, что тебе нужно: RMT. Там как раз можно задать, что такое 0 (например, 0 это HIGH 250ms, LOW 250ms, промодулировано 30кгц еще сверху, например), что такое 1 а затем послать эту цепочку битов. Можно вручную задать все уровни. Можно побайтно.

Я писал такой код для ESP32. Там этот RMT используется для IR Remote протокола, ну или чтобы генермировать сигнал, в котором меняется скважность или частота. Точность там, если память не изменяет, 12.5нс.

Минутка рекламы. в ESPShell конкретно твой пример будет выглядеть так:

Тик равен 100нс, все длины - в тиках

Это называется pulse distance encoding.

Используется, например, в IR протоколе от NEC да и много где еще. Есть библиотеки для Ардуины (не смотрел в них), есть контроллеры с аппаратной поддержкой этого чуда.

В “нормальных” контроллерах есть много способов как генерить сигнал ws2812. Подойдет практически любой последовательный протокол с настраиваемой частотой.
Для STM32 есть библиотека на основе интерфейса SPI. Для китайцев W80x - через I2S. Ещё мне попадалась реализация ws2812 через UART… не помню где.

Хотя… на любом быстром контроллере адресной лентой можно управлять просто ногодрыгом, причем прям на С/С++, без всякого ассемблера.

Вообще, полезно покопаться на гитхабе в исходниках Фастлед. Там столько разных вариантов. Не знаю, почему @Hamper не пошел этим путем.

1 лайк

Потому что увидел как там наследил дедушка Ассемблер. Испугался и убежал :rofl:

А чё Вы его так боитесь? У него тоже есть рога, за которые его вполне можно взять. Главное – не сдаваться и не убегать.

1 лайк

Согласен. Я бы вас попросил написать эту ассемблерную вставку, но у меня нет ни одного модуля-светодиода на этом чипе :frowning:
…И на али тоже нет в продаже этой экзотики, как не искал. Поэтому интерес останется неудовлетворённым.

Да, я бы и для ТС написал бы, если бы он внятно сформулировал ТЗ (без закидонов типа 1000 светодиодов на 328-ой атмеге), прислал бы мне ленту или плату с пятью-десятью распаянными светодиодами и согласился бы внести некую сумму, например, сюда, но так вопрос, по-моему, не стоит.