Montag, 17. Juli 2023

Saba TV-Journey mit iRadio

 

die ersten 6 Bilder sind von Juli 2022. So lange bin ich schon am planen und überlegen wie ich dieses Mini-Fernsehen wieder nutzbar machen kann. Wie man sieht funktionierte es, hatte aber einen Displayschaden. Zum Testen speiste ich ein Modulatorsignal über die Antenne ein:

Für eine Video-Wiedergabe kommen nicht viele Prozessorboards in Frage. Ein normaler Raspberry Pi findet keinen Platz im Gehäuse, zumal das Batteriefach alleine schon den halben Platz ausfüllt. Wohl aber ein Raspberry Zero, auch wenn der mit seinen Micro/Midi-Anschlüssen alles wieder komplizierter macht.  Per fbcp-ili9341 soll er ein 2,4 Zoll SPI-LCD treiben. Player hatte ich schon mal einige vorgestellt. Ich entschied mich aber für iRadio von Bernhard. Es ist einfach am vielseitigsten, ich kann ganz gut damit umgehen und möchte auch in Übung bleiben.

Einbau des Display

die originale Elektronik wanderte bis auf das Tastenfeld und den Lautsprecher in die Bastelkiste. Wie üblich konstruierte ich einen Displayrahmen. Dieser wird an vorhandene Schraubbolzen montiert und trägt einen weiteren Rahmen zur Befestigung des Raspberry Zero.


 

erster Installationsschritt

Ich spielte ein Buster 10 Image auf eine 32GB MicroSD und installierte erst mal fbcp-ili9341.  Hier sieht man den seitlichen Versatz der Anzeige und das Bild steht auf dem Kopf. Die seitliche Ausrichtung korrigierte ich durch Ändern des Displayrahmens, die Anzeige drehte ich durch einen Rotations-Parameter im build-string von fbcp-ili9341.

Verkabelung des Display

im ersten Versuch war das Display noch mit Dupont-Kabeln mit dem Zero verbunden. Die Konstruktion baute aber 3mm zu hoch und der Gehäusedeckel passte nicht mehr. Diese 3mm gewann ich durch eine geniale Idee. Ein 40pol Schneidklemmen-Pfostenverbinder, wie er bei alten IDE Kabeln üblich war, passt genau auf die GPIO-Leiste. So habe ich nicht nur den Platzgewinn, sondern auch eine sichere, steckbare Verbindung. Und die Kabel sind einfach abzuzählen. Die rote Markierung des Flachbahnkabels liegt auf Pin1 der GPIO-Leiste und die Zählung der Pin ist fortlaufend. Mit dem anderen Ende eines IDE-Kabels wäre auch die Kabelschleife weggefallen, aber ich hatte grad nur dieses Teilstück griffbereit. Es stammte aus einem Centronics-Adapter und deshalb fehlen ihm auch noch die letzten 4 Leitungen. Auch ein Grund warum ich den Stecker nicht umdrehen konnte.

Die Steuerung


zur Steuerung wollte ich die 5 vorhandenen Tasten nutzen. Das zugehörige flexible Flachbahnkabel lies aber keine Kontaktierung zu. Die leitende Beschichtung löste sich beim Löten einfach auf. Ich höhlte dann die Tasten aus und setzte Microschalter dahinter. Der Rahmen mit den Tasten wurde dann wieder eingesetzt und die originale Optik war wieder hergestellt.

Audioausgabe

Für die üblichen Arten der Tonausgabe über HDMI-Adapter oder USB-Soundkarte ist kein Platz vorhanden. Eine Klinkenbuchse gibt es am Zero nicht. Ein PWM Ausgang läßt sich aber nachrüsten, so wie hier beschrieben:

Analogen Audioausgang beim Pi Zero nachrüsten

Die Schaltung habe ich für Mono-Bertrieb etwas abgeändert. Und zwar führen die 270 Ohm Widerstände auch die beiden Kanäle zusammen und Hoch- und Tiefpass sind nur noch einmal vorhanden. So sieht mein Versuchsaufbau aus:

hier hätte jetzt noch eine kleine NF-Endstufe eingebaut werden müssen. Wegen den Nachteilen (Platzbedarf und Störgeräusche) verwarf ich die PWM Lösung. Aber gut zu wissen dass es diese Alternative gibt. Stattdessen setzte ich einen Max98357-I2S Baustein ein, welcher direkt eine 3W Endstufe beinhaltet und wegen der digitalen Übertragung einen störungsfreien, hochqualitativen Sound liefert. Der machte es übrigends notwendig das Buster 10 durch ein aktuelles Bullseye 11 zu ersetzen.

Auf dem folgenden Bild liegt der Max98357 noch lose im Gerät, zu Installationszwecken ist ein HDMI-Bildschirm und eine USB-Tastatur angeschlossen:



hier ist der Max98357 mittels einer kleinen Halterung angeschraubt:

Das Kabel des USB-Netzteiles für die Spannungsversorgung führt durch das Batteriefach und durch eine kleine Knabberstelle nach außen:


 

damit steht die Hardware. Die Software beschreibe ich im nächsten Abschnitt.

Software

Bei der Beschreibung der Software will ich nicht wieder von ganz vorne beginnen. Das Aufspielen eines Raspbian oder Raspberry Pi OS und die Installation und Konfiguration von iRadio sind mehrfach und umfangreich bereits im Forum beschrieben. Vielmehr will ich nur auf Besonderheiten, Spezialitäten und Neuerungen eingehen.
Ich benutze gerne eine älteres Buster 10 Image. Neuere Versionen von Raspberry OS bieten oft unangenehme Überraschungen. Für meine erste Lösung der Tonausgabe mit PWM-Nachrüstung war das auch in Ordnung. Meine zweite und endgültige Lösung mit einem I2S-Baustein Max98357 hingegen verlangte ein aktuelles OS. Diesen Baustein hatte ich bisher nur bei ESP32 Systemen eingesetzt. Das ist in Verbindung mit einem Raspberry also Neuland für mich.

Zunächst einmal gelang es mir nicht dem Max98357 überhapt einen Ton zu entlocken. Egal nach welcher Anleitung ich ihn installierte. Bis ich feststellte dass ohne den Tastensteuerungsdaemon gpiod der Ton funktionierte. Den Fehler konnte ich dann einkreisen auf einen bestimmten gpio, nämlich gpio27 (Pin 13). Sobald ich diesem eine Taste zuwies verstummte der Ton. Die entsprechende Funktion (Programm-) legte ich dann auf gpio22 (Pin 15). Dann erwies sich der Baustein auf einmal als unproblematisch.

Für den Max98357 gibt eine einfache Installation und eine aufwändige, die beide funktionieren. Auf beide will ich hier eingehen. Die einfache Variante besteht einfach aus ein paar Einträgen in /boot/config.txt:

Code:
dtparam=audio=on
dtoverlay=hifiberry-dac
dtoverlay=i2s-mmap
 
Quelle: Raspberry Pi Zero, audio output via I2S

Jetzt hat der Max98357 aber die unangenehme Eigenschaft in jeder Tonpause in einen Ruhemodus zu gehen. Und der Ton setzt dann mit einem störenden Knacken wieder ein. Die zweite Möglichkeit der Installation berücksichtigt diese Eigenart indem sie den Baustein durchgehend beschäftigt. Was aber auch etwas an Ressourcen beansprucht.

Die Installation wird ausgeführt mit einem Script von adafruit, welches auf einem Ur-Script von Pimoroni aufbaut:
 
Code:
curl -sS https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/i2samp.sh | bash
 
Dieses muss mindestens 3x ausgeführt werden! Mit einer Abfrage (playback in background?) kann man entscheiden ob man die Anti-Knack-Massnahme mit installieren will. Wenn es also eng wird mit der Rechenleistung oder es irgendwelche Inkompatibilitäten gibt dann kann man die Massnahme auch abwählen.

Quelle: Adafruit MAX98357 I2S Class-D Mono Amp

Weiterhin erwähnenswert wäre noch der von mir verwendete build-string für fbcp-ili9341:

Code:
cmake -DILI9341=ON -DGPIO_TFT_DATA_CONTROL=24 -DGPIO_TFT_RESET_PIN=25 -DSPI_BUS_CLOCK_DIVISOR=8 -DSINGLE_CORE_BOARD=ON -DARMV6Z=ON -DSTATISTICS=0 -DDISPLAY_ROTATE_180_DEGREES=OFF ..
 
Den Tastensteuerungsdaemon (Quelldatei: gpiod.c) änderte ich in der Art dass ich die Funktionen "weiter" und "halt" durch "volup" und "voldown" ersetzte. Ausserdem ergänzte ich ihn um eine fünfte Taste für den Mediaplayer. Hierbei gab es auch wieder eine seltsame Erscheinung, die ich zwar in den Griff bekam, aber nicht erklären kann. Schauen wir uns diesen Abschnitt an:


Code:
        if (val_prg_hoch == 0)
                system("echo \"next\" | nc 127.0.0.1 9294 -N");

        if (val_prg_runter == 0)
                system("echo \"prev\" | nc 127.0.0.1 9294 -N");

        if (val_prg_halt == 0)
                system("echo \"volup 2\" | nc 127.0.0.1 9294 -N");

        if (val_prg_weiter == 0)
                system("echo \"voldown 2\" | nc 127.0.0.1 9294 -N");

        if (val_prg_media == 0)
                system("echo \"plst\" | nc -u 127.0.0.1 7230 -w 10");
 
speziell die letzte Zeile. Das Kommando für den Mediaplayer (plst) sendet über einen anderen Port. Der originale Parameter "7230 -w 0" führte zu einem Einfrieren des gpiod bei Betätigung der Mediataste. Durch "7230 -w 10" arbeitet er jetzt problemlos. Ich weiß nicht warum das so ist.

Quelle für den Mediaplayer: unsere FAQ zum iRadio post#420

ich sehe aber alle Probleme als gelöst an und das Fernsehen/Radio/Videoplayer funktioniert hervorragend. Der kleine Lautsprecher klingt überraschend gut und klar. Was noch aussteht ist der Einbau eines USB-Sticks. Hierzu habe ich kurze Adapter bestellt, kann aber noch nicht sagen ob ich einen solchen im Gehäuse unterbringe.

Nachtrag:

hier noch die Landkarte

it den neuen Adaptern von Micro-USB auf USB bekomme ich den Stick gut erreichbar im Batteriefach unter. 


ich hab dann noch etwas mehr vom Batteriefachboden weggeschnitten und kann jetzt auch größere Sticks einsetzen.
Dann war noch die Grundauflösung auf 320 x 240 einzustellen, damit man auch die Konsole lesen kann.
Ich lasse iRadio automatisch im Mediaplayer-Modus starten. Internetfernsehen ist, warum auch immer, auf all meinen Geräten problematisch. Sehr lange Umschaltzeiten und kaum ein flüssiger Stream. 

 
















 

Keine Kommentare:

Kommentar veröffentlichen