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

TTL to RS-485 module

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,

ich möchte euch heute gerne die Baugruppe „TTL to RS-485 module“ vorstellen.

EDIT (02.05.2016): Wiring ergänzt.
EDIT (03.05.2016): Einfache Arduino MAX485 Library geschrieben.
EDIT (05.05.2015): Projektseite mit mehr Details erstellt.

Die beschriebene Baugruppe selbst ist nicht brandneu. Wann sie allerdings das erste Mal erschienen ist konnte ich nicht herausfinden. Erste Schaltungsbeispiele kommen aber aus den 90er Jahren.

Sie ermöglicht Daten über Distanzen von bis zu 1.2km zu übertragen, welche mit I2C oder OneWire nie erreicht werden könnten. Im Grunde konvertiert sie Serielle Bit-Stöme und überträgt diese via dem technischen Standard RS-485 (eigentlich EIA-485) über eine Zweidrahtverbindung zu einem Empfänger.

Der EIA-485 Standard stellt bei Verbindungen zu anderen Geräten die physische Verbindungsschicht des OSI Schichtenmodells dar und beschreibt daher nur die physischen und elektrischen Spezifikationen einer Datenübertragung. Von einem Übertragungsprotokoll wie IP (OSI Schicht 3) oder TCP (OSI Schicht 4) sind wir hier mal ganz weit weg.

Trotzdem – wenn so vieles fehlt, warum kann die Baugruppe so interessant sein und wie kann sie in räumlich verteilten Projekten gut eingesetzt werden? Den Antworten auf diese Fragen möchte ich mich in der folgenden Baugruppenbeschreibung nähern.

Beschreibung „TTL to RS-485 module“

Baugruppe

NameTTL to RS-485 module
Revisionunbekannt
Designunbekannt
Herstellerunterschiedlich (z.B. LC Tech. Inc)

Beschreibung

Der Hauptzweck dient der Verwendung einer standardisierten physischen Verbindung von mehreren Busteilnehmern. Man würde sich für die Verwendung beispielsweise deshalb entschieden, um keinen eigenen Verbindungsstandard zwischen einzelnen Baugruppen oder Sensoren entwickeln zu müssen.

Der EIA-485 Standard sieht das Verbinden von bis zu 32 Slaves (Empfänger) an einen Master (Sender) vor. Dabei sind je nach Kabellänge Übertragungsgeschwindigkeiten von bis zu 12Mbps möglich.

Die Baugruppe bietet eine vollständige Schaltung eines EIA-485 Schnittstellentreibers/-Empfängers, welche direkt kompatibel zu der seriellen Schnittstelle eines Arduinos ist.

Schaltungsbeispiele eines Schnittstellentreibers findet ihr unter anderem in einem pdf-Dokument auf embeddedsys.com.

Wie man einen EIA-485 Bus aufbaut, findet ihr in einem sehr guten pdf-Dokument von Texas Instruments.

Übertragungsprotokolle

Da es keine spezielle Treibersoftware für diese Baugruppe gibt, möchte ich euch hier auf einige mögliche Protokolle zur Kommunikation zwischen Busteilnehmern hinweisen.

MODBUShttp://www.modbus.org

Download | Spezifikation

PROFIBUShttp://www.profibus.com

kein Download | Spezifikation

DMXhttp://www.esta.org (auch RDM)

Download | Spezifikation

Chipsatz

MAX485maxim integrated

Bilder der Baugruppe

 TTL to RS-485 moduleTTL to RS-485 module

 Das Wiring

Arduino UNO/NanoTTL to RS-485 module
GNDGND
5VVCC
RxD (digital Pin 0)RO (receiver output)
TxD (digital Pin 1)DI (driver input)

Das Wiring (Control Input Voltage)

is master, sending:
receiver output enable (RE)=HIGHreceiver output (RO) = disabled
driver output enable (DE)=HIGHY & Z mode: driver output
is slave, listening:
receiver output enable (RE)=LOWreceiver output (RO) = enabled
driver output enable (DE)=LOWY & Z mode: line receivers
is master, not sending:
receiver output enable (RE)=HIGHreceiver output (RO) = disabled
driver output enable (DE)=LOWY & Z mode: line receivers

Original Beispiel-Code

MODBUS/tree/master/examples/Basic/Basic.pde

Unser Beispiel-Code

 Leider gibt es aktuell noch keinen Beispiel-Code von uns. Möglich wäre aber:

– Netzwerk mehrerer Umgebungssensoren (Temperatur, Luftfeuchtigkeit, Luftdruck, etc.)

Viel Spaß!

swarkn

pinterest