MSGEQ7 - неправильное определение частоты
- Войдите на сайт для отправки комментариев
Всем привет! Пытаюсь собрать логический анализатор на MSGEQ7. Перечитал массу статей, как на русском, так и на английском. Везде применены одни и те же скетч и схема:
#define msg7RESET 11 #define msg7Strobe 12 #define msg7DCout 0 const int LEDpins[7] = {3,5,5,6,9,9,10}; // there are 5 LEDs and 7 freq bands. So, repeat LEDs void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: for (int x=0; x<7; x++) { pinMode(LEDpins[x], OUTPUT); } pinMode(msg7RESET, OUTPUT); pinMode(msg7Strobe, OUTPUT); } void loop() { digitalWrite(msg7RESET, HIGH); // reset the MSGEQ7's counter delay(5); digitalWrite(msg7RESET, LOW); for (int x = 0; x < 7; x++){ digitalWrite(msg7Strobe, LOW); // output each DC value for each freq band delayMicroseconds(35); // to allow the output to settle int spectrumRead = analogRead(msg7DCout); int PWMvalue = map(spectrumRead, 0, 1024, 0, 255); // scale analogRead's value to Write's 255 max if (PWMvalue < 50) PWMvalue = PWMvalue / 2; // bit of a noise filter, so the LEDs turn off at low levels analogWrite(LEDpins[x], PWMvalue); digitalWrite(msg7Strobe, HIGH); } }
Я все собрал на Меге2560. И поставил 6 светодиодов вместо 5-ти. Массив светодиодов у меня выглядит вот так: const int LEDpins[7] = {3,4,4,5,6,7,8};
Все собрал - в результате на звук реагирует только светодиод, который подключем к 3-му пину. Остальные лишь тускло горят, и не меняют свою яркость. 100 раз пересмотрел схему - все правильно. В сети ответа не нашел. Начал сам експериментировать с кодом. Вот что у меня получилось:
#define msg7RESET 9 #define msg7Strobe 10 #define msg7DCout 0 const int LEDpins[7] = {3,4,4,5,6,7,8}; // массив выводов для светодиодов. Т.к. используется только 5, то некоторые частоты повторяются void setup() { for (int x=0; x<7; x++) { pinMode(LEDpins[x], OUTPUT); } pinMode(msg7RESET, OUTPUT); pinMode(msg7Strobe, OUTPUT); } void loop() { for (int x = 0; x < 7; x++){ digitalWrite(msg7RESET, HIGH); // reset the MSGEQ7's counter digitalWrite(msg7Strobe, LOW); // output each DC value for each freq band delay(3); delayMicroseconds(25); // to allow the output to settle int spectrumRead = analogRead(msg7DCout); int PWMvalue = map(spectrumRead, 0, 1024, 0, 255); // scale analogRead's value to Write's 255 max if (PWMvalue < 30) PWMvalue = PWMvalue / 2; // bit of a noise filter, so the LEDs turn off at low levels analogWrite(LEDpins[x], PWMvalue); digitalWrite(msg7Strobe, HIGH); digitalWrite(msg7RESET, LOW); } }
В результе реакция на звук есть у всех 6-ти светодиодов, но реакция не на все частоты. Точно определить не могу на какие частоты есть реакция. Получается вместо всей полосы частот берется только какая-то часть и раскладывается на все 6 светодиодов. Конечно, они чуть-чуть по разному горят, но все же это не полноценный эквалайзер, и нет такого что бы горели только отдельные светодиоды. Нет реакции как в видео из статьи: https://www.baldengineer.com/msgeq7-simple-spectrum-analyzer.html. Там в зависимости от частоты горят определенные светодиоды, у меня же светятся все, правда чуто-чуть по-разному.
Что можете подсказать по этому поводу? Почему первый скетч у меня не заработал? И почему только часть частот?
Сейчас просканировал кодом выше (библиотека MD_MSGEQ7) - из 7-ми полос данные идут только по первой полосе. То есть только бас. По остальным полосам ничего, лишь шумы в пределах 30-40 (из 1023).
В чем может быть проблема? Это MSGEQ7 бракованная? можно ли это как-то исправить?
forfrends, подавайте на вход микросхемы сигнал необходимой амплитуды (уточнить в даташите) с генератора, изменяйте частоту и увидите на какие частоты как реагирует.
Из двух MSGEQ7, купленных в разных местах, обе имели похожий брак: последние два канала дублируют первые два, частоты каналов, которые работают, не соответствуют даташиту. У одной из двух еще неработающий четверный канал и пятый канал не имеет ограничения сверху, то есть реагирует от 10 кГц до 100 и более (далее не проверял). Есть еще похожие жалобы в сети и в отзывах продавцов на AliExpress.
Судя по этому, брака много. Не стоит вообще связываться с MSGEQ7 без проверки или удовлетвориться работающими каналами. Даже на 4х каналах получается неплохая цветомузыка. На плату надо ставить панельку.
Чтобы проверить надо дать нужные сигналы на reset и strobe и подключить осциллограф на выход (3 нога). Затем подавать звуковой сигнал с генератора на вход, меняя его частоту и амплитуду, можно видеть какие полосы на какие частоты реагируют и как активно. На обычном осциллографе всё видно. Если что не так, то скачать даташит и проверить питание, сигнал на входе, временные параметры сигналов reset и strobe и частоту тактового генератора (подключение щупа сдвигает частоту, щуп обязательно через делитель). Если все ОК, но МС работает не так - это брак.