Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Skalenscheibensimulation Telefunken Prelouc (iRadio)
#1
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.


.jpg   bild02.JPG (Größe: 35,97 KB / Downloads: 373)

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!
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#2
Sehr geil, ich freue mich auf weitere Beiträge. 
Aber die Idee ist genial.
Danke und weiter so
Zitieren
#3
Verdammt nah an der Realität!! Super gemacht Smiley20 !

Das Prinzip ist pfiffig - das eröffnet ja viele Möglichkeiten der Visualisierung. Die Umsetzung finde ich ebenfalls gelungen; zumindest auf dem Video bewegt sich die Skala ohne störendes Ruckeln. Zusammen mit dem Rauschen während der Senderwahl - spitze!

Gruß, Frank
Keiner von uns kommt lebend hier raus. Also spart nicht alles für später auf. Eßt leckeres Essen. Spaziert in der Sonne. Springt ins Meer. Sagt die Wahrheit und tragt euer Herz auf der Zunge. Seid albern. Seid freundlich. Seid komisch. Bastelt mit Radios. Für nichts anderes ist Zeit.
Zitieren
#4
Smiley32 Smiley32 Smiley32
Es ist einfach Klasse, Jupp! Echt - sehr gut gelungen, fließend, rein.
Gruß,
Ivan
Zitieren
#5
…ich bin überwältigt Jupp, einfach klasse umgesetzt Smiley32

Viele Grüße,
Rolf
Zitieren
#6
danke für eure Anerkennungen!

(12.05.2022, 08:01)Bosk Veld schrieb: ..zumindest auf dem Video bewegt sich die Skala ohne störendes Ruckeln. Zusammen mit dem Rauschen während der Senderwahl - spitze!..

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;

   
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#7
Die Geschwindigkeit, mit der die runde Skalenscheibe rechnerisch gedreht werden kann, finde ich als Raspberry-Fremder beeindruckend!

Immerhin sind es 76800 farbige Pixel, die im 50-ms-Takt neu berechnet werden müssen, und das auch noch mit trigonometrischen Funktionen!
Eine Alternative dazu wäre, schon beim Kompilieren alle Bildschirmausschnitte auszurechnen und im Speicher abzulegen. Beim Aufruf müßte man dann nur den Winkel angeben. Das würde allerdings - je nach Schrittweite und Farbtiefe - viel Speicherplatz erfordern.

Wie wird das gemacht?

Gruß, Frank
Keiner von uns kommt lebend hier raus. Also spart nicht alles für später auf. Eßt leckeres Essen. Spaziert in der Sonne. Springt ins Meer. Sagt die Wahrheit und tragt euer Herz auf der Zunge. Seid albern. Seid freundlich. Seid komisch. Bastelt mit Radios. Für nichts anderes ist Zeit.
Zitieren
#8
Hallo Frank,

VLC arbeitet hier Hand in Hand mit einem Hardwarebschleuniger in der GPU des Raspberry.

Edit: VLC (besser gesagt cvlc) ist zwar als Mediaplayer hier eingesetzt, aber die Skalensimulation ist ein eigener daemon welcher die SDL2-Grafikbibliothek benutzt. Folglich bezieht sich die nachfolgende Tabelle nur auf die Widergabemöglichkeiten von iTV oder von Video-Mediendateien.


.jpg   pi.JPG (Größe: 121,92 KB / Downloads: 131)

die Hardcopy entstammt einem umfangreichen Dokument (Seite 145) in dem neben sämtlichen Grundlagen auch die bekanntesten Applikationen beschrieben sind. Der von Bernhard verwendete VLC wird mit seinen ganzen Möglichkeiten und Parametrisierungen auf den darauf folgenden Seiten anschaulich erklärt. Eine wirklich starke und hochaktuelle PDF der Ernst-Abbe-Hochschule Jena für den Einsteiger und den der es ganz genau wissen will:

Linux ohne X mit dem Raspberry Pi
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#9
(16.05.2022, 12:03)saarfranzose schrieb: Hallo Frank,

VLC arbeitet hier Hand in Hand mit einem Hardwarebschleuniger in der GPU des Raspberry.

Hallo Jupp, hallo Frank.


VLC hat mit der Darstellung der Skalensimulation überhaupt nichts zu tun und arbeitet da auch nicht Hand in Hand. VLC wird durch vlcd nicht einmal im Grafikmodus (also mit GUI) gestartet, sondern als reiner gesichtsloser Daemon und liefert zyklisch als Antwort nur eine(!) Zahl, nämlich die gerade aktive Indexnummer des eingestellten Senders in der Playlist wieder.

 
Die Skalensimulation ist ein eigener Prozess, der auf Basis der SDL2-Grafikbibliothek gerendert wird. Diese SDL2-Bibliothek wiederum, nutzt die Möglichkeiten des installieren und aktiven Grafiktreibers. Das kann also durchaus alles (also die Grafikpipeline inklusive der Pixeltransformation) in Software gerendert werden, oder aber wenn es der Grafiktreiber unterstützt, auch mit der Hilfe des Rechenwerks einer GPU. 
Will man sich die Mathematik dahinter anschauen, muss man also in die Quellen der SDL2 - Bibliothek schauen, also wie genau wird "SDL_RenderCopyEx..." zum Beispiel implementiert. Dann muss man die Funktionsaufrufe dieser SDL2-Implementierung über das Betriebssystem (und zig weitere Schichten) hinweg, schrittweise bis runter zum Treiber verfolgen, wo dann der Bildspeicher direkt manipuliert wird. Von der Anwenderschicht her, also von unserer Skalensimulation, die von oben nur auf SDL2 blickt, kannst Du die einzelnen Pixeltransformationen ganz unten im Bildspeicher nicht sehen und den Weg dahin praktisch auch nicht wirklich beeinflussen. Das ist ja gerade die Aufgabe solcher Highlevel-Bibliotheken und Hardware Abstraction Layers, dass die Anwendung nicht wissen muss, wie das unter Ihr bis zur Hardware gemacht wird. Sie muss sich nicht um eine bestimmte Videohardware kümmern, läuft dafür aber auf praktisch jedem Grafiktreiber und Grafikhardware, die sich in so ein System einbinden lässt.

Gruß
Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
#10
danke für die Klarstellung, Bernhard. Ich hatte lange gezögert mit einem Versuch die Frage von Frank zu beantworten weil ich mir mit dem Zusammenspiel der beteiligten Komponenten nicht mehr sicher war.
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#11
(16.05.2022, 12:18)Bernhard45 schrieb: Will man sich die Mathematik dahinter anschauen, muss man also in die Quellen der SDL2 - Bibliothek schauen, also wie genau wird "SDL_RenderCopyEx..." zum Beispiel implementiert.
Genau das beantwortet meine Frage! Bei SDL_RenderCopyEx() wird ein Winkel übergeben. Dann wird wohl die Drehung in der Bibliotheksfunktion berechnet und das gedrehte Bild an den Treiber gegeben - sofern dieser nicht selber eine ähnliche Funktion bietet. Beides ist bestimmt schneller als eine vorherige Berechnung in Hochsprache.

Danke für Eure Antworten!

Gruß, Frank
Keiner von uns kommt lebend hier raus. Also spart nicht alles für später auf. Eßt leckeres Essen. Spaziert in der Sonne. Springt ins Meer. Sagt die Wahrheit und tragt euer Herz auf der Zunge. Seid albern. Seid freundlich. Seid komisch. Bastelt mit Radios. Für nichts anderes ist Zeit.
Zitieren
#12
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.
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  iRadioAndroid - iRadio Portierung für Android Geräte OttoBerger 154 9.105 23.03.2024, 13:45
Letzter Beitrag: Uli
  Saba TV-Journey mit iRadio saarfranzose 6 2.094 20.07.2023, 20:22
Letzter Beitrag: saarfranzose
  Raspberry iRadio, heavy duty Emmpunkt 5 1.040 27.03.2023, 17:58
Letzter Beitrag: saarfranzose
  russisches 6N-1 mit iRadio und RGB-Panel saarfranzose 10 1.759 11.03.2023, 15:00
Letzter Beitrag: saarfranzose
  FAQ zum iRadio saarfranzose 602 36.313 03.03.2023, 11:59
Letzter Beitrag: saarfranzose

Gehe zu: