[Erledigt] GLCD-FONT Verständnisfrage

Hi,

ich habe ein kleines Problem mit Fonts auf einem 128x32 OLED-Display.

Kurz vorweg, ich habe verschiedene Libs ausprobiert, um auf ein solches Display eine Anzeige zu zaubern, und das klappt auch mit der ADAFRUIT, der U8g2, und der SSD1306Ascii. Letztere bringt nur Fonts zur Anzeige, aber braucht dafür auch nur 2% RAM, gegenüber der U8g2 mit 50% RAM-Verbrauch :o

Mir fehlen in den jeweiligen Fonts die in der SSD1306Ascii - Library zur Verfügung stehen ein paar Sonderzeichen, auf ein paar andere könnte ich verzichten, lieber wäre mir natürlich ergänzen.

Leider verstehe ich nicht ganz, wie die Buchstaben / Zeichen "im Raum" liegen, kann hier jemand helfen?

Bei einem LCD habe ich mir per Generator schon Sonderzeichen zusammengebastelt, und ich denke auch verstanden.
Bei den GLCD-FONTs scheint das etwas anders zu sein, und ich komme ins straucheln.
Hier mal der konkrete Font, bei dem ich mir gern 3 Sonderzeichen durch andere ersetzen würde:

// STARTFONT 2.1
// FONT -zevv-peep-Medium-R-Normal--16-140-75-75-C-80-ISO8859-1
#ifndef font8x16_h
#define font8x16_h

GLCDFONTDECL(ZevvPeep8x16) = {
  0x0, 0x0, // size of zero indicates fixed width font,
  7,        // width
  14,       // height
  0x20,     // first char
  0x60,     // char count  
  0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,  // ' '
  0X00,0X00,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X0D,0X00,0X00,0X00,0X00,  // '!'
  0X00,0X3C,0X00,0X3C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,  // '"'
  0X20,0XF8,0X20,0X20,0XF8,0X20,0X00,0X01,0X07,0X01,0X01,0X07,0X01,0X00,  // '#'
  0X60,0X90,0XF8,0X90,0X10,0X00,0X00,0X04,0X04,0X0F,0X04,0X03,0X00,0X00,  // '

Ein Generator dafür, bzw. eine Erweiterung zu diesem Font wäre mir natürlich lieber, aber das Ersetzen von 3 Sonderzeichen durch 3 andere ist der kleinste gemeinsame Nenner ...
Ich musste in der Mitte ein paar Zeilen killen, wegen dem Zeichen-Limit :frowning:

Gruß André

0X18,0X24,0X98,0X60,0X10,0X0C,0X00,0X0C,0X02,0X01,0X06,0X09,0X06,0X00,  // '%'
  0X30,0XC8,0XC8,0X30,0X00,0X00,0X00,0X07,0X08,0X08,0X09,0X06,0X09,0X00,  // '&'
  0X00,0X00,0X3C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,  // '''
  0X00,0X00,0XE0,0X18,0X04,0X02,0X00,0X00,0X00,0X03,0X0C,0X10,0X20,0X00,  // '('
  0X02,0X04,0X18,0XE0,0X00,0X00,0X00,0X20,0X10,0X0C,0X03,0X00,0X00,0X00,  // ')'
  0X80,0XA0,0XC0,0XC0,0XA0,0X80,0X00,0X00,0X02,0X01,0X01,0X02,0X00,0X00,  // '*'
  0X80,0X80,0X80,0XF0,0X80,0X80,0X80,0X00,0X00,0X00,0X07,0X00,0X00,0X00,  // '+'
  0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X18,0X0C,0X04,0X00,0X00,0X00,  // ','
  0X80,0X80,0X80,0X80,0X80,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,  // '-'
  0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X1C,0X08,0X00,0X00,0X00,  // '.'
  0X00,0X00,0X80,0X60,0X18,0X06,0X00,0X18,0X06,0X01,0X00,0X00,0X00,0X00,  // '/'
  0XF0,0X08,0X84,0X44,0X08,0XF0,0X00,0X03,0X04,0X08,0X08,0X04,0X03,0X00,  // '0'
  0X20,0X10,0X08,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X00,0X00,0X00,  // '1'
  0X18,0X04,0X04,0X84,0X44,0X38,0X00,0X0C,0X0A,0X09,0X08,0X08,0X08,0X00,  // '2'
  0X08,0X04,0X44,0X44,0X44,0XB8,0X00,0X06,0X08,0X08,0X08,0X08,0X07,0X00,  // '3'
  ...
  ...
  0X20,0X40,0X80,0X80,0X40,0X20,0X00,0X08,0X04,0X02,0X02,0X04,0X08,0X00,  // 'x'
  0XE0,0X00,0X00,0X00,0X00,0XE0,0X00,0X23,0X44,0X44,0X44,0X42,0X3F,0X00,  // 'y'
  0X20,0X20,0X20,0X20,0XA0,0X60,0X00,0X08,0X0C,0X0A,0X09,0X08,0X08,0X00,  // 'z'
  0X00,0X80,0X80,0X7C,0X02,0X02,0X00,0X00,0X00,0X00,0X1F,0X20,0X20,0X00,  // '{'
  0X00,0X00,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X00,0X00,0X00,0X00,  // '|'
  0X02,0X02,0X7C,0X80,0X80,0X00,0X00,0X20,0X20,0X1F,0X00,0X00,0X00,0X00,  // '}'
  0X30,0X08,0X08,0X10,0X20,0X20,0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,  // '~'
  0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F  // del
};
#endif  // font8x16_h


Ein Generator dafür, bzw. eine Erweiterung zu diesem Font wäre mir natürlich lieber, aber das Ersetzen von 3 Sonderzeichen durch 3 andere ist der kleinste gemeinsame Nenner ...
Ich musste in der Mitte ein paar Zeilen killen, wegen dem Zeichen-Limit :( 

Gruß André

Hier mal der konkrete Font

Ja, und wo ist das Problem? Jedes der 96 (0x60) Zeichen hat eine Zeile und die ersten ! " geben doch schon mal gute Hinweise, wo welche Pixel/Bits liegen.
Ob man ohne weiteres den Header verändern kann, um mehr Zeichen vor 0x20 oder hinter 0x7f unterzubringen, ist ja nicht dein Ziel.

SpaghettiCode:
Ein Generator dafür, bzw. eine Erweiterung zu diesem Font wäre mir natürlich lieber

Ausprobieren: char count erhöhen, und die zusätzlichen Zeichen (Zeilen) hinten an die Tabelle anhängen. Falls es Probleme mit dem Vorzeichen gibt (0x20+0x60=0x80!), das first char entsprechend erniedrigen und die Zeichen vorne einfügen.

SpaghettiCode:
Ein Generator dafür, bzw. eine Erweiterung zu diesem Font wäre mir natürlich lieber, ...

In den Texten der Bibliothek ist FontCreator2 erwähnt, könntest Du mal probieren.

Aber mit der Hand malen, ist auch nicht so schwierig:

0X00,0X00,0X[color=red]FC[/color],0X00,0X00,0X00,0X00,0X00,0X00,0X[color=blue]0D[/color],0X00,0X00,0X00,0X00,  // '!'

0X00 0X00, 00000000 00000000
0X00 0X00, 00000000 00000000
0X[color=blue]0D[/color] 0X[color=red]FC[/color], [color=blue]00001101[/color] [color=red]11111100[/color]
0X00 0X00, 00000000 00000000
0X00 0X00, 00000000 00000000
0X00 0X00, 00000000 00000000
0X00 0X00, 00000000 00000000

Das Ausrufezeichen ist deutlich zu erkennen.

GLCDFONTDECL(ZevvPeep8x16) = {
  0x0, 0x0, // size of zero indicates fixed width font,
  7,        // width
  14,       // height
  0x20,     // first char
  0x63,     // char count  
  0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,  // ' '
  0X00,0X00,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X0D,0X00,0X00,0X00,0X00,  // '!'
...
  0X30,0X08,0X08,0X10,0X20,0X20,0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,  // '~'
  0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,  // del
  0X00,0X00,0XFC,0X00,0XFC,0X00,0X00,0X00,0X00,0X0D,0X00,0X0D,0X00,0X00,  // 
  0X00,0X00,0XFC,0X00,0XFC,0X00,0X00,0X00,0X00,0X0D,0X00,0X0D,0X00,0X00,  // 
  0X00,0X00,0XEC,0X00,0XFC,0X00,0X00,0X00,0X00,0X0F,0X00,0X0D,0X00,0X00   // 

};
#endif  // font8x16_h
  oled.print("XX");
  oled.print(char(0x80));
  oled.print(char(0x81));
  oled.print(char(0x82));
  oled.println("XX");

Hi,

@ Michael, ich wusste, daß das kein Problem ist, aber ich habe es halt nicht gesehen, so einfach ist das.

@ agmue, danke für die bunten BITs! So springt es mich ja förmlich an.
Ich habe die Zeilen mal dazu kopiert, und funktioniert natürlich, danke! +

Und morgen nehme ich dann kariertes Papier und male mir BITburger aufs Papier.
Irgendwann habe ich dann auch die BIT-Brille ala Matrix auf, aber noch ist es der weiße Stock :wink:

Schönen Abend noch,
Gruß André

SpaghettiCode:
@ agmue, danke für die bunten BITs! So springt es mich ja förmlich an.

Schön ist es, wenn das Leben etwas farbiger wird :slight_smile:

In die Fontdefinition kannst Du anstelle 0x0D auch 0b00001101 schreiben. Zum Testen geht das etwas schneller.