HiFi Audio Streamer auf Basis von Raspberry PI2 und Hifiberry DAC+ Pro

LordLoetkolben

Thomas ist aktiver Löter seit 36 Jahren und sieht die Welt in 16 Graustufen (Alternativtheorie: 98/2) ;-)

Liebe Freunde des gepflegten Lötkolbenschwingens, diesmal werde ich mal über ein größeres Projekt schreiben – einen HiFi Audio Streamer auf Basis eines Rhaspberry PI2 ! 🙂

Teil 1 – Vorgeschichte

Zuerst möchte ich einmal erleutern, was mich auf die Idee zu diesem Projekt brachte.

In meinem HiFi equipment befindet sich noch viel „klassische“ Zuspielertechnik die ich sicher nicht wegwerfen oder verkaufen werde (z.B. Linn Plattenspieler, getunter Onkyo DX7555 etc.).

ABER: Als FM Tuner und „Multimediaplayer“ (d.h. Internetradio und Audio Streamingclient) habe ich bisher einen Muvid IR715 im Einsatz.

Muvid IR715
Muvid IR715

Ganz davon abgesehen, dass die Bedienung dieses Gerätes eine echte Strafe ist, kann dieses Gerät keine hochwertigen FLAC abspielen. Auf meinem Medienserver habe ich aber zwischenzeitlich fast die Hälfte meiner CDs als FLAC abgelegt und würde diese auch gerne auf der HiFi Anlage im Wohnzimmer spielen ohne sie für den Muvid in MP3 wandeln zu müssen.

Schlussfolgerung:

In Anbetracht der Tatsache, dass alle FM Sender inzwischen als Internetradio Streams verfügbar sind, wollte ich mir jetzt also ein „Audio Media Center“ bauen, dass die Bezeichnung HiFi auch wirklich verdient und ohne einen FM Receiver auskommt und dann den Muvid in „Rente“ schicken !

Die klassischen Audiostreamer (z.B. Teufel) fand ich weder von der Bedienung noch vom Klang her als „prickelnd“.

Nach kurzer Suche im Internet wurde ich auf drei Projekte aufmerksam, die alle auf der gleichen Ursprungsentwicklung entstanden sind und den Raspberry Pi als Streaming Basis verwenden (z.T. auch noch für andere Minicomputer verfügbar)

Dies Projekte sind: Volumio, Rune Adio, und Moode Audio.

Rhaspberry PI2
Rhaspberry PI2

Nun – der blanke Rhaspbery PI selbst ist ja nicht gerade für seinen guten Klang bekannt und ein externer USB DAC ist hier auch nicht optimal. Für die USB Ausgabe wird recht viel Rechenleistung benötigt, die der RPi nicht hat, und daher leidet der Klang durch Taktschwankungen (Jitter). Natürlich gibt es auch USB DACs im 4 stelligen Bereich, die Jitter Eliminator Schaltungen beinhalten und das dann wieder gerade biegen – das passt vom Budget aber nicht zu einem RPI Projekt 😉

Für den RPi 2 gibt es aber zwischenzeitlich einige interessante DACs (Digital Analog Converter) die auf den Pfostenstecker (GPIO) des RPI gesteckt werden und I2S als Protokoll benutzten. Die I2S DACs sollen deutlich besser klingen als USB DACs – allerdings ist I2S nicht für die Übertragung der Daten über eine größere Strecke geeignet und daher sollte man die DAC Platinen auch wirklich auf den GPIO stecken und nicht irgendwohin verlängern !I2S DAC - nur ein Beispiel

I2S DAC – nur ein Beispiel

Hier schreibt jemand, warum er der Meinung ist, dass I2S besser klingt. https://volumio.org/raspberry-pi-i2s-dac-sounds-so-good/   Diese Meinung kann ich aber nur teilweise teilen – denn die Ursache des besseren Klangs hat meiner Meinung nach andere Ursachen als den kürzeren Signalpfad (das werde ich aber in den folgenden Teilen noch erläutern)

Auf Komfort wollte ich natürlich auch nicht verzichten und wollte daher gerne auch ein System dass Hardwarelautstärkeregelung beherrscht. (Softwarelautstärkeeinstellung kostet nämlich Auflösung und daher Klangqualität!).

Und dann kam mir noch die Idee, dass ich eigentlich auch ganz gerne sehen möchte, was da gerade spielt .. also wollte ich gerne ein Display … Wünsche über Wünsche 🙂

 

Teil 2 folgt in Kürze – dort werde ich erläutern, welche Basiskomponenten ich für das Projekt gewählt habe und warum !

 

Viele Grüße und keep on DIY,

Euer Löti

 

pinterest

Arduino MAX485 Library

swarkn

swarkn

Stefans Schwerpunkte liegen im Umfeld von Betriebssystemen, serverbasierten Diensten und im weitesten Sinne in allgemeiner technischer Infrastruktur. Tagsüber mit strategischen IT-Themen beschäftigt, tackert er Nachts doch mal gerne ins schwarze Loch.
swarkn

Hallo zusammen,

EDIT (05.05.2015): Projektseite mit mehr Details erstellt.

vor ein paar Tagen habe ich euch in meinem Blogpost über das „TTL to RS-485 module“ berichtet. Nun möchte ich euch gerne zeigen, wie Ihr damit über einfachste Methoden eine Kommunikation zwischen zwei Arduinos aufbauen könnt. Dazu habe ich eine „Arduino MAX485 Library“ (s. github) geschrieben, die euch dabei helfen kann.

Zu allererst stellt folgende Verdrahtung her:

Arduino MAX485 LibraryDas passt alles super auf ein Breadboard. Keine Angst wegen der fehlenden Widerstände. Auf diese Entfernung spielt das keine Rolle. Wenn ihr wie ich die großen TTL to RS-485 Module habt, kein Problem. Ich habe mir mit einem Testboard (s. Titelbild) ausgeholfen. Hier die Verdrahtung in tabellarischer Form:

Arduino LinksMAX485 Links
VIN5V
GNDGND
D8Pin2 (RE)
D9Pin3 (DE)
D10Pin1 (RO)
D11Pin4 (DI)
MAX485 LinksMAX485 Rechts
Pin8 (VCC)5V
Pin7 (B)Pin7 (B)
Pin6 (A)Pin6 (A)
Pin5 (GND)GND

Der rechte MAX485 muss natürlich analog des linken MAX485 aber mit dem rechten Arduino verbunden werden. Damit ist der Testaufbau beendet.

Verwenden der Arduino MAX485 Library

Ladet jetzt die MAX485 Bibliothek von uns aus github herunter. Diese eignet sich übrigens hervorragend, um eigene kleine anwendungsspezifische Protokolle zu schreiben. Extrahiert die ZIP-Datei in euren libraries-Ordner. Es müsste sich nun ein „MAX485-master“ Ordner darin befinden. Benennt diesen einfach in „MAX485“ um. Jetzt seid ihr startklar.

Programmiert den linken Arduino mit dem „EIA-485_Master“ Sketch. Den rechten Arduino programmiert ihr mit dem „EIA-485_Slave2USB“ Sketch.

Um die Funktion des Testaufbaus zu verfolgen, belasst den rechten Arduino via USB am PC verbunden und öffnet die serielle Konsole des USB-Ports. Die Ausgabe sollte ungefähr so aussehen:

Arduino MAX485 Library

Unter Umständen kann – wie auf dem Screenshot zu sehen – die Übertragung gerade bei den ersten Bytes nicht fehlerfrei verlaufen. Ein Grund, weswegen man sich bei eigenen Protokollentwicklungen sicher das ein oder andere zum Thema Error-Detection einfallen lassen muss.

Ich hoffe ihr findet den Artikel und meine einfache Arduino MAX485 Library irgendwie hilfreich. 🙂

Viel Spaß dabei,
Swarkn

pinterest