Компания Mixed Signal Integration выпускает интересную микросхему MSGEQ7, которая представляет собой 7-ми полосный фильтр для графического эквалайзера. Данный 8-ми выводной чип способен из входного аудиосигнала выделить частотные полосы 63Гц, 160Гц, 400Гц, 1кГц, 2.5кГц, 6.25кГц и 16кГц:
В данном материале я хотел бы рассказать о практическом применении данной микросхемы. Для этого мы соберем простейший 5-ти полосный аудио анализатор спектра с применением Arduino. Т.к. ставилась цель показать практическое применение MSGEQ7, то я не стал делать светодиодную матрицы (многоуровневые бары), и в качестве уровня аудиосигнала для каждого бара задействовал ШИМ. Т.е. чем больше уровень определенной частоты, тем ярче будет светить отвечающий за эту частоту светодиод.
Блок схема MSGEQ7:
Даташит на MSGEQ7 (см. прикрепленные файлы внизу статьи) предлагает нам следующую схему включения:
Для подключения к контроллеру нам потребуются выводы Reset, Strobe и Out. Логику взаимодействия с MSGEQ7 лучше всего иллюстрирует диаграмма из даташита:
К контроллеру ардуино я подключил следующим образом:
- RESET к 11 выводу Arduino;
- STROBE к 12 выводу Arduino;
- OUT к 0 выводу Arduino (аналоговый вход);
Код программы:
#define msg7RESET 11 #define msg7Strobe 12 #define msg7DCout 0 const int LEDpins[7] = {3,5,5,6,9,9,10}; // массив выводов для светодиодов. Т.к. используется только 5, то некоторые частоты повторяются void setup() { for (int x=0; x<7; x++) { pinMode(LEDpins[x], OUTPUT); // инициализация выходов для LED } pinMode(msg7RESET, OUTPUT); pinMode(msg7Strobe, OUTPUT); } void loop() { digitalWrite(msg7RESET, HIGH); // осуществляем сброс MSGEQ7 delay(5); digitalWrite(msg7RESET, LOW); for (int x = 0; x < 7; x++){ // семь частот - семь стробирующих импульсов digitalWrite(msg7Strobe, LOW); delayMicroseconds(35); // ждем установления значения 35 мкс int spectrumRead = analogRead(msg7DCout); // считываем значение с аналогового входа int PWMvalue = map(spectrumRead, 0, 1024, 0, 255); // преобразовываем диапазон 0-1024 к диапазону 0-255 для ШИМ if (PWMvalue < 50) // небольшой программный фильтр шума PWMvalue = PWMvalue / 2; analogWrite(LEDpins[x], PWMvalue); digitalWrite(msg7Strobe, HIGH); } }
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
Микросхема | MSGEQ7 | 1 | Поиск в магазине Отрон | |||
Плата Arduino | Arduino Uno | 1 | Поиск в магазине Отрон | |||
C2, C3, C6 | Конденсатор | 0.1 мкФ | 3 | Поиск в магазине Отрон | ||
C7 | Конденсатор | 33 пФ | 1 | Поиск в магазине Отрон | ||
R1, R3 | Резистор | 22 кОм | 2 | Поиск в магазине Отрон | ||
R2 | Резистор | 200 кОм | 1 | Поиск в магазине Отрон | ||
Скачать список элементов (PDF)
Прикрепленные файлы:
- MSGEQ7.pdf (182 Кб)
- MSGEQ7.ino (1 Кб)
Комментарии (4) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Может кто сталкивался с подобным, ответьте мне, в чем проблема?