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:
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:
...
#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