Forum: Mikrocontroller und Digitale Elektronik Font für SPI Display (3-bit Farbraum 400x240pixel)


von Julian K. (jklein)


Lesenswert?

Hallo,

ich würde gerne folgendes Display über SPI ansteuern: LPM027M128B.
es hat 400x240 pixel mit 3 bit farbraum ohne integrierte Logik.
Ich möchte es hauptsächlich dafür verwenden Text wieder zugegeben.
Leider finde ich im Internet keine Header dateien für das Display.
Gibt es eine Möglichkeit möglichst einfach eine Schrift hierfür zu 
definieren? Oder hat jemand gar eine solche für das Display?

Vielen Dank im vorraus
Julian Klein

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Julian K. schrieb:

> ich würde gerne folgendes Display über SPI ansteuern: LPM027M128B.
> es hat 400x240 pixel mit 3 bit farbraum ohne integrierte Logik.
> Ich möchte es hauptsächlich dafür verwenden Text wieder zugegeben.

Dann solltest du im Minimum erst einmal angeben, in welchem der Modi 
(Pixelformate!) das Display angesteuert wird. Es beherrscht nämlich 
mehrere unterschiedliche und für jeden dieser unterschiedlichen Modi 
wäre natürlich eine anderer Fontaufbau nötig (wenn man ihn nicht in 
Echtzeit umrechnen möchte bzw. kann).

Übrigens: Das Display hat sehr wohl eine integrierte Logik, das erkennt 
man allein schon daran, dass es halt unterschiedliche Modi hat und diese 
konfiguriert werden können.

von A. B. (Gast)


Lesenswert?

Julian K. schrieb:
> Hallo,
>
> ich würde gerne folgendes Display über SPI ansteuern: LPM027M128B.
> es hat 400x240 pixel mit 3 bit farbraum ohne integrierte Logik.
> Ich möchte es hauptsächlich dafür verwenden Text wieder zugegeben.

Irgendeinen Wunsch-Font ins BDF-Format
https://en.wikipedia.org/wiki/Glyph_Bitmap_Distribution_Format
konvertieren, aus den erzeugten Bitmaps kann man mit einen Skript oder 
so  z. B. ein C-Array machen.

Nach BDF geht's z. B. mit dem Skript
#!/usr/bin/fontforge Open($1) Reencode("iso8859-15") Generate($1:r + 
".bdf")

von Hurra (Gast)


Lesenswert?

Julian K. schrieb:
> Hallo,
>
> ich würde gerne folgendes Display über SPI ansteuern: LPM027M128B.
> es hat 400x240 pixel mit 3 bit farbraum ohne integrierte Logik.
> Ich möchte es hauptsächlich dafür verwenden Text wieder zugegeben.
> Leider finde ich im Internet keine Header dateien für das Display.
> Gibt es eine Möglichkeit möglichst einfach eine Schrift hierfür zu
> definieren? Oder hat jemand gar eine solche für das Display?
>
> Vielen Dank im vorraus
> Julian Klein

Freundlicherweise hat Benidikt K. einen Satz schöner Schriftarten 
erstellt und hier veröffentlicht:
Beitrag "LCD Schriftarten ( Fonts in veschiedenen Größen )"
Übrigens herzlichen Dank dafür!
Seine C-Files muss man nur minimal anpassen, um sie auf anderen µCs als 
dem AVR nutzen zu können. Im Endeffekt sind die Pixelfonts const-Arrays 
im Flash.

Ich habe mir eine Funktion geschrieben, die genau ein Character auf das 
LCD pinselt:
1
uint8_t display_character_8x6(Coordinates *C, uint8_t character, uint8_t color)
2
{
3
4
    char column;
5
    uint8_t i = 0, hor;
6
    //check if coordinates are inside vram boundarys
7
    if(((C->hor + 6) > Disp_horizontal_pixels)||((C->ver + 8) > Disp_vertical_pixels))
8
    {return 1;}
9
10
    //pring character by flipping single pixels
11
    do
12
    {
13
        column = font8x6[character][i];  //fetch data of curren column
14
        hor = C->hor + i;
15
        if(column & 0x01){disp_WritePixel(hor,C->ver,color);}
16
        if(column & 0x02){disp_WritePixel(hor,C->ver + 1,color);}
17
        if(column & 0x04){disp_WritePixel(hor,C->ver + 2,color);}
18
        if(column & 0x08){disp_WritePixel(hor,C->ver + 3,color);}
19
        if(column & 0x10){disp_WritePixel(hor,C->ver + 4,color);}
20
        if(column & 0x20){disp_WritePixel(hor,C->ver + 5,color);}
21
        if(column & 0x40){disp_WritePixel(hor,C->ver + 6,color);}
22
        if(column & 0x80){disp_WritePixel(hor,C->ver + 7,color);}
23
        i++;
24
    }
25
    while(i<6);
26
    return 0;
27
}
Für tragbare Performance setzt dar voraus, dass du ein Abbild des 
Displayinhalts im Speicher hast. Geht auch ohne, ist dann aber recht 
langsam, wenn du das über SPI schreiben musst.

Musst dir halt überlegen, wie du das effizient gestalten kannst. Ich hab 
das immer für kleine Display verwendet, da hat das von der Laufzeit her 
nie gestört.

Jedenfalls: Hast du mal ein Zeichen so erfolgreich gezeichnet, ist 
Textausgabe trivial.

--

Tags werden mit einem Slash beendet, und nicht mit einem Backslash. 
Obendrein ist C hier besser geeignet als das simple "code".

-rufus

: Bearbeitet durch User
von Julian K. (jklein)


Lesenswert?

c-hater schrieb:

> Dann solltest du im Minimum erst einmal angeben, in welchem der Modi
> (Pixelformate!) das Display angesteuert wird. Es beherrscht nämlich
> mehrere unterschiedliche und für jeden dieser unterschiedlichen Modi
> wäre natürlich eine anderer Fontaufbau nötig (wenn man ihn nicht in
> Echtzeit umrechnen möchte bzw. kann).

für die schrift würde ich Multiple Lines Update Mode in 1 Bit data Mode 
verwenden.

> Übrigens: Das Display hat sehr wohl eine integrierte Logik, das erkennt
> man allein schon daran, dass es halt unterschiedliche Modi hat und diese
> konfiguriert werden können.

Naja mit Logik ist ja Definitionssache was man als Logik meint ;)



Danke an euch denke damit kann ich erstmal was anfangen!

Viele Grüße

von c-hater (Gast)


Lesenswert?

Julian K. schrieb:

> für die schrift würde ich Multiple Lines Update Mode in 1 Bit data Mode
> verwenden.

Also 1 Bit/Pixel. Dafür gibt's unzählige Fonts in unzähligen Projekten 
und fertigen Produkten.

Allerdings: wie die Struktur des Fonts optimalerweise aussieht, hängt 
nicht nur vom Pixelformat des Displays ab, sonder auch davon, wie und 
womit man den Datenstrom zum Display erzeugt. Oft ist ein 
"scanline-orientiert" abgelegter Font wesentlich effizienter zu 
verwenden.

> Naja mit Logik ist ja Definitionssache was man als Logik meint ;)

Ja, mir war schon klar, dass du eigentlich "Refreshlogik" AKA 
"Framebuffer" meintest, und dir selber scheinbar auch. Warum hast du das 
dann nicht einfach auch geschrieben?

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.