Fórum témák

» Több friss téma
Cikkek » MSGEQ7 equalizer IC használata Arduino-val
MSGEQ7 equalizer IC használata Arduino-val
Szerző: Fizikus, idő: Szept 23, 2013, Olvasva: 17402, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   2 / 5

Az MSGEQ7 equalizer IC

Az IC adatlapjában lévő referencia kapcsolásról látható, hogy az MSGEQ7 néhány alkatrész felhasználásával már működésre bírható. Nagyon egyszerűen ráköthető az Arduino-ra, csak két digitális és egy analóg lábat kell hozzá használni.

 

msgeq7schem.jpg

A fenti kapcsolást egy próbanyákra építettem össze:

msgeq7panel.jpg

 

Az audio jelet egy műveleti erősítős DFrobot mikrofonpanel szolgáltatja, amely leírása és kapcsolási rajza az alábbi linkeken található (LINK1, LINK2):

mikrofon.jpg

A mikrofon az MSGEQ7 panelról kapja a +5V-ot és a földet (GND). A mikrofon kimenő jelét az MSGEQ7 panel audio bemeneti lábára kötöttem. Az MSGEQ7 panel STROBE lábát az Arduino 4-es (Pin4), a RESET lábát pedig az Arduino 5-ös (Pin5) digitális lábára kötöttem, míg az MSGEQ7 panel analóg kimenetét az Arduino 5-ös analóg bemenetére (A5) csatlakoztattam.

Nézzük meg kicsit részletesebben az MSGEQ7 működését. Az IC az audio jel erősségét 7 frekvenciasávon belül vizsgálja. Amint az alábbi, az adatlapból származó ábráról is látható, a frekvenciasávok kicsit átfedik egymást. A frekvenciasávok érzékenységének maximuma az alábbi frekvenciáknál van: 63 Hz; 160 Hz; 400 Hz; 1 kHz; 2,5 kHz; 6,25 kHz es 16 kHz.

 

 

7frekisav.jpg

 

Az IC az adott frekvenciasávhoz tartozó jel erősségével arányos feszültséget jelenít meg a kimenetén, amit az Arduino analóg bemenetére kötve beolvashatunk és megjeleníthetünk.

Mivel az IC-nek csak 8 lába van, ezért nem tartozik mind a 7 frekvenciasávhoz külön kimeneti láb. Az IC az egyes frekvenciasávhoz tartozó kimeneti feszültségértékeket csak egyetlen lábon (a 3-as lábon) egymás utáni sorrendben, a strobe lábon kapott jelre léptetve jeleníti meg. Először a 63 Hz-hez tartozó értéket, majd a 160 Hz-hez tartozót, majd a 400 Hz-es értéket, és így tovább egészen a 16 kHz-es értékig. Ezután újra kezdi elölről a 63 Hz-hez tartozó értékkel.

Ahhoz hogy ezt a folyamatos kiolvasást elvégezzük, először resetelni kell az IC-t a RESET lábra adott impulzussal (először magas szintre húzzuk, majd nullára). Ezzel tudatjuk az IC-vel hogy az első frekvenciasávval kezdje a kijelzést. Ezután a STROBE lábra alacsony jelet adunk és beolvassuk az Arduino-val az IC 3-as lábán lévő feszültséget (amit egy tömbben eltárolunk), majd a STROBE lábat magasra húzzuk. A STROBE lábra adott alacsony jel hatására az IC a következő frekvenciasávhoz tartozó feszültségértéket jeleníti meg a 3-as lábon. Ezt ismételten beolvassuk és eltároljuk az Arduino-val. A fenti strobe jel – mérés – strobe jel folyamatot még egymás után hatszor megismételve beolvassuk mind a 7 frekvenciasávhoz tartozó jelet, majd az IC-t resetelve elölről kezdjük a folyamatot.

 

msgeq7read.jpg

A fentieknek megfelelően az Arduino példakód is elég egyszerű. Létrehozok egy MSGEQ7meres() nevű függvényt, ami az IC resetelése után egymás után 7-szer a STROBE lábra adott jellel lépteti az IC-t. Minden egyes strobe jel után az IC a következő frekvenciatartományhoz tartozó feszültségjelet jeleníti meg a kimeneti lábán, amit az Arduino-val egy tömbbe olvasok be és a soros porton keresztül kiiratom a számítógépre.

 

  1. // MSGEQ7 Equalizer IC Arduino peldaprogram
  2. int strobe = 4; // STROBE lab Pin4-re kotve
  3. int reset = 5; // RESET lab Pin5-re kotve
  4. int spektrum[7]; // a mert audiospektrumot eltarolo tomb
  5. int MSGEQ7 = 5; // MSGEQ7 analog 5 pin-re kotve (A5)
  6. int csatorna;
  7.  
  8. void setup()
  9. {
  10. Serial.begin(115200); // 115200 baud sebessegu soros kommunikacio letrehozasa
  11. pinMode(reset, OUTPUT); // RESET lab kimenet
  12. pinMode(strobe, OUTPUT); // STROBE lab kimenet
  13. digitalWrite(reset,LOW);
  14. digitalWrite(strobe,HIGH);
  15. }
  16.  
  17. void MSGEQ7meres()
  18. {
  19. digitalWrite(reset, HIGH);
  20. digitalWrite(reset, LOW);
  21. for(csatorna=0; csatorna < 7; csatorna++)
  22. {
  23. digitalWrite(strobe,LOW); // strobe pin alacsony-kovetkezo frekv.savra valtas
  24. delayMicroseconds(30);
  25. spektrum[csatorna] = analogRead(MSGEQ7); // mert ertek eltarolasa a tombbe
  26. digitalWrite(strobe,HIGH);
  27. }
  28. }
  29.  
  30. void loop()
  31. {
  32. MSGEQ7meres();
  33. for (csatorna = 0; csatorna < 7; csatorna++)
  34. {
  35. Serial.print(spektrum[csatorna]);
  36. Serial.print(" ");
  37. }
  38. Serial.println();
  39. }

 

A különböző frekvenciasávokhoz tartozó mérési eredmények:

sorosmonitor.jpg

Az MSGEQ7 IC működésének megértése után már csak valamilyen módon vizuálisan is meg kellene jeleníteni a mért adatokat. Erre egy 8x8-as LED mátrix kijelzőt fogok használni.

 

 


A cikk még nem ért véget, lapozz!
Következő: »»   2 / 5
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem