Forum: Projekte & Code LCD Schriftarten ( Fonts in veschiedenen Größen )


von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Da ich auf die Schnelle keine fertige Schriftart gefunden hatte die auf 
mein LCD gepasst hat, habe ich ein paar erstellt. Insgesamt sind hier 14 
verschiedene Schriftgrößen von 4x6 Pixel bis 12x16 Pixel enthalten, 
jeweils als Assembler und C Header mit verschiedenen Ausrichtungen 
(Vertikal, Horizontal, gespiegelt, link/rechts ausgerichtet usw.)
Der Zeichensatz ist die Codepage 850.

: Gesperrt durch Moderator
von Uwe Bonnes (Gast)


Lesenswert?

Hallo Benedikt,

vielen Dank fuer die Fonts. Sie haben mir bei einem Problem mit 
Screenkey (Schalter mit eingebauten Display) sehr geholfen.

von DocFreestyle (Gast)


Lesenswert?

Danke für die Mühe die Fonts zu erstellen. war bei meinem LED Display 
eine große Hilfe.

von Speedy (Gast)


Lesenswert?

können diese ASM Fonts auch in BASCOM verwendet werden? und wenn ja wie?

von Zurr (Gast)


Lesenswert?

LCD schriften sind relativ einfach mit einem PC erstellbar. Dort, ein 
kleines Prograemmchen schreiben, das einen drop down selektierbaren Font 
auf einen Canvas klatscht. Diesen Canvas kann man dann als Bitmap pixel 
fuer pixel auslesen. Gewisse AVR und PIC Compiler koennen das schon von 
selbst.

Z

von nasowas (Gast)


Lesenswert?

@Zurr: Könntest Du vielleicht das "kleine Progrämmchen" schreiben, 
vielleicht  in der Mittagspause ?

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Jaja der Zurr cannwas
Leinwand heißt das Wort auf deutsch, hilft mir auch nicht weiter
Bitte erklären

von JojoS (Gast)


Angehängte Dateien:

Lesenswert?

ich hatte auch mal länger nach fertigen Fonts gesucht aber nicht so das 
richtige gefunden. Brauchbar waren einige Tools die einen Zeichensatz in 
einer Bitmap dargestellt haben und das liess sich dann speichern. Ich 
habe dann ein kleines Tool gebastelt das die Bitmap einliest und 
C-Defines generiert die ich dann in eine C Quelle includen kann.
Das Ganze ist in C# geschrieben und so minimalistisch wie ich es 
brauchte.

von Oliver (Gast)


Lesenswert?

Ein fertiges Progrämmchen gibt es doch schon lange bei apetetch.de oder 
hier im Forum im Thread zur k10108 library. Allerdings stellt man dann 
doch schnell fest, daß all die schönen Windows-True-Type-Fonts in den 
für LCD's typischen Größe von 6-10 Pixeln ziemlich gruselig aussehen. 
Die echten Pixelfonts hier gewinnen zwar auch keinen Schönheitspreis, 
sind aber wenigstens lesbar.

Oliver

von Martin S. (cadmaniac)


Lesenswert?

Hallo,

dieses Thema ist zwar schon etwas älter, aber der Vollständigkeit halber 
wollte ich noch dazuschreiben, dass wir ins KontrollerLab aus gegebenem 
Anlass einen Font-Wizard reingebastelt haben. Nähere Infos findet Ihr 
hier:
http://www.cadmaniac.org/projectMain.php?projectName=kontrollerlab&section=docs_font_wizard

Der Font-Wizard "grabbt" PC-Schriftarten, wie oben beschrieben, hat eine 
GUI, in der man einiges einstellen und editieren kann, kann die 
Schriftarten für verschiedene Displays (zeilen oder spaltenorientiert) 
aufbereiten, kann RLE-Kompression...

Code zum Anzeigen der damit generierten Schriftarten sowie ein 
YouTube-Video, das dieses Beispiel zeigt, findet ihr unter:
http://www.cadmaniac.org/projectMain.php?projectName=kontrollerlab&section=font_wizard_tutorial

viele Grüße,
cadManiac

von Fabian Cordes (Gast)


Lesenswert?

Vielen Dank Benedikt,

deine Fonts waren gerade sehr nützlich :)

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Hier ist eine neue, etwas korrigierte Version, da einige der Anordnungen 
der Schriftarten bei der obigen Version etwas zerstückelt waren.

von NrDesign (Gast)


Lesenswert?

Vielen Dank, das neue Display kann jetzt was anzeigen :)

von Jens (Gast)


Lesenswert?

@  Benedikt K. (benedikt)

Erstmal vielen Dank für die Weitergabe der Fonts. Die helfen beim 
Einstieg in die GLCDs ungemein.

Jetzt habe ich mal den 32x53-Pixel-Font probiert und dabei das Problem, 
dass die angezeigten Ziffern unvollständig dargestellt werden. Links 
fehlt immer ein Teil. Da die kleineren Font spielen, denke ich mal, dass 
mein Code halbwegs läuft.
Deshalb meine Frage, ob es bei den gro0en Fonts irgendwas besonderes zu 
beachten ist oder ob vielleicht beim konvertieren der Fehlerteufel 
zugeschlagen hat?

Danke und Gruß

von Benedikt K. (benedikt)


Lesenswert?

Sag mir mal genau welchen du verwendest hast, dann prüf ich das mal.

von Jens (Gast)


Lesenswert?

Ich habe den Font 32x53_horizontal_MSB_1.asm genommen.

Danke und Gruß, Jens

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Ich habe den Fehler gefunden. Ich hatte einen Schreibfehler in meiner 
Erstellungssoftware die um 27 statt 24bit in einem Byte geschoben hat. 
Dadurch waren die Daten ein wenig verschoben.

von Jens (Gast)


Lesenswert?

Danke für die schnelle Antwort, werde ich heute abend gleich mal testen.

von Jürgen E. (sid)


Lesenswert?

Hallo Benedikt,

erstmal danke für deine Fonts.Sie habe mir sehr weiter geholfen. Leider 
habe ich eine kleines Problemchen: Für mein Projekt brauche ich 2 
verschiedene Fontgrößen. 12x16 und 22x36 sind hierfür perfekt. Doch 
leider passen die Schriftarten nicht überein. OK, ich weiß das 12x20 und 
22x36 die gleiche Schrift haben, aber ich finde die Schriftart von 12x16 
einfach wesentlich besser und schneller lesbar. Und auf Geschwindigkeit 
kommt es an...

Könntest du bitte zu deinem Fontpack noch die Font 22x36, oder wie dann 
das Verhältnis auch immer ist, mit der Schriftart wie in 12x16 
erstellen? Nur eine Breite von 22 (oder 21 wäre auch OK) ist wichtig.

Oder kannst du die Quellen der Fonttools offen legen und uns mitteilen 
was du für Schriftarten verwendet hast?

Besten Dank
Jürgen

von Benedikt K. (benedikt)


Lesenswert?

Diese andere Schriftart steht mir leider nur bis max 12x16 oder 10x18 
zur Verfügung, daher kann ich nichts größeres erstellen.
Falls du aber irgendeine passende Schriftart hast, und ein Bild in der 
Art wie die Bilder in dem Paket erstellen kannst, dann kann ich die 
gerne in das passende Format umwandeln.

von Jürgen (Gast)


Lesenswert?

Hallo Benedikt,

danke für deine schnelle Antwort.
Das mit der Schrift ist echt schade. Vor allem die 0 finde ich ist durch 
die eckigere Art einfach wesentlich besser und schneller lesbar.

Naja gut ich werde das schon irgendwie hinfrickeln.

Dank
Jürgen

von PIC N. (eigo) Benutzerseite


Lesenswert?

Hallo, kann mal einer kurz erläutern wie man die Font Dateien verwendet?
Einfach mal als ganz simples Beispiel auf meinem Startbildschirm soll 
nur ein einzelner Buchstabe dargestellt werde. Wie gehe ich vor um den 
Buchstaben "auf zurufen".

Danke schon mal im vorweg!

von Gast (Gast)


Lesenswert?

Buchstabe -> zugehörige Pixeldaten aus dem Font -> auf's Display 
zeichnen

Zeichenkette
 (monospaced) Buchstaben mit Fontbreite Versatz
 (proportional) Buchstaben mit festem Abstand Versatz, leere 
Zeichenspalten/reihen erkennen und überspringen (=weglassen)

von DeppOderNichtDepp (Gast)


Lesenswert?

War das jetzt ein Deppenapostroph oder nicht?

von Benedikt K. (benedikt)


Lesenswert?

Hier mal ein ganz einfaches Beispiel für eine 6x8 Schriftart:
1
#include "6x8_horizontal_LSB_1.h"
2
3
void writechar(unsigned char c)
4
{   unsigned char x,y,w;
5
    for (y=0; y<8; y++)
6
    {   w=font[c][y];
7
        for (x=0; x<6; x++)
8
        {   if (w&1)
9
                setpixel(x,y);
10
            else
11
                clrpixel(x,y);
12
            w=w>>1;
13
        }   
14
    }
15
}

Die Schriften sind ein 2 Dimensionales Array mit 256 Einträge (da 256 
Zeichen) zu je einer von der Größe des Zeichens abhängigen Größe.

von Christian J. (stormracer)


Lesenswert?

Hallo,
@ Benedikt: danke für deine tollen Schriften.

Ich habe ein kleines Verständnisproblem:
das Beispielprogramm mit einer 6x8 Schrift ist mir klar und funktioniert 
auch.
Aber ich möchte gerne eine 22x36 Schriftart verwenden. Bei dieser 
Schrift ist mir der Aufbau der Datei aber noch nicht ganz klar.
Da bei dieser Schrift mehrere Elemete einer Array Zeile übereinander 
angezeigt werden müssen um die höhe des Zeichens zu erreichen. Aber 
welche Elemente liegen übereinander? Jeweils ein Viererblock?

Christian

von www.muGUI.de (Gast)


Lesenswert?

Hallo,

vielleicht ist der Font and Bitmap Generator unter www.muGUI.de für Euch 
interessant. Es gibt auch einige Beispiele wie man die Schriften auf ein 
Display bekommt.

Viele Grüße
muGUI

von Mr Bean (Gast)


Lesenswert?

Hallo

Ich möchte auf einem Grafik OLED die in der font.h gespeicherten Zeichen 
darstellen. Das ganze funktioniert ja wenn ich das richtig sehe über ein 
zweidimensionales Array.
Ich würde jetzt gerne wissen woher ich weiß, welches Zeichen in welchem 
Array-Feld steht!?
Hilft da nur einmal auslesen und sich dann merken? Oder wie macht ihr 
das?
Vielen Dank schonmal!

Grüße

Bean

von Christian J. (stormracer)


Lesenswert?

Hallo,

ich habe mir ein PC-Programm geschrieben, mit dem ich das Auslesen der 
Datei solange probiert habe. Bin also auch nur durch Try&Error weiter 
gekommen.

Hier mal meine Funktion für die 22x36 Schrift, bei der ich aber am 
Anfang und Ende jeder Zeile die Leeren Elemente gelöscht habe, um das 
Array kleiner zu bekommen:
1
void g_draw_char_large(unsigned short x1, unsigned short y1, unsigned char c)
2
{
3
  unsigned char x,y,w,n=0,x2=0,y2=0;
4
  for (y=0; y<76; y+=3)
5
  {   
6
     for(n=0; n<3; n++)
7
     {
8
        w=font22x36[c][y+n];
9
          
10
        for (x=14; x<22; x++)
11
        {   
12
           if (w&1)
13
              lcd_graphics_plot_pixel(x1+x2, y1+y2, PIXEL_ON);
14
           else
15
              lcd_graphics_plot_pixel(x1+x2, y1+y2, PIXEL_OFF);
16
           w=w>>1;
17
        
18
           x2++;
19
        }
20
     }
21
     y2++;
22
     x2=0; 
23
  } 
24
}

Zur Position der Zeichen in der Datei:
In jeder Zeile steht ein Zeichen. Die Zeichen sind nach ihrem ASCII Code 
sortiert.
Als Beispiel:
Die Ziffer "0" ist 0x30h oder Dez. 48, dh, sie steht in dem Array in der 
Zeile 48 (0x30h)
Das Zeichen "a" steht in Zeile. 97 (0x61h)

MfG Christian

von SAM (Gast)


Lesenswert?

@ Benedik Danke für die tolle Bibliothek!
Welche Fonts und Toolchain nutzt du für die kleinen Schriftarten?

Gruß Sam

von Timo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir vor kurzem mal die Mühe gemacht, die 'normalen' Zeichen der 
8x8 Font vom C64 LCD-gerecht zu codieren.

Die Werte sind spaltenweise im Array eingetragen, also erstes Zeichen, 
erster Wert, Bit 0 entspricht dem linken oberen Pixel des 8x8 Blocks. 
Bit 1 ist dann das Pixel da drunter, zweiter Wert vom ersten Zeichen, 
Bit 0, ist das Pixel daneben und so weiter. Hat den Hintergrund, dass 
ich so immer gleich das gesamte Byte an den LCD Kontroller schicke und 
das ganze nicht mit 64 Pixeln machen muss.

Falls also jemand ein bißchen Retro-Look möchte und sein LCD ausreichen 
groß ist - bei 8x8 großen Zeichen braucht man schon etwas mehr Breite - 
kann er das gerne mal ausprobieren. Ich freue mich über Rückmeldungen, 
weil ich es bis jetzt noch nicht geschafft habe, die Font zu testen ;)

Gruß, Timo.

von Christoph V. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

@Timo: Dein C64 - Font hat was, siehe Anhang.

Ich hatte seinerzeit nen Amstrad CPC464, mal sehen ob ich den aus Linux 
rauskrieg, dort gibt's nen emu.

Gruß, Christoph.

von Christoph V. (Gast)


Lesenswert?

Ups, da war bei mir der Fehlerteufel am Werk, der Zeichensatz stimmt, 
meine Darstellung ist falsch. Die letzte Pixelreihe wird nicht 
dargestellt.

Sorry.

Gruß, Christoph

von Marvin M. (Gast)


Lesenswert?

Hallo,
super - Danke, spart mir eine Menge Arbeit.
Frage: Wie ist das lizenzrechtlich? Momentan will ich einen Font noch 
privat einsetzen, es könnte aber mehr daraus werden. Ich habe leider 
keine Angaben über die Lizenz gefunden...?

Gruß, Marvin.

von fauter@rabian (Gast)


Lesenswert?

danqe göh
wor recht supper vu dia benedikt

Kanntesch du bittschia zu deinem Fontpack nou die Font 22x36, oder wie 
nocha
deis Verhältnis hold ou allaweil isch, mit der Schriftart wia in 12x16
erstella? Lei in einer Breite fu 22 (oder 21 war ou suppr) isch iatz 
schua bärig danqe ga.

Schiana griaß fum zomser, servas ga.

von Michael D. (etzen_michi)


Lesenswert?

Etwas älter aber mein Lob.

Mit welcher Software wurden diese Fonts erstellt?
Brauche einen Font vertikal MSB mit einer höhe von 32Pixeln.

Habe zwar bei Google massig Programme gefunden wie FontCreator, 
GLCD_Env, eadog, fonwiz ... aber irgenwie komme ich mit den Programmen 
nicht klar (ausser GLCD) da ich entweder die Windows Schriftarten nicht 
öffnen kann oder ich das speichern nicht hinbekomme.

Bei GLCD geht es soweit, nur das ich das einstellen den Größe etwas 
verwirrend finde und dann alles abschreiben um ggf. noch MSB umrechnen 
muss.


Vielleicht hat ja auch schon jemand einen Font mit 32Bit Höhe erstellt.

von Cabal2002 (Gast)


Lesenswert?

Hallo zusammen,

ich würde diese Fonts gern in Verbindung mit der apetech GLCD Lib 
verwenden. Ich tu mich mit der Umsetzung allerdings schwer. Das ganze 
per progmem so umzusetzen, dass die Zeichen aus dem Flash gelesen werden 
ist ja kein Problem. Aber in den header Files für die aptech Lib wird 
nur ein eindimensionales array benutzt und ich steh grad total auf dem 
Schlauch wie man das eventuell konvertieren könnte.

Hat jemand diese Fonts eventuell schon mit der apetech Lib verwendet? 
Wäre für einen Tip dankbar.

Gruß Cabal

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Die Fonts liegen als C-Quelle vor.

Wenn es zu unbequem ist, den Zugriff in der Anwendung zu linearisieren, 
schreib einfach ein C-Progrämmchen (für den PC) das die Datei includet 
und passend wieder als C-Quelle ausspuckt.

von Jens (Gast)


Lesenswert?

Michael D. schrieb:
> Mit welcher Software wurden diese Fonts erstellt?

das würde mich auch interessieren. Des Weiteren ist die 22x36 Font eine 
24bit breite Font. Ich bräuchte noch eine 20x und eine 22x36 Font

von BL (Gast)


Lesenswert?

Man sollte doch besser prüfen, bevor man sich (Zeit ans Bein) bindet.

Vielen Dank, Bernhard, für die Fonts. Aber sie stimmen leider nicht mit 
dem Ascii-Code überein. Jedenfalls nicht im erweiterten Bereich oberhalb 
127. Da sind in Deinen Fonts andere Zeichen als im ASCII oder es gibt 
einen anderen Standard. Wenn man jedenfalls das Grad-Zeichen haben will 
"°", hat das den ASCII-Code 176, bzw. 0xB0. Da steht dann beispielsweise 
im vertikalen 6x8-Font 0x44,0x11,0x44,0x11,0x44,0x11 . Das ist ein 
schönes Muster, aber kein "°". Andere Zeichen wie ü,ö,ä usw. dito.

In sofern würde auch mich interessieren, mit welchem Tool die Schriften 
gemacht wurden.

Ich habe den Fehler gemacht, mir das Programm von microelektronika aus 
Belgrad zu holen. Das macht aber Header-Dateien, die nur mit deren 
C-Compiler und dessen mitgelieferten, ansonsten aber geheimem Tools 
verarbeitet werden können. Das jetzt irgendwie nachzuvollziehen, wie die 
das abspeichern, ist auch nicht weniger Aufwand, als die Fonts zu Fuß 
zusammenzusuchen. Tja und da bräuchte ich eben noch diese obere 
ASCII-Hälfte.

von Guido (Gast)


Lesenswert?

Benedikt K. schrieb:
> Der Zeichensatz ist die Codepage 850.

Tja BL, wer lesen kann ist klar im Vorteil!

von BL (Gast)


Lesenswert?

Schön zu lesen. Und was bringt das nun?

von Klaus (Gast)


Lesenswert?

> Der American Standard Code for Information Interchange (ASCII, alternativ
> US-ASCII, oft [æski] ausgesprochen) ist eine 7 Bit-Zeichenkodierung; sie
> entspricht der US-Variante von ISO 646 und dient als Grundlage für
> spätere, auf mehr Bits basierende Kodierungen für Zeichensätze.

MfG Klaus

von micha (Gast)


Lesenswert?

BL schrieb:
> Schön zu lesen. Und was bringt das nun?

Zusammen mit der Antwort von Klaus: der standard ASCII Zeichensatz hat 
"nur" 7 bit, d.h. definiert die Zeichen von 0-127. Alles was darüber 
hinaus geht sind "Sonderzeichen" und unterscheiden sich ggfs. Die 
"Codepage" gibt dann an, welche Zeichen gemeint sind. Codepage 850 is 
IMHO eine MS-DOS Codepage. Schau einfach mal 
http://de.wikipedia.org/wiki/Codepage an.

von BL (Gast)


Lesenswert?

Ja, das ist mir ja klar. Deshalb fragte ich ja nach dem eventuellen 
Generator mit dem die Schriftarten gemacht wurden.

Was ich meine, ist keine Codepage, die beziehen sich meist auf DOS, 
sondern Windows 1252. Das aber ist nun mal im Rechner, damit arbeitet 
der Compiler (CC8e) und im alphanumerischen Display ist dieser Satz auch 
drin. Da geht es um den erweiterten ASCII-Satz, die Sonderzeichen ab 128 
bis 255.

Ich habe inzwischen hier was gefunden, was für 6x8 zumindest mir etwas 
weiterhalf:

Beitrag "Re: Character-Sets 5x7 (ASCII) als C-Array?"

Darauf hol ich mir gerade zu Fuß raus, was ich gebrauchen kann. Die 
Zeichen zwischen 128 und 161 fehlen da aber auch. Wer also mit dem Font 
komplett arbeitet, muß eine Zeigerarithmetik einbauen, sonst haut das 
auch nicht ganz hin.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

BL schrieb:
> Was ich meine, ist keine Codepage, die beziehen sich meist auf DOS,
> sondern Windows 1252.

Das ist natürlich auch eine Codepage, nämlich eben 1252. Wird auch als 
"ANSI" bezeichnet und ist eng mit ISO8859-1 verwandt.

> Das aber ist nun mal im Rechner,

Dein Editor arbeitet damit

> damit arbeitet der Compiler (CC8e)

Der nicht. Dem ist das vollkommen schnurz.

> Da geht es um den erweiterten ASCII-Satz, die Sonderzeichen ab 128 bis
> 255.

Nochmal: Das ist nicht ASCII. Es gibt keinen "erweiterten ASCII-Satz". 
ASCII ist 7 Bit. Die Ursuppe praktisch jeder anderen Zeichencodierung 
(von nur aus Informatikvorlesungen her anekdotisch beschriebenen 
IBM-Perversionen mal abgesehen, aber real begegnet man so etwas nicht), 
ob nun CP437 (DOS), CP850 (DOS mit ein paar europäischen Sonderzeichen 
mehr), CP1252 oder auch UTF-8.


Du aber suchst einen in ISO8859-1 codierten Font.

Alternativ kannst Du auch in deine Zeichenausgaberoutine eine einfache 
Übersetzungstabelle einbauen -- das ist mit einem Array von 128 Bytes 
erledigt, wenn vor der Anwendung des Arrays noch auf gesetztes Bit 7 
überprüft wird.

Und wenn Du meinst, daß da Zeichen fehlen -- die sind schneller 
selbstgebastelt als Du in einem Forum danach fragst. Nimm 'nen 
Bleistift, etwas Karopapier und los geht's. Dann ein bisschen 
Gehirnschmalzübung im Bitmuster-in-Hex-übertragen und fertig ist die 
Laube.

Außerdem: Was für ein Programm auf einem µC benötigt den vollständigen 
Sonderzeichenumfang? Wer braucht auf einem µC ein ñ, oder ein æ?

von BL (Gast)


Lesenswert?

Zu letzterer Frage: Wenn man Steuerungstechnik macht, hat man schon mal 
irgendwelche Sonderzeichen zu verarbeiten. Da kann es auch vorkommen, 
dass man andere Buchstaben braucht, Dein æ beispielsweise taucht im 
Dänischen auf. Muß man die Bedienung in anderen Sprachen machen, braucht 
man sowas ganz schnell und wozu nimmt man ein graphisches Display, wenn 
man nicht eben die Optik gaz toll machen will/ muß.

Zeichen per Kästchenpapier habe ich schon hinter mir, ganze Firmenlogos. 
Aber den Zeichensatz auf die Art wirklich selber zu machen, hat eher 
etwas Masochistisches. Mu ich mit nicht unbedingt antun.
Ich habe wie oben beschrieben aus diesem anderen Font die fehlenden 
Zeichen von Ordnungsnummer 128 an genommen und die Sache funktioniert 
erst mal. Ansonsten haben ich einen "Font and Bitmap Generator" von 
muGUI.de runtergeladen und der scheint die Arrays zu zusammen zu 
basteln, wie ich sie brauche.

Wenn ich im C-Compiler ein Char '°' angebe -z.B. um es an die 
LCD-Ausgaberoutine zu übergeben- dann schreibt der mit eine 176 rein. 
Das ist nach obigem Standard die ASCII-Ordnungszahl für dieses 
Grad-Zeichen in das List- bzw. Assemblerfile rein. Deshalb halte ich es 
für sehr viel zielführender, gleich mit dem richtigen Zeichensatz zu 
arbeiten, als noch Übersetzungsroutinen reinzubasteln. Das ist alles.

Meines Wissens -und so finde ich es im Wiki auch- gibt es einen 
ASCII-Code, der geht seitens der Ordnungszahl von 0 bis 127, also 7 Bit. 
Dann kam das 8. Bit dazu und das nennt sich dann erweiterter ASCII-Code. 
Dieser ist mit der -auch unter Wiki- als "Windows-1252" nicht nur im 
Compiler, sondern auch in fast allen mir bisher unter gekommenen 
alphanumerischen Displays(bis auf eines, das bestelle ich immer 
kyrillisch) drin.
Aber am Ende ist mit das schnuppe. Hauptsache, mein Dislplay zeigt an, 
was es soll und die Software paßt am Ende in den PIC.

In diesem Sinne: Frohes Schaffen!

von Walter T. (nicolas)


Angehängte Dateien:

Lesenswert?

Hallo Benedikt,
danke für Deine Schriftsammlung. Sie sieht gut aus und hat mir heute 
viel Arbeit erspart.

Viele Grüße
Nicolas

: Bearbeitet durch User
von Marcus W. (marcusaw)


Lesenswert?

Sieht eher aus als hätte es dir viel Arbeit gemacht (Fehlermeldung) ;)

von Nicolas S. (Gast)


Lesenswert?

Nö, eine Fehlermeldung war die schnellste Möglichkeit ein stehendes Bild 
auf dem Display zu bekommen.

von Conny G. (conny_g)


Lesenswert?

Hallo Benedikt,

das ist genial, herzlichen Dank für die große Mühe und die 
Veröffentlichung!!

Möchte gerade den 10x16 Font für ein großes 32x192 Pixel LED-Display 
verwenden, so eins:
http://img.alibaba.com/img/pb/807/999/550/550999807_792.jpg

Die Ansteuerung klappt schon, war jetzt auf der Suche nach einer 
Schriftart, habe Deine göttliche Sammlung gefunden und freue mich 
tierisch :-)

Vg,
Conny

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Hey, hab das auch grad entdeckt! Sieht cool aus, kann ich sicher 
brauchen!

Die Frage kam schon mal, leider keine Antwort: sind die Files unter 
irgendeiner Lizenz veröffentlicht? Gilt es bei den dahinterliegenden 
Fonts (ich nehme mal an die wurden nicht alle händisch gemalt) 
lizenzrechtlich etwas zu beachten?

"gar keine Lizenz" ist irgendwie wenig, nicht mal ein Urheber steht 
irgendwo drinnen...

von Conny G. (conny_g)


Angehängte Dateien:

Lesenswert?

Hehe, das macht Spass :-)

von Achim D. (achim_d)


Lesenswert?

Hallo zusammen,

ich habe die Schriftarten von Benedikt K. für mein Open-Source GUI 
Projekt µGUI verwendet. Es ist ideal geeignet um Displays bis zu 7" 
anzusteuern.
Download link: http://www.embeddedlightning.com/ugui/
Viel Spaß damit!

Gruß

Achim D.

von exert (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

ich versuche zur Zeit diese Schriften in mein Projekt zu integrieren. 
Allerdings können die Schriften nicht korrekt angezeigt werden. (Siehe 
Bild)
Egal welches Format der Schriftart ich verwenden.
Leider bin ich mit C-Code nicht so vertraut, dass ich mir das erklären 
könnte.
Der Code stammt aus diesem Projekt: 
https://github.com/stephanel/ST7565-RPi

Mit folgendem Code versuche ich die Uhrzeit darzustellen:
1
...
2
  glcd.drawbitmap(commonX - (myfont_width/2) - (myfont_width*2), commonY, myfont[clock[0]], myfont_width, myfont_height, BLACK);
3
  glcd.drawbitmap(commonX - (myfont_width/2) - myfont_width, commonY, myfont[clock[1]], myfont_width, myfont_height, BLACK);
4
5
  if(blink) {
6
    glcd.drawbitmap(commonX - (myfont_width / 2), commonY, myfont[10], myfont_width, myfont_height, BLACK);
7
    blink = false;
8
  } else {
9
    blink = true;
10
  }
11
12
  glcd.drawbitmap(commonX + (myfont_width/2), commonY, myfont[clock[2]], myfont_width, myfont_height, BLACK);
13
  glcd.drawbitmap(commonX + (myfont_width/2) + myfont_width, commonY, myfont[clock[3]], myfont_width, myfont_height, BLACK);
14
15
...

Der Code, welcher die Schrift darstellt sieht folgendermaßen aus:

1
void ST7565::drawbitmap(uint8_t x, uint8_t y, 
2
      const uint8_t *bitmap, uint8_t w, uint8_t h,
3
      uint8_t color) {
4
  for (uint8_t j=0; j<h; j++) {
5
    for (uint8_t i=0; i<w; i++ ) {
6
  if((bitmap[i + (j/8) * w]) & (1<<(j % 8))) {
7
    my_setpixel(x+i, y+j, color);
8
  }
9
    }
10
  }

Die Datei myfont enthält nur die Zeichen 0 bis : aus den Schriftarten.

Hat jemand eine Idee, woran das liegen könnte?

von W.S. (Gast)


Lesenswert?

Das sieht ja grauselig aus. Erwarte bitte nicht, daß unsereiner bei 
solchem Codegewimmel irgend einen vermutlichen Fehler findet.

Muß das so umständlich gehen?

Ich hab mir meine eigenen Fonts und auch eigenes GDI geschrieben, was 
ich nun schon bei allen möglichen µC benutze. Der Aufruf sieht da etwa 
so aus:

const RECT RU = { 78,58,127,71 };
CgFillRect((RECT*)&RU, black);
CgStr_at (RU.left+1, RU.top+1, buf, Helvetica_12, white);

Das erscheint mir wesentlich handlicher als diese Ungetüme bei dir:
"glcd.drawbitmap(commonX + (myfont_width/2), commonY,...."

Den zugehörigen Rasteritzer und einige Fonts dazu findest du bei Bedarf 
hier in der Lernbetty - falls es dich interessieren sollte. Einen 
kleinen Font-Compiler gibt's dort auch, da kann man sich seine Zeichen 
quasigrafisch als Textdatei kreieren und damit zur C-Quelle machen. 
Vielleicht wäre dieses eine Alternative für dich.

W.S.

von Lixion (Gast)


Lesenswert?

Hi,

super Thread. Ich muss gerade statt latin characters, Chinese characters 
einpflegen, habe aber das Problem das ich dafür nur 500kb habe. Kennt 
jemand einen pixelfont welcher die notwendigsten Zeichen auf dem 
bisschen speicher unterbringt? Darf auch etwas kosten, jedoch habe ich 
hier nur ein Angebot i.H.v. 10.000€ vorliegen, das ist dann doch ein 
wenig zu viel.


Vielen Dank,
Felix

von Rudolph (Gast)


Lesenswert?

Hi,

kann es sein, dass die grösseren Fonts kaputt sind?

Ich habe hier ein DOGXL240 und das braucht die Daten vertikal.

8x8_vertikal_LSB_1.h hatte ich schon mal auf dem DOGXL160 benutzt und 
mit dem habe ich auf dem DOGXL240 auch kein Problem.

Aber zum Beispiel beim 8x14_vertikal_LSB_1.h kommt nur Pixel-Müll raus.

{0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0 
x00,0x00},   // 0x21

Nur mal das Ausrufe-Zeichen.
Das ist etwas sehr dünn von den Daten und sieht eher nach horizontal 
aus.

10x16_vertikal_LSB_1.h:
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x1B,0x00,0x00,0x00,0x00,0 
x00,0x00,0x00,0x00,0x00,0x00},   // 0x21

12x16_vertikal_LSB_1.h
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0xFF,0x33,0xFF,0x33,0 
x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   // 0x21

von Rudolph (Gast)


Lesenswert?

Rudolph schrieb:
> kann es sein, dass die grösseren Fonts kaputt sind?

Nein, die sind gar nicht kaputt, die Daten sind nur nicht so angelegt 
wie ich das vermutet hatte.

{0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0
x00,0x00},   // 0x21

Ich bin davon ausgegangen, dass die ersten zehn Byte die erste Zeile von 
dem Zeichen sind, die folgenden zehn Byte die zweite Zeile.

Statt dessen gehören aber die ungeraden Bytes zur ersten, die geraden 
Bytes zur zweiten Zeile.

von Andreas W. (andy_w)


Lesenswert?

Hallo,
ich habe in der Firma den LCD-Image-Converter kennengelernt. Den kann 
man kostenlos downloaden. Das Programm konvertiert alle vorhandenen 
Fonts in C-Code, Font, Fontgröße sowie die Codierung können gewählt 
werden. Für die Codierung kann die Ausrichtung und eine evtl. Spiegelung 
gewählt werden (normal werden Pixel zeilenweise von links nach rechts 
und von oben nach untern codiert, aber alle anderen Kombinationen sind 
auch möglich, z.B. für ein gedrehtes Display im "Portrait-Mode"), 
positive oder inverse Darstellung, 1 Bit/Pixel oder 
Graustufen-/Farbcodierung. Dasselbe ist auch mit Logos, also (kleinen) 
Bildern möglich. Normal codiiert das Programm den ASCII-Satz mit Codes 
von 0x20 bis 0x7e. Aber man kann weitere Zeichen hinzufügen (sofern die 
im Font vorhanden sind) oder auch einige weglassen und z.B. einen 
kleinen Zeichensatz nur mit Ziffern und evtl. Vorzeichen, Blank, Punkt 
usw. zu machen.

Das Programm ist ziemlich vielseitig und ich habe damit schon einige 
Fonts und Logos für meine LCDs generiert. Proportionalschrift wird 
ebenfalls beherrscht, jedes Zeichen hat eine individuelle Breite, die in 
der Struktur ebenfalls enthalten ist. Bei Monospace-Schriften (z.B. 
Courier New) ist eben die Breite für alle Zeichen gleich groß.

Den erzeugten Code kann man natürlich nachher noch ändern, wenn bei 
kleinen Auflösungen einige Zeichen nicht gut aussehen oder man den Code 
für einige Sonderzeichen ändern will.

Gruß
Andy

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Andreas W. schrieb:
> ich habe in der Firma den LCD-Image-Converter kennengelernt. Den kann
> man kostenlos downloaden.

Bei allem Lob Deinerseits hats für 'nen Link anscheinend nicht mehr 
gereicht.

Vermutlich meinst Du das hier:

http://sourceforge.net/projects/lcd-image-converter/

von Dani (Gast)


Lesenswert?

Auf die Gefahr hin ausgelacht zu werden, frag ich einfach trotzdem mal.

Also erstmal vielen Dank an Benedikt, der das vor Jahren online gestellt 
hat.

Ich bring mir selber ein bisschen c++ bei, und hab "von Hand" einen font 
mit wenigen Pixeln geschrieben (einfach so als Übung, und um in meinen 
opengl Programmen eine Schriftfunktion zu haben, die ich auch verstehe)

Ich hab jetzt mal die 10x16 horizontal, gespiegelt (ehrlich gesagt weiss 
ich auch nicht, warum es mir die ungespiegelte als gespiegelt anzeigt, 
aber egal), 1, genommen und schreib gerade eine Funktion, die das in 
meine Struktur übersetzt.

Ich schreib jetzt gerade eine Korrekturfunktion, aber sehe ich das 
richtig, dass die letzten 2 Bits pro Zeile eigentlich an den Anfang 
gehören?

(verwende die 3. Font-Version)

Kann natürlich auch sein, dass meine Auslese-loops irgendwie falsch 
sind, aber ich hatte eigentlich das Gefühl, dass ich die Struktur 
begriffen hab.

Lustigerweise hab ich zuerst von Hand von der ersten Version die 
ungespiegelte Variante genommen, und beim "A" nicht gemerkt, dass es 
spiegelverkehrt ist. Und mir dann gedacht "ok, die letzten 6 bits 
brauchts nicht, sind aber halt drin, damits in der hex-Formulierung 
geht".

von Dirk (Gast)


Lesenswert?

ich glaube ich verstehe es nicht.

Benedikt K. schrieb:
> #include "6x8_horizontal_LSB_1.h"
>
> void writechar(unsigned char c)
> {   unsigned char x,y,w;
>     for (y=0; y<8; y++)
>     {   w=font[c][y];
>         for (x=0; x<6; x++)
>         {   if (w&1)
>                 setpixel(x,y);
>             else
>                 clrpixel(x,y);
>             w=w>>1;
>         }
>     }
> }

Wie kann ich damit einen großen Font wie den 12x24 ausgeben? Hilft mir 
jemand mit dem Code? Merci.

von Frickelfritze (Gast)


Lesenswert?

Dirk schrieb:
> Wie kann ich damit einen großen Font wie den 12x24 ausgeben?

Kann man nicht.

Beitrag #5668952 wurde von einem Moderator gelöscht.
Beitrag #5758136 wurde von einem Moderator gelöscht.
Beitrag #5835818 wurde von einem Moderator gelöscht.
Beitrag #5844388 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.