Gadgetnik & Porolon
Привет, короче, я тут нашел, как оживить старую клавиатуру 89-го года и сделать из нее тостер для стримов, который моргает в такт музыке — думаю, тебе будет интересно почитать про хак прошивки.
Круто, вот это номер! Интересно, какой микроконтроллер ты используешь и как ты заставляешь светодиоды реагировать на звук. Если поделишься прошивкой, гляну на систему тактирования и ШИМ, чтобы убедиться, что всё настроено достаточно точно для синхронизации с битами. Просто кинь спецификации платы и какие библиотеки ты использовал.
Конечно, друг. Это ESP32‑S3 на крошечной плате, которую я собрал в гараже, использую внутренний PLL на 32 МГц в качестве основного тактового генератора. Аудио-вход подключил к встроенному I2S, сделал простой кольцевой буфер, а затем подал сэмплы на 8-битный ШИМ на 16-пиновом разъёме, который управляет 12 RGB-светодиодами через драйвер WS2812. Вся эта штука работает на моей собственной библиотеке, которую я перелопатил, всего несколько сотен строк кода, которая преобразует RMS в целевой рабочий цикл с предвидением на 20 миллисекунд, чтобы избежать мерцания. Скажи, если тебе покажется, что частота дискретизации I2S в 80 кГц немного дергается или если GPIO нуждаются в дополнительной буферизации – я подкорректирую делители частоты. И, кстати, если будешь собирать это, прокладывай провода аккуратно – эти крошечные USB-порты не любят хаотичную массу проводов.
Привет. Частота I2S в 80 кГц для ESP32-S3 подойдет, фазовый генератор справится без дребезжания. Главное – обеспечить точную синхронизацию WS2812. Использование 8-битного ШИМ на GPIO, не входящем в высокоскоростной периферии, может увеличить задержку. Если слышишь щелчки, попробуй добавить последовательный резистор 470 Ом и конденсатор 100 нФ между линией светодиодов и первым светодиодом. Еще, увеличь размер кольцевого буфера до 2000 выборок – это даст библиотеке синхронизации по биту больше свободы. Для кабеля – бери короткий, прямой USB-UART кабель с отдельной линией заземления, чтобы питание было стабильным. Скажи, как выглядит мерцание светодиодов; помогу подстроить окно предпросмотра.
Спасибо, эта комбинация 470 Ом и 100 нФ просто спасение – эти жуткие всплывающие окна выскакивали при каждом высоком ноте. Я увеличил буфер до 2 килоома, теперь окно синхронизации имеет предпросмотр на 25 миллисекунд вместо 20 – работает как часы. Мерцание на последней полосе все еще немного подергивается, но это, наверное, из-за ограничения скорости GPIO; может, перекинешь линию светодиодов на высокоскоростной пин, если будет возможность переписать. И не забудь подключить этот короткий USB-to-UART кабель к отдельному земляному проводу – не решит мою проблему с кабелями, но хотя бы будет стабильно. Напиши, если новая настройка времени даст нужный ритм.
Вроде пока всё неплохо. Этот look-ahead в 25 миллисекунд даёт WS2812 больше запаса, но, скорее всего, этот рывок на последней ленте из-за того, что периферийные часы не справляются с частотой 800 кГц, требуемой WS2812. Если перекинешь линию данных на один из LED PWM выходов ESP32‑S3 – они работают на выделенном LEDC периферийном устройстве – подергание должно исчезнуть. Ещё следи за падением напряжения вдоль всей ленты; даже 12 светодиодов могут снизить напряжение на несколько милливольт, так что, если яркость начнёт меркнуть посередине, добавь небольшой регулятор 3.3V на задней панели PCB. Если нужна схема подключения LEDC – дай знать.