Простой анализатор спектра на микросхеме MSGEQ7

Компания Mixed Signal Integration выпускает интересную микросхему MSGEQ7, которая представляет собой 7-ми полосный фильтр для графического эквалайзера. Данный 8-ми выводной чип способен из входного аудиосигнала выделить частотные полосы 63Гц, 160Гц, 400Гц, 1кГц, 2.5кГц, 6.25кГц и 16кГц:

Частотное распределение

В данном материале я хотел бы рассказать о практическом применении данной микросхемы. Для этого мы соберем простейший 5-ти полосный аудио анализатор спектра с применением Arduino. Т.к. ставилась цель показать практическое применение MSGEQ7, то я не стал делать светодиодную матрицы (многоуровневые бары), и в качестве уровня аудиосигнала для каждого бара задействовал ШИМ. Т.е. чем больше уровень определенной частоты, тем ярче будет светить отвечающий за эту частоту светодиод.

Блок схема MSGEQ7:

Блок схема MSGEQ7

Даташит на MSGEQ7 (см. прикрепленные файлы внизу статьи) предлагает нам следующую схему включения:

Схема включения MSGEQ7

Для подключения к контроллеру нам потребуются выводы Reset, Strobe и Out. Логику взаимодействия с MSGEQ7 лучше всего иллюстрирует диаграмма из даташита:

Диаграмма работы 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 можно легко найти в продаже на Ali или eBay, да и в некоторых отечественных магазинах была замечена.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Микросхема MSGEQ7 1
Плата Arduino Arduino Uno 1
C2, C3, C6 Конденсатор 0.1 мкФ 3
C7 Конденсатор 33 пФ 1
R1, R3 Резистор 22 кОм 2
R2 Резистор 200 кОм 1