Audioslave

Aus Hobbyelektronik.org
Wechseln zu: Navigation, Suche

Ausgangssituation

Ich habe schon seit einigen Jahren eine 5.1-Anlage an meinem PC hängen, mit der ich auch sehr zufrieden bin. Diese wird - wie der Computer selbst - von einem Hauptschalter getrennt, wenn das Gesamtsystem nicht verwendet wird.

Wie der Teufel (höhö) so will, möchte man das Ding manchmal auch ruhig haben (z. B. beim Telefonieren) oder man braucht sie nicht, weil man gar nicht da ist. Zwar hat der Verstärker eine "Auto-Funktion", bei der er bei Stille nach einer gewissen Zeit in den Standby geht. Dummerweise unterbindet sie die Beschallung auch, wenn man mal leise Musik hören möchte.

Bis jetzt bin ich oft unter den Tisch gekrochen (der Verstärker ist im Subwoofer), um die Einstellung zu ändern, aber wie das so ist: spätestens das Abschalten vergisst man.

Idee

Wie schon beim alten Fernseher lässt sich auch hier Faulheit und Nachlässigkeit durch Technik ersetzen. Gleichzeitig soll wieder gelten: so wenig wie möglich am eigentlichen Gerät umbauen.

Da es sich bei dem Schalter um einen gut erreichbaren - und halbwegs leichtgängigem - Schiebeschalter handelt lag die Idee nah, einen Modellbauservo zu verwenden. In der Grabbelkiste lagen noch ein paar, so könnte die Bastelei beginnen.

Lösung

Hardware

AVR
Typ ATtiny45
Takt 16,5 MHz
Fuses
High 0xDD
Low 0xE1
Extended 0xFF
Engbedded com logo.png Details


Da ich möglichst wenig Änderungen am Verstärker vornehmen wollte, fiel die erste Aufmerksamkeit auf die Befestigung: Der Amp ist ringsum mit Holzschrauben im Gehäuse befestigt - also auch wenige Zentimeter über dem Powerschalter. Ein Stück Platinenmaterial sorgt für den Halt am Gehäuse. Der Servo selbst wird ebenfalls von einem Stück Platine gehalten. Die Abstandshalter zwischen Halteplatte und Servo bestehen - wie kanns auch anders sein - auch aus FR4-Basismaterial.

Zum Verbinden des 3D-Puzzles wird der Lötkolben mit einer gehörigen Portion Lötzinn verwendet. Einzige Voraussetzung hierfür ist eine gewisse Leistung des Lötkolbens. Unter 50 Watt kann man es sicher versuchen, es macht aber sicher nicht allzu viel Spaß.

Nachdem der mechanische Part passt, kommt nun der doch etwas aufwendigere Teil: die Software.

Damit man das Teil nicht wieder vergessen kann, ist die Anbindung an den PC und eine gewisse Intelligenz Pflicht. Hier kommt Hardwareseitig (wieder mal) V-USB zum Einsatz. Die Ansteuerung des Motors, die natürlich auch vom AVR übernimmen wird, ist denkbar einfach:

Der Regler im Servo erwartet Pulse zwischen 1 und 2ms Länge, wobei er bei 1ms das "Ruder" vollständig in die eine, bei 2ms vollständig in die andere Richtung ausschlagen lässt. Bei der Wiederholfrequenz haben sich 50Hz eingebürgert, was bei meinem einfachen Servo insoweit wichtig ist, dass das Teil ohne Pulse weder die gewünschte Position hält, noch vollständig anfährt, falls sie noch nicht erreicht wurde. Bei den neueren (und teureren) "Digitalservos" ist das nicht der Fall. Aber das tut hier weniger zur Sache.

Die V-USB-Bibliothek emuliert ein HID, wodurch betriebssystemseitig keine speziellen Treiber erforderlich sind. Aufgrund der Unkomplexität ist der HID-Report lediglich 2 Byte groß. Das erste gibt die Position an, das zweite, wie lange die Ausgabe aktiv sein soll - also wie Lange der Motor mit aller Kraft versucht, zu seinem Ziel zu kommen.

Software

Die PC-Software gestaltete sich als ein bisschen schwieriger. Zwar ist C# relativ einfach, aber das .NET-Framework bietet von sich aus keine Schnittstelle zum Audiomixer von Windows an und alle Beispiele und Bibliotheken die ich fand waren nicht mit Win7 x64 kompatibel...

Nach längerer Sucherei stieß ich endlich auf die Core Audio API, die zumindest mit 64 Bit prima funktioniert.

Ein wenig (unausgegorenen) Quellcode außenrum und ein paar Icons von Windows "ausgeliehen" und "fertig" (ein paar Funktionen fehlen noch) ist das Programm:

Es kennt zwei Modi zum Abschalten des Verstärker - reagieren auf Mute, also abschalten wenn auf der Tastatur oder im Mixer das ausgewählte Gerät auf Mute geschalten wird sowie reagieren auf Stille. Dazu wird periodisch die Ausgabelautstärke erfasst, ist diese für den eingestellten Zeitraum unter dem angegebenen Schwellenwert gehen ebenfalls die Lichter aus. Zusätzlich kann man die Anlage manuell ein- und ausschalten.

Tivia

  • Ursprünglich wollte ich die Firmware mit AVR Studio 5 schreiben. Aus mir noch unbekannten Gründen lässt sich damit V-USB nicht kompilieren
  • Die Hardware funktionierte auf dem Steckbrett prima, auf Lochraster im ersten Versuch (und nach zwei Änderungen) überhaupt nicht. Deshalb gibt es noch keinen Stromlaufplan.
  • Ursprünglich sollte die Hauptarbeit im C#-Programm in Program.cs stattfinden. Allerdings lassen sich innerhalb von Eventhandlern scheinbar keine Timer starten - die wollen über Invoke bedient werden. Da es in der Popelklasse kein Invoke gibt, ging der ganze in ein Dummyform. Nicht schön, funktioniert aber.
  • Nach dem Speichern der Einstellungen sollte man das Programm neu starten. Hauptsächlich da ich zu faul war die entsprechenden Routinen zu schreiben. Abgesehen davon funktioniert eigentlich alles. Wenn etwas nicht funktioniert: Exceptions werden nicht abgefangen.


Download

Datei:Audioslave.zip