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
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.
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")
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.