Siemens Antriebe


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Musikvisualisierer mit MSGEQ7


Startbild


Einen einfachen Musikvisualisierer haben wir bereits konstruiert. Die Schaltung und das Ergebnis können auf der folgenden Seite betrachtet werden:

Pegelanzeige mit RGB-Matrix

In der Schaltung wurde einfach das analoge Signal, das ein Mikrofon lieferte, in bestimmten Zeitabständen ausgelesen und in Form von farbigen Balken auf einer Matrix angezeigt.
In diesem Versuch wollen wir die Musik ein wenig genauer visualisieren und zu den einzelnen Frequenzen eines Audiosignals Stellung nehmen. Die Zerlegung des analogen Musiksignals, das ein Musikgerät liefert, übernimmt in dieser Schaltung der Baustein MSGEQ7. Bei dem Chip handelt es sich um einen Audio-Frequenzanalysator. Der ankommende Ton wird in sieben Frequenzbänder zerlegt, die man mit Arduino einzeln abfragen kann. Die sieben gemessenen Frequenzen sind: 63 Hz, 160 Hz, 400 Hz, 1 kHz, 2,5 kHz, 6,25 kHz und 16 kHz. Am Ausgang wird die Amplitude jedes Bandes als Gleichspannung zur Verfügung gestellt. Die Spannung kann abgerufen und in einer beliebigen Form visualisiert werden.
Bei einem Stereo-Signal und nur einem Audio-Frequenzanalysator MSGEQ7 werden beide Signale zusammengeführt und auf den Eingang des Chips gelegt. Eine Prinzip-Schaltung findet man in dem Datenblatt des Bausteins. In unserem Fall kommen zwei MSGEQ7 zum Einsatz. Damit werden beide Stereo-Kanäle separat abgefragt, auf sieben Frequenzbänder zerlegt und zum Schluss getrennt visualisiert.

Audio-Frequenzanalysator MSGEQ7

msgeq7



Pinbelegung


1. VDD - Spannungsversorgung, typisch 5V
2. VSS – Negative Spannungsversorgung, typisch 0V
3. OUT – DC-Ausgang
4. STROBE – Frequenz-Kanalauswahl
5. IN – Audioeingang
6. GND – Intern erzeugte Masse, typisch 2,5V
7. RESET – Zurücksetzen
8. CKIN - Clock Oszillator-Pin

Schaltplan

Schaltplan



Testschaltung

Testschaltung



Programm

// *******************************************************************************************
// Musikvisualisierer mit MSGEQ7
// eine Schaltung mit dem Audio-Frequenzanalysator MSGEQ7 und Arduino Mega
// Arduino IDE 2.3.5
// *******************************************************************************************

#include "RGBmatrixPanel.h"                      // Matrix-Bibliothek

#define CLK 11                                   // Matrix-Anschlüsse
#define OE 9
#define LAT 10
#define A A0
#define B A1
#define C A2
#define D A3
#define E A4

RGBmatrixPanel matrix(A, B, C, D, E, CLK, LAT, OE, false, 64);

int MSGEQ7_Reset = 52;                           // Anschlüsse MSGEQ7 an Arduino
int MSGEQ7_Strobe = 53;
int MSGEQ7_Kanal_A_Out = A5;                     // Kanal A
int MSGEQ7_Kanal_B_Out = A6;                     // Kanal B
int Frequenzband [14];                           // [0 bis 6 ][0] - Analogwerte Kanal A
                                                 // [7 bis 13][0] - Analogwerte Kanal B
int PosYa [14];                                  // Y-Positionen der Max-Balken
unsigned long Millis_Alt;                        // Zeit festhalten

// *******************************************************************************************
void setup() {

    pinMode(MSGEQ7_Reset, OUTPUT);               // Arduino Pin 52 (Reset) als Ausgang
    pinMode(MSGEQ7_Strobe, OUTPUT);              // Arduino Pin 53 (Strobe) als Ausgang
    digitalWrite(MSGEQ7_Reset, LOW);
    digitalWrite(MSGEQ7_Strobe, HIGH);

    matrix.begin();                              // Matrix aktivieren
    delay(500);
    matrix.drawRect(0, 0, 64, 64, matrix.Color333(0, 0, 7));   // Feld markieren
    matrix.drawLine(0, 51, 64, 51, matrix.Color333(0, 0, 7));
    matrix.setTextSize(1);
    matrix.setCursor(2, 2);                      // Cursor positionieren für Textausgabe
    matrix.setTextColor(matrix.Color333(0,7,0)); // Textfarbe
    matrix.println("MSGEQ7");                    // Text ausgeben
    matrix.setCursor(15, 54);                    // Cursor neue Position
    matrix.setTextColor(matrix.Color333(7,0,0)); // Textfarbe
    matrix.println("Stereo");                    // Textausgabe

    for (int i = 0; i < 14; i++) {               // Variable PosYa [] vorbelegen
        PosYa [i] = 50;
    }
}

// *******************************************************************************************
void loop() {

    digitalWrite(MSGEQ7_Reset, HIGH);            // MSGEQ7 Reset
    delayMicroseconds(10);
    digitalWrite(MSGEQ7_Reset, LOW);
    for (int i = 0; i < 7; i++) {                // Alle analoge Werte auslesen
        digitalWrite(MSGEQ7_Strobe, LOW);        // Umschaltung mit Strobe
        delayMicroseconds(100);                  // Wartezeit
        Frequenzband[i] = analogRead(MSGEQ7_Kanal_A_Out);    // Amplituden Kanal A
        Frequenzband[i+7] = analogRead(MSGEQ7_Kanal_B_Out);  // Amplituden Kanal B
        digitalWrite(MSGEQ7_Strobe, HIGH);
        delayMicroseconds(100);
    }

    for (int i = 0; i < 14; i++) {               // Ergebnisse in Balkenform anzeigen
        Balken_anzeigen (i);                     // Unterprogramm "Balken_anzeigen"
    }

    if (millis() - Millis_Alt (*groeser) 250) {           // Wartezeit für Max-Balken, hier 250 ms
        Millis_Alt = millis();
        for (int i = 0; i < 14; i++) {
            PosYa [i] = PosYa [i] + 1;
        }
    }

    delay(20);                                   // Wartezeit
}

// *******************************************************************************************
void Balken_anzeigen (byte Nummer) {
 
    int PosY = 50;                               // Y - Ausgangskoordinate 
    int PosX = 9;                                // X - Ausgangskoordinate für Kanal A
    PosX = PosX + (Nummer * 3);                  // X - Positionen balken Kanal A (0-6)
    
    if (Nummer (*groeser) 6) { 
        PosX = 35;                               // X - Ausgangskoordinate für Kanal B
        PosX = PosX + ((Nummer-7) * 3);          // X - Positionen für Kanal B (7-13)
    }
    int Balken_Hoehe = Frequenzband[Nummer] / 30;  // Balken-Matrix-Höhe berechnen
    PosY = PosY - Balken_Hoehe;                  // Y - Neue Koordinate berechnen

    int R = random(7);                           // Farben via Zufall 
    int G = random(7);
    int B = random(7);
                                                 // Balken auf Matrix anzeigen
    matrix.drawRect(PosX, PosY, 2, Balken_Hoehe, matrix.Color333(R, G, B));
                                                 // Reste löschen
    matrix.drawRect(PosX, 16, 2, 34 - Balken_Hoehe, matrix.Color333(0, 0, 0));
                                                 // Y - Koordinate Max-Balken aktualisieren
    if (PosY < PosYa [Nummer]) {
        PosYa [Nummer] = PosY;        
    }
                                                 // Max-Balken (2 Pixel) anzeigen
    matrix.drawLine(PosX, PosYa [Nummer], PosX+1, PosYa [Nummer], matrix.Color333(0, 0, 7));
}

// *******************************************************************************************


LED - Matrix 64x64

Arduino Programmierung


Kurzvideo

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz