Forum: Mikrocontroller und Digitale Elektronik RGB565_480x272.h selber erzeugen


von epikao (Gast)


Lesenswert?

Hallo, folgende Datei enthält Werte eines ganzen Bildes (in C-Code bzw. 
Hex-Form) für den STM32F4...

https://github.com/fboris/STM32Cube_FW_F4/blob/master/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_1Layer/Inc/RGB565_480x272.h

wie kann ich solche C/ Header-Dateien aus einem Bild selber erzeugen?

vielen Dank

von holger (Gast)


Lesenswert?

gimp?

von hp-freund (Gast)


Lesenswert?

Der Konverter wird migeliefert:

BmpCvt.exe

im Ordner:

STM32Cube_FW_F4/Middlewares/ST/STemWin/Software/

von epikao (Gast)


Lesenswert?

hp-freund schrieb:
> STM32Cube_FW_F4/Middlewares/ST/STemWin/Software/

ah super, werde ich morgen gleich versuchen.
Ist das eine Demo? Und vermutlich Kommando-Zeilenprogramm?

Vielen Dank

von hp-freund (Gast)


Lesenswert?

Nö, ganz einfaches Win Prog ohne Installation.
Probier es aus...

von epikao (Gast)


Lesenswert?

ok. folgendes probiert: speichern als C-File, RGB565 high, erzeugt 
folgendes:

static GUI_CONST_STORAGE unsigned short _ac480x272_lake[] = {
  0x9BCA, 0x9BCA, 0x9BA9, 0xA3CA, 0x9BCA, 0x9BCA, 0x9BCA, 0x9BAA, 
0x9B89, 0x9B69, 0x9369, 0x9BA9, 0x9BAA, 0x9BAA, 0x9BAA, 0x9BAA, 0x9BAA, 
0x9BAA,...


ich brauch es aber so:

const uint32_t RGB565_480x272[65280] =
{
0x7A537A53,
0x82538253,
0x82538253,
0x8A538253,
0x82538253,
0x82538253,....


wie ändere ich dies ab? mit einem Editor? wird kompliziert?

Danke

von hp-freund (Gast)


Lesenswert?

Moin,

Du willst wirklich 32bit über einen 16bit Port (RGB565=16) schicken.
Sieh dir lieber an was später aus deinen 32bit gemacht wird.
Ich wette die werden wieder in 2 x 16bit zerlegt.

von hp-freund (Gast)


Lesenswert?

Ok.
Habe mir die Funktion angesehen. Das Bild wird direkt als Framebuffer 
übergeben.
Sieh mal nach wie die Werte im Speicher liegen.
Wenn nur 16 von 32 bit genutzt werden, versuche ein packed.

von epikao (Gast)


Lesenswert?

phuu... ich versuche mich gerade erst nur an einem example, und dort ist 
es als 32bit hinterlegt.

Ich habe nämlich jetzt am STM32F429I Disc. ein 480x272 angeschlossen 
(ein bisschen Lötarbeit war gefragt x-D)...
es läuft soweit, aber hätte jetzt gerne ein 480x272 hintergrund-bilder 
angezeigt statt 320x240...

Was heisst versuche "ein packed"?

von epikao (Gast)


Lesenswert?

und dann habe ich noch versucht mit diesem Code auf 9Mhz 
herunterzutakten,

aber er macht mir 6Mhz statt 9.6Mhz??

  RCC_PLLSAIConfig(192, 7, 5);
  RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4);

von epikao (Gast)


Lesenswert?

ups, das war falsch gemessen, sind 9.6Mhz!

jetzt halt noch die Frage, wie kriege ich 32bit Werte hin?

von hp-freund (Gast)


Lesenswert?

epikao schrieb:
> aber hätte jetzt gerne ein 480x272 hintergrund-bilder
> angezeigt statt 320x240...

Wird denn schon etwas richtig angezeigt, bis auf das Format?

von epikao (Gast)


Lesenswert?

ich habe das colorkeying am laufen,

und die Pfeile werden angezeigt und schalten auch um auf Tastendruck, 
aber einfach doppelt, also pro bildschrimhälfte 1mal. vermutlich weil 
halt für 240 Spalten geschrieben, ich aber 480 Spalten habe...

Habe im main.c zwar alles was auch 240x320 geschrieben war auf 480x272 
umgetippt/gerechnet. Auch die Porch-Einstellungen habe ich gemäss meinem 
4.3" Display. Also zeigt wirklich sauber an, ausser die letzten 4-5 
Zeilen sind nicht mehr weiss sondern braun....

ich möchte jetzt einfach bilder anzeigen lassen statt die Pfeile... aber 
irgendwie hat das ganze 2 Layer... das muss ich auch noch studieren.

Habe einmal ein RGB565_480x272.. header-File statt das 240x320 
aufgespielt, da war der Hintergrund dann nicht mehr weiss sondern mit 
einem Bild - wobei die Pfeile nicht mehr sichtbar waren...

von epikao (Gast)


Lesenswert?


von hp-freund (Gast)


Lesenswert?

Habe es gerade getestet.
Es werden auch die 16bit Werte automatisch ohne Platzverschwendung in 
den 32 bit Speicher gepackt.
Darüber brauchst Du dir keine Gedanken machen.

Übergib einfach die Adresse auf dein Array und gut.

von epikao (Gast)


Lesenswert?

Danke fürs ausprobieren, das File habe ich auf rgb565_480x272.h 
umbenannt, im ColorKeying Ordner abgelegt und wie folgt abgeändert:

*/
#ifndef __RGB565_480X272_H
#define __RGB565_480X272_H


const uint16_t RGB565_480x272[76200] = {
  0x9BCA, 0x9BCA, 0x9BA9, 0xA3CA, 0x9BCA, 0x9BCA,

bin zwar nicht sicher ob 76200 nötig ist? oder leer lassen?


Dann habe ich im main.c noch das geändert:

  /* Input Address configuration */
  LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint16_t)&RGB565_480x272;

und im main.h

#include "RGB565_480x272.h"



was ist falsch?

von hp-freund (Gast)


Lesenswert?

https://github.com/fboris/STM32Cube_FW_F4/blob/master/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_1Layer/Src/main.c

Da ist es anders drin, hast offenbar eine andere Vorlage verwendet.

Die Array Größenangabe kannst Du weg lassen.

Da ich das Board nicht hier habe, kann ich auch nicht mehr dazu sagen.

von Georg G. (df2au)


Lesenswert?

epikao schrieb:
> (uint16_t)&RGB565_480x272;

Den STM kenne ich nicht. Aber sein Adressraum ist bestimmt größer als 
16Bit. Sollte es nicht eher ein (uint16_t *) sein?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.