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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Julian K. (jklein)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Moderator
von Julian K. (jklein)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.