Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр 2D-аркадный рогалик о подземных раскопках! Разрушайте блоки в погоне за сокровищами, улучшайте свой бур и развивайте навыки. Выполняйте задания, соревнуйтесь с друзьями и докажите, что вы — самый лучший искатель сокровищ!

Бурить-копать

Аркады, Мидкорные, 2D

Играть

Топ прошлой недели

  • AlexKud AlexKud 35 постов
  • Animalrescueed Animalrescueed 52 поста
  • Webstrannik1 Webstrannik1 50 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
13
SCratORS
SCratORS
7 лет назад

Светомузыка с Arduino. Сезон 2 Часть 1⁠⁠

В прошлых частях я собрал устройство светомузыки для LPT. По факту это было устройство оптической развязки параллельного интерфейса от силовой нагрузки, назовём его УОРПИ. Да, при помощи его можно устроить светомузыку используя в качестве подачи сигнала LPT порт, а управление сигналом при помощи программы. В этой части я хочу поговорить о применении микроконтроллера для управления, а именно приём входного сигнала, разложение его на частоты и вывод в параллельный интерфейс УОРПИ.

Эта часть будет больше техническая и немного о программировании и решении вопросов в работе.

Итак, моё устройство должно уметь принимать входной сигнал и раскладывать его на частоты. Почитав гугл находим массу статей и прочего про библиотечку БПФ (Быстрое преобразование Фурье) и что с ней всё должно работать, НО тут же находим такую штуку как:

1. Это все довольно медлительно;

2. Не всегда корректно;

3. Написано на костылях;

4. Диапазон частот заканчивается на 5кГц.

Вывод - не вариант. Все должно быть идеально. Вариант второй,- используем анализатор спектра в виде микросхемы MSGEQ7, - она умеет раскладывать на 7 частот включая 16кГц, - этого мне выше крыши.

Вот как это выглядет

Таким образом, буду собирать с использованием микросхемы.

Значит чего я хочу: Аудио сигнал поступает на вход анализатора, и на вход Ардуины. С выхода анализатора результат поступает на вход Ардуины. Ардуино это дело обрабатывает и выдает по ШИМ на УОРПИ.

С анализатора снимаем 7 частот, из них выделяются Низкие, Средние, Высокие, Среднее значение всех частот. - Получаем каналы НЧ, СЧ, ВЧ, ППЧ.

Со входа ардуины снимаем громкость сигнала, получаем канал ППГ. И вычтя это значение из максимально возможного получаем канал ОПГ. Таким образом будет все 6 каналов СДУ.

Проштудировав в интернете мануалы по работе с данной микросхемой анализатора имеем код:

То есть всё это работает на пресловутых Delay? Далее сюда втюхиваем еще работу ППГ и ОПГ, и получаем кашу на delay'ях, то есть будем тормозить работу ардуины только для того что бы соблюсти тайминги микрухи? Да ну нахер...

Я хочу что бы циклы поучения результата, манипуляции с ними и вывод сигналов ШИМ работали как-то сами по себе, а тайминги микрухи и получение значений с них работали отдельно. Значит мне надо как минимум 2 потока. А вот ардуино это не умеет. Значит надо сделать так, что бы основной цикл работал сам по себе, а когда надо прочитать значение с анализатора и дернуть его стробом, то основной цикл прервался, - выполнилась работа с микрухой, и продолжил работать основной цикл. А это называется прерывание, а поскольку внешних каких-то событий не будет происходит, значит надо сделать прерывание по таймеру. В ардуине имеется аж 3 таймера!. Что же это за таймеры? Почитаем:

http://arduino.ru/Tutorial/Arduino_Interrupts_part2

Таймер 0 - Отвечает за Delay, micros ... и ШИМ 5 и 6 пин.

Таймер 1 - ... ШИМ 9 и 10 пин.

Таймер 2 - ... ШИМ 3 и 11 пин.

Да что за нахер мне надо все 6 ШИМ каналов. Все таймеры заняты! а значит, либо я циклю все в loop'е и имею говнокод но с ШИМ, или я имею раздельное выполнение циклов, но БЕЗ ШИМ на одном пине.

Пост становится длинноват, поэтому продолжение следует...

Спойлер: вопрос я таки решил.

Показать полностью 4
[моё] Светомузыка Arduino Msgeq7 Своими руками Длиннопост
2
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии