Mittwoch, 11. Mai 2022

Skalenscheibensimulation Telefunken Prelouc (iRadio)

mal wieder ein iRadio Projekt. Gedacht war es ursprünglich als ESP32 Projekt. Eine Skalenscheibe mit 1200 x 1200 Pixel auf einem 2,8" Display mit 320 x 240 Pixel Auflösung zu drehen hat den ESP32 allerdings überfordert. Für den Raspberry ist es hingegen kein Problem. Ich benutze dafür die Rundskalensimulation skale2. Das Skalenbild dazu wird einfach belassen, es tritt nicht in Erscheinung. Als Zeigerbild ist die Skalenscheibe hinterlegt. Da keine Transparenz benötigt wird benutze ich ein jpg statt einem png. Das 2,8" Display deckt in der Breite genau den Gehäuseausschnitt ab und zeigt immer nur einen kleinen Teilausschnitt der Skalenscheibe. Die Scheibe läuft also größtenteils ausserhalb des sichtbaren Bereiches.

Normalerweise beginne ich meine Vorstellung mit der Hardware und gehe später auf die Software ein. Hier mache ich es umgekehrt. Das Prelouc Gehäuse habe ich als Leergehäuse mit geklebten Bruchstellen bei ebay ersteigert und erst mal nur das Display mit Hilfe von Druckteilen eingesetzt. Ebenso habe ich einen Lautsprecher mit Schallwand und Stoff eingebaut. Ansonsten ist das Innenleben noch eine Baustelle.

Schauen wir uns erst mal den Film an:


 


Auf dem Raspberry 3B+ läuft das aktuelle Bullseye. 

als Treiber für den SPI-Bildschirm dient fbcp-ili9341 mit folgenden Build-Optionen:

Code:
cmake -DILI9341=ON -DSPI_BUS_CLOCK_DIVISOR=6 -DUSE_DMA_TRANSFERS=OFF -DDISPLAY_BREAK_ASPECT_RATIO_WHEN_SCALING=ON -DSTATISTICS=0 -DGPIO_TFT_DATA_CONTROL=24 -DGPIO_TFT_RESET_PIN=25 -DGPIO_TFT_BACKLIGHT=18 ..

der Start ist in der rc.local hinterlegt:

Zitat:sudo /home/pi/fbcp-ili9341/fbcp-ili9341 &

in der config.txt wird HDMI abgeschaltet und die Auflösung des Display eingestellt:

Zitat:hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt=320 240 60 1 0 0 0

Das SPI Interface sollte man in der Raspi-Konfiguration deaktivieren, das wird von fbcp-ili9341 selbst verwaltet.

in der sdlskale.cxx im skale2 Verzeichnis habe ich folgende Werte eingetragen:

Code:
...
#define SKALE_HOEHE 240
#define SKALE_BREITE 320
...
// Position und Dimension des Skalenzeigers
SDL_Rect ZeigerRect;
ZeigerRect.x = -390; ZeigerRect.y = -50;
ZeigerRect.w = 1100; ZeigerRect.h = 1100;
...


die linke obere Ecke des 1200x1200px großen Rundskalenbildes wird also weit ausserhalb des Display positioniert und erstreckt sich nach rechts und unten über 1100px. Wenn man genau hinschaut könnte die Krümmung noch einen Tick kleiner sein. Ich habe mit 1200 angefangen und mich auf 1100 heuntergetastet. Der Wert ZeigerRect.x errechnet sich aus den 1100px minus die 320px Displaybreite und das ganze geteilt durch 2 und wird negiert. Ich könnte natürlich auch die 1100 lassen und den Skalenmittelpunkt durch Ändern des Wertes ZeigerRect.y ein wenig nach oben schieben um den Radius genauer anzupassen. Mache ich bei Gelegenheit, vielleicht suche ich auch noch ein geeigneteres Skalenscheibenbild. Dieses hier stammt von einem Philco.

 


"Skalenscheibensimulation" ist übrigends eine neue Wortschöpfung! 

ich arbeite hier mit dem voreingestellten Wert:

#define BILDER_PRO_SEKUNDE 20

Geschwindigkeit und Flüssigkeit der Anzeige könnte man duch variieren des Wertes noch optimieren.

Bernhard erklärt es hier in post#129:

Ein minimales Internetradio für alte und neue Raspberrys

im gleichen thread in post#161 erklärt Bernhard die Funktion der Abstimmgeräuscherzeugung:

Ein minimales Internetradio für alte und neue Raspberrys

..falls jemand die Themen wieder nachlesen will

Zur Erklärung der Positionskoordianten habe ich eine Skizze erstellt. Die linke obere Ecke des Display ist der Ausgangspunkt 0,0. Die linke obere Ecke des Zeigerbildes (welches ich hier mit einem Skalenbild missbrauche) liegt von dort aus gesehen 390 Pixel nach links und 50 Pixel nach oben. Entsprechend den Koordinaten: ZeigerRect.x = -390; ZeigerRect.y = -50;

das Prelouc ist jetzt mal soweit einsatzfähig.


 

dieses schöne Zierteil zeige ich ja auf den oberen Bildern auch schon:

die aktuelle Ausbaustufe des Innenleben ist hier zu sehen:


 

wir sehen links oben den Raspberry mit einer USB Soundkarte, in der Mitte das 2,8" Display, direkt darunter den Encoder. Für mein übliches entprelltes Encodermodul war zu wenig Platz, die Bohrung am Gehäuse für die Abstimmung ist dafür zu hoch angebracht. Einen Einzelencoder mit zwei Pullup-Widerständen konnte ich aber unterbringen. So läuft jetzt ein gpiod für Rotary-Encoder.

Die Platine unten mittig trägt eine 3,3V-Verteilung, die beiden Widerstände für die Kanalzusammenführung, das Lautstärkepoti, ein PAM8403 Modul, den Elko für den Uref-Trick, und Schraubklemmen für 5V-Versorgung und Lautsprecher.

In der nächsten Ausbaustufe kommt noch ein internes Netzteil hinzu und der Lautsprecher wird noch mal ersetzt. Der ursprünglich vorgesehene Philips-Lautsprecher hat sich als 600 Ohm Type erwiesen, und der jetzige LS ist ein weich aufgehängter Basslautsprecher. Einen passenden Breitbänder werde ich noch suchen/organisieren. 

 





 

Keine Kommentare:

Kommentar veröffentlichen