Nachdem es bereits etliche Internetradios auf Basis des RPi gibt, habe ich vor, zur Abwechslung mal ein DAB+-Radio zu bauen.
siehe auch hier
Verlinkungen zu einigen weiteren DAB+-Projekten hier im Forum:
* Software zum Auslesen der programmbegleitenden Daten bei einem DAB+-Radio
Liste wird fortgesetzt...
1. DAB+-Radioempfang testen
Um einigermaßen schnell zu Ergebnissen zu kommen, begann ich meine Arbeiten mit dem MonkeyBoard PRO. Darauf befindet sich im Wesentlichen das DAB+-Empfangsmodul T2_L4A_8650C von KeyStone. Ansonsten befindet sich auf dem MonkeyBoard noch ein bereits programmierter PIC18F14K50-Mikrocontroller, der an der USB-Schnittstelle einen virtuellen COM-Port zur Verfügung stellt. Somit können am RPi über den UART-Port ttyACM0 serielle Kommandos zur Steuerung an das DAB-Empfangsmodul gesendet werden.
Anmerkung: Möglicherweise könnte man aus dem MonkeyBoard alleine und ohne RPi ein vollwertiges DAB+-Radio bauen, wenn man den PIC für Tastensteuerung (und LED-Ausgabe) umprogrammiert. --> offen...
Hier jedenfalls die Ausgabe von dmesg:
[ 2.611591] usb 1-1.2: new full-speed USB device number 5 using dwc_otg
[ 2.751209] usb 1-1.2: New USB device found, idVendor=04d8, idProduct=000a
[ 2.751228] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2.751237] usb 1-1.2: Product: CDC RS-232 Emulation Demo
[ 2.751245] usb 1-1.2: Manufacturer: Microchip Technology Inc.
[ 3.114946] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device
[ 3.114946] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
Von der Monkeyboard-Internetseite kann auf dem RPi mit wget http://www.monkeyboard.org/images/products/dab_fm/raspberrypi_keystone.tgz das C++-Demoprogramm testdab.cpp heruntergeladen werden, mit dem ich meine ersten Tests durchführte. Diese Software ist leicht verständlich, um schnell kleine Anpassungen vornehmen zu können, aber den Softwareteil für dieses Projekt werde ich mir ohnehin erst später vorknöpfen... --> offen, ab Beitrag #6
Hauptsache es läuft erst einmal -- leider nur Bayern 3, für meinen Lieblingssender Radio BOB! reicht die Feldstärke bei mir im Bastelkeller leider nicht aus
Ich werde noch querchecken, ob das generell nicht besser geht, oder ob nur die mit dem MonkeyBoard mitgelieferte Mini-Teleskopantenne (ausgezogen 34cm lang + 1,5m Anschlusskabel), im folgenden Drexantenne® genannt, so schlecht ist. --> gelöst in Beitrag #5
* Neben DAB und DAB+ kann das KeyStone-Modul auch UKW empfangen. Hier habe ich im Keller das typische Stereorauschen bei schwachem Empfang.
* Das MonkeyBoard unterstützt auch die DAB-SlideShow: Das sind in den ausgesendeten Daten enthaltene Grafiken (320 x 240 Pixel, Format genormt?)
* ...und natürlich die entsprechenden DAB-Textinformationen inkl. Real Time Clock (RTC)
* UKW: Teilmenge aus den RDS-Daten (Stationsname, RDS-Text, Genre, RTC)
Die Audioausgabe des MonkeyBoards läuft entweder analog über eine 3,5mm-Klinkenbuchse oder digital über I²S. Damit komme ich schon zum zweiten Punkt.
2. I²S-Audiosignal über HifiBerry DAC+ aufbereiten
Ein sauberes I²S-Signal hat schon was und ich würde es gerne über den I²S-Port einer HifiBerry-Soundkarte wiedergeben, alleine schon um hardwaremäßig nur einen Audioausgang zu haben. Der Verdrahtungsaufwand sollte vorne beim I²S-Bus am kleinsten sein, anstatt hinten kompliziert mehrere Ausgangsquellen (MonkeyBoard / RPi) irgendwie zu verwalten und ohne Eingriffsmöglichkeit über ALSA auf der Radioseite
Also habe ich auf einem Breadboard nur die relevanten Signale zwischen RPi und HifiBerry DAC+ gesteckt und das Ganze erfolgreich mit meinem yamuplay.py getestet -- prinzipiell mal keine Kunst. Mir ist klar, dass die HifiBerry-Karten nur dann die digitalen Audiodaten am I²S-Bus in Sound umwandeln, wenn am I²C-Steuerbus (RPi-Pins 3 (GPIO2, SDA) und 5 (GPIO3, SCL)) auch die entsprechenden Steuerkommandos an die HifiBerry-Karte geschickt werden. Ich habe die drei Leitungen für I²S zwischen RPi und HifiBerry getrennt und stattdessen den I²S-Bus des MonkeyBoards mit der HifiBerry-Karte verbunden. Nachdem es zunächst nicht lief und ich mich dazu herabließ, mein Oszi (ein Hameg HM407 -- ein cooles Teil) hervorzukramen, nur um festzustellen, dass die I²S-Signale vom RPi und MonkeyBoard prinzipiell gleich sind, steckte ich die I²S-Leitungen wieder auf den RPi um und dann nochmals auf das MonkeyBoard -- und plötzlich lief es! Das lag wohl nur an schlechten Kontakten auf dem Experimentierboard...
Die Quintessenz sind folgende Erkenntnisse:
* Nach Trennen einer I²S-Leitung und erneutem Anstecken läuft die Audiausgabe über I²S sofort wieder an
* Nach Umstecken auf das MonkeyBoard muss an die HifiBerry-Karte per I²C ein Kommando "Audioausgabe ein" geschickt werden.
* Eine Wiedergabepause (über fake-yamuplay) stört nicht, weil der I²S-Takt ("bit clock") am MonkeyBoard weiterläuft.
* Ein vollständiger Wiedergabestop (über fake-yamuplay) führt zum Ausschalten der Audioausgabe (fehlendes Taktsignal "bit clock" EDIT: Wiedergabe auf HifiBerry DAC+ wird über I²C-Steuerkommando vom RPi gestoppt)
* Zumindest beim HifiBerry DAC+ wirkt die ALSA-Lautstärkeeinstellung auch auf das MonkeyBoard!
* Test erforderlich, ob dies auch bei HifiBerry DAC (ohne Plus) und HifiBerry MiniAmp funktioniert, die keine HW-Lautstärkeregelung unterstützen.
Hier muss ich bei Gelegenheit mal schauen, ob meine MiniAmp-ALSA-Einstellungen vom Raspiblaster funktionieren, wenn die I²S-Daten vom MonkeyBoard und nicht vom RPi kommen... --> gelöst in Thread Stromlaufplan HifiBerry MiniAmp 1.0, Beitrag #2
* Im fertigen Projekt müssen die drei I²S-Signale zwischen den Quellen RPi und MonkeyBoard (über Relais oder evtl. Optokoppler?) umgeschaltet werden, um das Ding dann auch als Internetradio oder vollwertigen Mediaplayer (omxplayer, MPD, mplayer, ...) verwenden zu können.
3. Versuchsaufbau
Der funktionierende Versuchsaufbau war schließlich so, wie in diesem EAGLE-Schaltplan schematisch dargestellt:
Impressionen vom Versuchsaufbau
Ich werde Euch auf dem Laufenden halten.
Gut's Nächtle!