Seite 1 von 1

6-Kanal-FFT-Lichtorgel mit Mikrocontroller

Verfasst: 01.05.2013, 11:51
von JeanLuc7
Salut Bastelfreunde,

die folgende Schaltung stellt für mich einen weiteren Schritt zu einem geplanten Frequenzanalyzer dar - eine Idee, die während der Entwicklung der Ansteuerung der Bildröhreneinheit enstanden ist und inzwischen sehr konkrete Formen angenommen hat. Sie ist aber für sich genommen so nett, dass ich sie hier gerne vorstellen möchte.

Es handelt sich dabei um eine Lichtorgel - ein Gerät, das mich vor 35 Jahren bereits beim EE2006 fasziniert hat, weil man dort der Musik einmal etwas entlocken konnte, was nicht bloß ein weiterer Verstärker war. Dort werden die Kanäle noch auf sehr konventionelle Weise getrennt - Hoch- und Tiefpässe sorgen dafür, dass drei Lampen in unterschiedlichem Takt flackern. Will man mehr Kanäle - wie beispielsweise bei einem Analyzer mit seinen sich bewegenden Balken - dann ist die konventionelle Methode schnell am Ende, weil sie nur sehr aufwändig zu mehr Trennschärfe zu bewegen ist.

Im Studium lernte ich dann einen anderen Weg kennen: durch eine Fouriertransformation konnte man aus einem Signal die einzelnen Frequenzanteile herausrechnen. Ganz grob funktioniert das ungefähr so: Man berechnet, welche Sinusschwingungen mit welchen Amplituden nötig sind, damit man daraus das gegebene Signal zusammenmischen kann. In der technischen Umsetzung arbeitet man dann mit einzelnen, diskreten Abtastwerten, die dann ihrerseits zu einzelnen Frequenzwerten führen. Die zugehörige Rechenoperation heißt daher diskrete Fouriertransformation. In ihrer Umsetzung als Algorithmus auf einem Computer setzt man verschiedene Optimierungen ein, damit das ganze möglichst schnell ablaufen kann. Das Ergebnis nennt sich daher "Fast Fourier Transformation", kurz FFT.

Früher benötigte man für so etwas spezielle Signalprozessoren, heutzutage existieren Algorithmen für alle möglichen Prozessoren; die sind inzwischen schnell genug, um FFTs zumindest im Audiobereich durchzuführen. Auf eine sehr ähnliche Weise führt man übrigens auch Bildvergleiche durch - für deren Echtzeitanalyse bedarf es allerdings auch heute noch hochwertiger Technik.

Wie bereits gesagt, stellt eine FFT heutzutage kein allzu großes Problem mehr dar. Auch für die Mikrocontroller der Atmel-ATMega-Serie existieren inzwischen verschiedene fertige Algorithmen. Die Lichtorgel stellt von dieser Warte aus sogar noch eine niedrigere Erfindungshöhe dar - es handelt sich nämlich in weiten Teilen um einen Nachbau einer Schaltung aus dem Mikrocontrollerforum. Ich habe Anpassungen an der Software vorgenommen, damit sie mit dem von mir benutzten Mikrocontroller zusammenarbeitet. Außerdem habe ich ein paar Transistoren eingespart und sie gegen ein Darlington-Array ersetzt, das noch in der Bastelkiste lag.

Zur Schaltung: die beiden OpAmp vom Typ LM358 (der kommt gut mit einfachen Betriebsspannungen klar - OpAmps haben ja üblicherweise gerne duale Spannungen) stellen einen Verstärker mit nachgeschaltetem Tiefpass dar. Der Tiefpass ist erforderlich, damit die FFT korrekt arbeitet - es dürfen keine Frequenzen zum Mikrocontroller gelangen, die höher sind als die halbe Abtastfrequenz. Der Mikrocontroller selbst tastet das Eingangssignal ab ("digitalisieren" mit 10 Bit pro Wert) und führt mit den gemessenen Werten die FFT durch (die aus Geschwindigkeitsgründen in Assembler, also Maschinensprache geschrieben ist).

Um nun die LEDs zum Flackern zu bringen, nutzt die Software eine weitere Funktion des Mikrocontrollers - die Pulsweitensteuerung (Pulse Wide Modulation - PWM). Damit variiert man das Verhältnis von Ein- zu Ausschaltphasen. Bei 100% Einschaltphase leuchtet die LED dauerhaft, bei 50% mit halber Energie, bei 0% ist sie komplett aus. Wenn man diese PWM mit einer ausreichend hohen Frequenz durchführt, wirkt es, als würde die Helligkeit der LED variiert. Dabei leuchtet sie in den Einschaltphasen immer mit voller Leistung. Dieses Verfahren wird auch bei allen modernen LED-Monitoren und LED-TVs eingesetzt, denn es besitzt einen weiteren Vorteil: die Lichtfarbe der LED bleibt konstant, egal, ob sie heller oder dunkler erscheint. Regelt man bei einer weißen LED hingegen per Stromdurchfluss, dann wird sie im dunklen Bereich eher gelblich.

Je nach Höhe des gemessenen Frequenzwerts wird die zugehörige LED also stärker oder weniger stark flackern. Um nun die LEDs nicht direkt an den Mikrocontroller anschließen zu müssen, würde ein Open-Collector-Darlington-Array vom Typ ULN2803 benutzt. Solche Array werden gerne für Relais- oder Motorschaltungen genutzt, weil sie kleine Eingangsleistungen in relativ große Ausgangsleistungen verwandeln können. Der Mikrocontroller wäre grundsätzlich in der Lage, die LEDs auch von sich aus zu betreiben, aber der erforderliche Spannungsregler 78L05 mit einem maximalen Ausgangsstrom von 100mA kommt dann ganz schön ins Schwitzen. Daher entkoppelt das Darlington-Array die LEDs, die dann mit ihrer Anode an der Hauptversorgungsspannung angeschlossen sind.

Zum Einsatz kommt dabei der ATMega88-Mikrocontroller auf der bereits im Wiki dokumentierten AVR-Universalplatine. Der Anschluss C5 ist der Eingang für das Tonsignal, die Ausgänge D2-D7 steuern die LEDs - mehr ist nicht erforderlich. Das Darlington-Array steckt auf einer anderen Universalplatine, die den Einsatz von 8- bis 20-poligen ICs ermöglicht und dabei alle Pins einfach nach außen führt. Sofern der Masseanschluss links unten und der Pluspol rechts oben zu finden ist (ist bei den OpAmps der TL-Serie, der CD4000-Serie und den TTL-ICs der Fall), bietet die Platine die Vereinfachung, diese Pins über Jumper direkt an die vier Eckanschlüsse zu leiten. Es steckt also kein Geheimnis dahinter.

Die 6 LEDs nutzen die seinerzeit im Forum entstandenen Universalplatinen, außerdem kommt noch ein auf eine klassische Transistorplatine gelöteter 78L05 und die Diodenbuchse aus dem EE2013 zum Einsatz. Diese Buchse habe ich auf den aktuellen Stand gebracht und statt der 5-poligen Rundbuchse eine 3,5mm-Stereo-Klinkenbuchse eingelötet - damit bekommt man heute leichter Kontakt zur Musik.

Natürlich gibt's zum Abschluss auch ein paar Videos, damit man die Lichtorgel auch einmal im echten Einsatz sehen kann. Damit es keinen Ärger mit der GEMA gibt, habe ich lizenzfreie Musik aus dem Internet benutzt.

Rockmusik - hier kann man die hohen Frequenzen der E-Gitarre gut erkennen
Popmusik - recht gleichmäßiges Spektrum, das Schlagzeug sorgt für die hohen Frequenzen
Filmmusik - die Bässe am Anfang steuern nur die beiden linken LEDs aus

Die Schaltungsbeschreibung und der Quellcode für den Mikrocontroller werden alsbald auch im Wiki zu finden sein.

Es grüßt herzlich
JL7

Re: 6-Kanal-FFT-Lichtorgel mit Mikrocontroller

Verfasst: 01.05.2013, 13:56
von JeanLuc7
Kleiner Nachtrag: das Schaltbild.

Re: 6-Kanal-FFT-Lichtorgel mit Mikrocontroller

Verfasst: 17.05.2013, 17:00
von Ingo63
Hallo Frank,
mit welchem Tool schreibst du die Programme für deine Mikrocontroller und welche Literatur nutzt du bzw. hast du genutzt um deine ersten Schritte in der Mikrocontrollerwelt zu tun.

Re: 6-Kanal-FFT-Lichtorgel mit Mikrocontroller

Verfasst: 17.05.2013, 19:04
von JeanLuc7
Salut Ingo,

ich bin mit 14 Monaten Erfahrung ziemlicher Neuling in diesen Dingen. Ich habe zwar jahrelang programmiert, aber nur unter Windows und in der Sprache Pascal (Delphi). Vielleicht erinnert sich noch jemand an die Routenplaner, die man Anfang der 2000er auf DVD kaufen konnte (bevor es google maps gab) - die von Falk, ADAC und Marco Polo stammen u.a. aus meiner Feder.

Mikrocontroller sind da so etwas wie der Rücksturz ins Mittelalter. Man muss sich um wirklich alles selbst kümmern, es gibt keine grafischen Anzeigen außer denen, die man selbst anschließt, und eine große Bibliothek mit tausenden Funktionen ist auch nicht vorhanden. Aber andererseits ist es ein bisschen wie DOS - da lief alles sequentiell, es gab kein Multithreading oder irgendwelche Ereignisse, auf die man reagieren musste. Nachdem ich mich einmal darauf eingelassen hatte, fing das ganze aber an, richtig Spaß zu machen, weil man plötzlich mit ein bisschen Software und einem einzigen Chips ganze Batterien von Logik- und Analogbausteinen ersetzen kann und dann auch noch jederzeit anpassen und anbauen kann.

Als Werkzeuge nutze ich seit der ersten Stunde WinAVR (V4.11, OpenSource), das einen Editor, einen Compiler und einen Makefile-Editor mitbringt, sowie das AVR Studio 4 (von Atmel, kostenlos), letzteres einzig und allein zum Überspielen der entstehenden Binärdateien (hex-Dateien) in den Mikrocontroller. Es hat sich bewährt, aber sicher kann man auch das AVR Studio allein benutzen. Mir gefiel der WinAVR-Editor besser, außerdem nutzen meine Lernquellen ihn ebenfalls.

Stichwort Lernquellen: das ist hauptsächlich das Mikrocontrollerforum (bei dem ich seit Jahren einen Account habe, mich aber bis heute nicht traue, dort zu posten). Dort findet man zwei herausragende Tutorials, eins für Assembler und eins für C als Entwicklungssprache. Ich habe mich für C entschieden, Assembler ist mir schon in den 80ern fremd gewesen. Trotzdem nutzt das Lesen dieses Tutorials, weil es die Zusammenhänge im Mikrocontroller sehr detailliert erklärt. Aus dem Forenbereich dieser Seite habe ich auch viele Ideen und Anregungen zu Basteleien bekommen; man findet dort auch immer wieder kleine Projekte inklusive Sourcecode, die dann diskutiert werden. Wenn man wie ich am besten aus Beispielen lernt, dann sind solche Threads natürlich Gold wert.

Nicht unterschätzen sollte man auch die ATmel-Dokumentationen selbst. Die sind äußerst umfangreich (200-300 Seiten) und erklären wirklich jede Kleinigkeit und jedes Register und jedes Bit, oft auch mit Beispielen. Im Mikrocontrollerforum wird man daher oft aufgefordert, doch bitte einfach im Datenblatt nachzusehen. Als Ersteinstieg sind sie aber nicht geeignet, da ist das Tutorial besser.

Es gibt noch weitere Foren und einige Anlaufstellen für spezielle Projekte mit Erklärung, beispielsweise die Seite von Ulrich Radig oder Scott-Falk Hühn und natürlich diesen irren Japaner. Bücher habe ich bisher nicht benutzt

Man braucht dann noch einen Programmer - ich habe mir einen AVRISP-Nachbau aus China beschafft (30€). Die Originale von Atmel sind doppelt so teuer, dafür funktionieren sie auch noch mit den neusten AVR-Studios - mein Programmer wird nur bis Version 4.11 unterstützt :-( Diese Programmer sind letztlich nichts anderes als serielle Schnittstellen mit einem angeschlossenen Pegelwandler. Heuet werden sie üblicherweise per USB angeschlossen und simulieren dann eine serielle Schnittstelle. Das funktioniert problemlos sogar in ungewöhnlichen Umgebungen - ich programmiere unter Windows XP in einer virtuellen Maschine auf einem Mac mini unter dem Betriebssystem Mac OS X Snow Leopard.

Die Programmer haben als Ausgang eine zehn- bzw- sechspolige Schnittstelle, mit der man die Mikrocontroller dann sogar in der Schaltung programmieren kann (ISP=In-System-Programming).

Und wenn man dann einmal mit der Materie warm geworden ist, stellt man fest, wie viel - und wenig doch 8kByte Codegröße und 512 Byte Arbeitsspeicher sind. Es geht eine Menge in diese Controller, aber letztlich kommt man doch immer wieder an Grenzen. Ich versuche mich gerade an einer Neukonstruktion des Mikrocontroller-Labs (also so, wie man es vielleicht heute bauen würde), und da stoße ich schon manches Mal an Grenzen. Ich berichte demnächst darüber, aber zwei Erlkönig-Fotos mögen erlaubt sein.

Falls Du (oder andere) Fragen hast - ich beantworte sie gerne.

Viele Grüße

JL7

Re: 6-Kanal-FFT-Lichtorgel mit Mikrocontroller

Verfasst: 09.06.2014, 20:50
von JeanLuc7
Salut Bastelfreunde,

ich hole mal diesen alten Thread wieder nach oben. Ursprünglich diente die Lichtorgel nur als Vorstufe für einen Frequenzanalyzer dar - eine Idee, die Peter während meiner ersten Versuche mit der Schuco-Bildröhreneinheit vorgeschlagen hatte. Nun lag das Thema lange Zeit auf Eis, obwohl eigentlich alle Komponenten seit einem Jahr vorrätig waren. Und spätestens seit dem Nachbau der Bildröhreneinheiten waren auch genug Monitore vorhanden. Reizvoll war das ganze für mich noch aus zwei weiteren Gründen: Einerseits schlägt es einen Bogen über alle größeren Entwicklungen, die hier im letzten Jahr entstanden sind und andererseits steht die Maker Faire in Hannover vor der Tür. Wen es interessiert: ich stelle dort am 5. und 6. Juli meine Basteleien aus. Hier (klick) gibt's schon mal einen Überblick - das, was die Redakteurin aus meinen Rohtexten zusammengebaut hat :)

Hier also nun der Frequenzanalyzer. Er besteht nach wie vor aus dem Vorverstärker der Lichtorgel, dessen Signal am A/D-Wandler des ATMega88-Mikrocontroller auf dem Universalmodul gemessen wird. Statt das Bild nun aber auf sechs Leuchtdioden per Pulsweitenmodulation auszugeben, wird einfach die SWL-Bibliothek unseres Grafik-Touchscreen-Moduls (GTM) benutzt. Und tatsächlich wäre man dann schon fertig - einfach das GTM anschließen und sich über die hüpfenden Balken freuen.

Ganz so leicht sollte es aber nicht sein - es ging bei Peters Idee ja darum, das ganze auf die Bildröhre zu bringen. Hier kommt nun der allererste Prototyp zum Einsatz, den ich seinerzeit als Vorbereitung für das Microcontroller Lab gebaut habe - eine Art "Grafikkarte", die letztlich den reinen Grafikteil des GTM darstellt, also ohne die ganze Touchscreen-Eingabefunktionen. Er ist an anderem Ort bereits einmal beschrieben worden, daher hier nur eine ganz kurze Zusammenfassung: Es kommt ein ATMega8515 zum Einsatz, der die Grafikdaten in einen RAM-Baustein schreibt und im PAL-Takt auch wiedewr liest und ausgibt. Als Ergebnis erhält man dann ein RGB-Farbsignal, das bereits PAL-kompatibel ist. Dieses gelangt nun an einen Baustein vom Typ AD724 - ein cleveres Kerlchen, das die einzelnen Signale (4 an der Zahl) wieder zu einem Composite-Video-Signal zusammenführt. Damit kann man es an jeden Fernseher oder eben auch an die PAL-Eingänge der Universalbildröhreneinheiten anschließen - oder auch an den Videoeingang der oberen EE2008-Platine, das geht auch.

Nun sendet der Mikrocontroller ein paar Kommandos an die "Grafikkarte", lediglich eine Abfolge von Kommandos, die sechs Balken im Takt des Eingangssignals springen lassen. Und weil das ganze als Video natürlich viel schöner ist, gibt's hier (klick) auch was zu sehen.

Einen schönen Sonntagabend wünscht
Frank/JL7