Kopfhöreranschluss für den Odroid-Go nachrüsten

Den Odroid-Go ist ein Tausendsassa. Man kann ihn als mobile Spielekonsole benutzen. Aber er ist auch eine ESP32-Plattform mit großer Anzeige, Sound, SD-Kartenleser und Akku. Unter diesem Aspekt hatte ich ihn ja schon hier kurz vorgestellt.

Den Odroid-Go kann man also durchaus als ESP32-Plattform sehen, die man programmieren kann (GPIO Pinout und Library Funktionen erkläre ich hier). Auch dazu können wir die gewohnte Arduino-IDE (Einrichtung der IDE erkläre ich hier) benutzen. Die beim Kompilierte erzeugte Datei müssen wir dann allerdings noch zu einer Odroid-Go-Firmware umwandeln und auf den Odroid-Go hochladen (wird hier erklärt).

Was dem Odroid-Go in seiner Funktion als Spielekonsole fehlt, ist ein Kopfhöreranschluss. Möchte man während der Zugfahrt eine Runde zocken, möchte man natürlich Sound, aber gleichzeitig nicht unangenehm auffallen und seine Mitreisenden stören. Dumm, dass der Odroid-Go da nur einen Lautsprecher hat.

Viel besser wäre natürlich, den Sound per Kopfhörer zu genießen. Das ist auch der Klangqualität zuträglich. So toll ist der eingebaute Lautsprecher nun auch nicht.

Damit machen nachinstallierbare Firmwares wie die OGO-Shell mit integriertem MP3-Player so richtig Sinn.

Aber auch die Spiele-Emulation lässt sich per Tastenkombination (Volume halten und D-Pad right) dazu überreden, zwischen Lautsprecher und sogenanntem DAC - was dann dem Kopfhöreranschluss entspricht - umzuschalten. DAC steht hier für Digital Analog Konverter, also eine Schaltung, die aus dem digitalen Sound-Signal wieder ein anloges für di driekte Lautsprecherwiedergabe macht.

Das I2S-Protokoll

Wie in meinem Artikel zur Vorstellung des ESPDUINO-32 aufgeführt, beherrscht der ESP32 auch das I2S-Protokoll. Das hört sich nicht nur so ähnlich an wie das I2C-Protokoll, sondern stammt ebenfalls von Philips (heute NXP Semiconductors).

I2S steht für IIS und damit für Inter-IC Sound und definiert ein Protokoll zur Übertragung von Sound auf digitalem Wege. Dazu werden gegebenenfalls analoge Audiosignale (etwa von einem Mikrofon) digitalisiert und diese über eine bestimmte High-Low-Abfolge von einem IC zu einem anderen geschickt. Dabei geschieht die Kommunikation immer nur in eine Richtung. Philips hat dieses Protokoll entwickelt, um z. B. innerhalb eines Fernsehers vom Audiosignale vom Tuner zum Lautsprecher zu übertragen. Später wurde das Protokoll Quasi-Standard und ist heute weit verbreitet.

Für die Übertragung werden drei Leitungen (neben VCC und GND) benötigt: Die genaue Spezifikation und die Funktionsweise kann man dem Datenblatt entnehmen. Nur soviel: Bit Clock stellt einen Takt zum Timing der High-Low-Wechsel dar, Word Select regelt u. a., ob auf einem PCM-kodierten Signal gerade der linke oder rechte Stereokanal übertragen wird (geschieht immer abwechselnd) und die serial data beeinhaltet den eigentlichen Sound (also die Frequenzen).

Mit einem DAC zur analogen Ausgabe

Da I2S Quasi-Standard ist gibt es dafür natürlich auch fertige Module, um analogen Sound nach I2S zu kodieren oder I2S-Sound wieder zu analog zu dekodieren. Wir benötigen das Zweite. Da wir keine Lautsprecher betreiben wollen, reicht ein einfacher Digital zu Analog Wandler (DAC: digital to analog converter) ohne Verstärker.

Da gäbe es zum einen Module, die auf dem NXP-Chip UDA1334A basieren. Damit trifft man sicher eine gute Wahl, wenn der Chip vom Erfinder des Protokolls selbst stammt. Kompatibilitätsprobleme sind damit eher nicht zu erwarten:



Ich habe mich für ein Modul CJMCU-1334 entschieden, da dieses den Kopfhörer an der Seite herausführt. Es gibt wohl auch Versionen, wo die Klinkenbuchse 90° gedreht aufgelötet ist und damit der Kopfhöreranschluss nach hinten zeigt, aber das hat mir nicht so gut gefallen.

Das CJMCU-1334 Modul ist im Internet zu finden zum Beispiel (Preise Stand März 2020) ... Aber auch ein Modul mit dem Chip PCM5102 von Texas Instruments ist sicher keine schlechte Wahl. Hier ist die Klinkenbuchse meist um 90° gedreht. Mein CJMCU-1334-Modul preiste mein Händler wie folgt an: CJMCU-1334 UDA1334A I2S Audio Stereo Decoder Module for 3.3V - 5V Features: This fully-featured UDA1334A I2S Stereo DAC breakout is a perfect match for any I2S-output audio interface. 3.3V - 5V logic levels (a rarity), and can process multiple different formats by setting two pins to high or low. The DAC will process data immediately, and give you a clear, analog, stereo line level output. It's even cool with MCLK-less I2S interfaces such as the Raspberry Pi (which it's ideal for) - a built in PLL will generate the proper clock from the incoming signal. For inputs, you can use classic I2S (the default) or 16-bit, 20-bit or 24-bit left justified data. You can set it up to take an input system/master clock but we default-set it to just generate it for you, so you only need to connect Data In, Word Select (Left/Right Clock) and Bit Clock lines. If you want, there's a mute pin and a de-emphasis filter you can turn on. Natürlich tut es auch jeder andere I2S-DAC. Schließlich ist I2S ein definierter Standard. Allerdings sollte man bei der Modul-Größe doch ein bisschen acht geben, damit es nicht zu sehr aufträgt.

Anschluss des I2S-DAC (CJMCU-1334) an den Odroid-Go

Werfen wir einen Blick auf die Pinbelegung des Odroid-Go-Headers, den 10 herausgeführten Anschlüssen:



Die gibt leider nicht genau Auskunft, wo denn nun die herausgeführten I2S-Leitungen liegen. Darum hier kurz und schmerzlos: Pin GPIO I2S-Bedeutung 3 IO12 Word Select 4 IO15 Data in 5 IO4 Bit Clock Demzufolge ist unser CJMCU-1334-Modul folgendermaßen anzuschließen: Odroid Go CJMCU-1334 andere Module auch Pin 1 GND GND Pin 3 IO12 WSEL LCK, LCLK Pin 4 IO15 DIN Data Pin 5 IO4 BCLK BCK, SCLK, SCK Pin 6 3.3V VIN VCC, 3V3 Zuerst habe ich erstmal die Verkabelung lose ausprobiert:



was von einem schnellen Erfolg gekrönt war. Den hatte ich gar nicht erwartet, wo die Kabel nur lose in den Lötlöchern steckten.

Aber damit war klar, dass das Modul nicht defekt und die Verkabelung richtig ist.

Als nächstes suchte ich mir ein passendes Stück einseitige Lochrasterplatine und sägte und feilte diese auf die Breite des Odroid-Go. Darauf lötete ich das DAC-Modul fest.



Dann habe ich einen gewinkelten 6-poligem Header in die Odroid-Go-Buchse gesteckt und mit einem zweiten (geraden Header) die Platine angelötet und mit fröhlich bunten Kabeln passend mit dem Modul verbunden. So kann ich die Platine von hinten ein und abstecken. Die Platine befindet sich dann huckepack hinten an der Rückseite des Odroid.

Wenn man den Odroid normal zum Spielen in der Hand hält, kommt man mit den Fingern gar nicht erst an die Platine. Rechts am Odroid kann ich dann meinen Kopfhörer anschließen.



Man könnte jetzt so spielen und ggf. die Platine noch ein bisschen mit Klebeknete oder Tesafilm sichern, aber da ich ein kleiner Perfektionist bis und außerdem stolzer Besitzer eines Anycubic i3 mega 3D-Druckers muss natürlich noch ein Gehäuse her.

3D-gedrucktes Gehäuse für die Platine

Passend zu dem Design des Odroid-Go soll es natürlich auch ein transparentes Gehäuse für die DAC-Platine sein. Das Gehäuse ist so gedacht, dass man es von hinten aufschiebt und es Führungsleisten links und rechts hat sowie einen Anschlag hinten, so dass man es gar nicht falsch herum aufstecken kann.

So kann nicht ein Pin in das falsche Loch geraten und im Dümmsten Fall irgendwas an der Elektronik beschädigen. Außerdem soll es oben einen offenen Rahmen haben, der den Odroid-Go oben einfasst, so dass nichts hin- oder herwackelt.




Das Ergebnis hat unten auf 1 cm Aussparungen, in denen genau die Platine mit den Bauteilen nach unten passt. Links gibt es eine große Fläche, auf dem die Lochrasterplatine aufliegt. In der rechten Hälfte gibt es Stützen, um die Lochrasterplatine bzw. DAC-Platine abzustützen.

Die Lochrasterplatine schließt nach oben plan ab. Darauf habe ich eine 1 mm dicke Platte mit doppelseitigem Klebeband geklebt, damit nichts scharfkantiges, etwa ein Kabelende, am Odroid-Boden schrammt.

Der Pfosten mit den Anschluss-Pins liegt damit in genau der richtigen Höhe und auch horizontalen Position (durch den linken und rechten Aufbau). Im Aufbau befinden sich Aussparung für USB-Anschluss links und Kopfhöreranschluss rechts. Der Kopfhöreranschluss ist vorne etwas weiter gefasst, damit ich überhaupt die Platine ins Gehäuse bringe.

Abschließend fügt sich oben ein Überhang ein, der an die Front des Odroid-Go stößt. Somit wird das Gehäuse von allen Seiten gehalten und hat einen festen Sitz. Man schiebt es von hinten auf. Damit kann man nichts mehr falsch machen. Durch das Design ist auch der DAC und die Anschlüsse gut geschützt und für den Transport in der Tasche geeignet.



Video

In folgendem Video zeige ich das Resultat - den DAC im 3D-gedruckten Gehäuse. Ein paar Anläufe hat es schon gebraucht, bis das Gehäuse genau passend war, aber jetzt bin ich mit dem Ergebnis zufrieden: