Forum: Mikrocontroller und Digitale Elektronik Wie funktioniert eine Font datei?


von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Auf meinem Display (KS0108 an ATmega 32) kann ich Kreise, Linien usw. 
anzeigen lassen aber bei der Darstellung von Texten komm ich einfach 
nicht weiter. Um den Fehler zu finden müsste ich erst einmal wissen wie 
so eine font-Datei funktioniert aber ich blicke da einfach nicht durch. 
Wenn ich einen Text ausgeben will, kommt dieser an der richtigen 
Position im Display aber statt Buchstaben nur irgendwelche Pixel. Aber 
woher soll mein MC auch wissen wie z. B. ein "K" aussieht. Ist dafür die 
font-datei zuständig? Oder hat der Controller intern eine ASCI-Tabelle 
gespeichert und die font-Datei ist nur für die Schriftart? Sind die 
Hexadezimalzahlen in der Font-Datei Koordinaten? Falls jemand den 
Quellcode sehen möchte: Display.c ist meine main.c, in fontsoft.c ist 
der Ausgabebefehl definiert und hercules ist eine meiner font-dateien.

von coder (Gast)


Lesenswert?

...nimm dir mal eine Zeile (z.B. 31.) aus dem Array aus der Datei 
hercules.c, schreibe die 16 Einträge als Binärzahlen untereinander..., 
dann solltest du etwas erkennen...

von Joachim B. (jar)


Lesenswert?

dann schau dir das hier mal im Quellcode an
http://www.rinkydinkelectronics.com/library.php?id=45

es ist doch die Frage wieviele Pixel du für einen Buchstaben bereit 
stellst und wie diese Pixel dann aufs Grafic Display gemalt werden

16x16 kommt mir ziemlich verschwenderich vor kann man machen bei sehr 
vielen freien Pixeln, üblicherweise begrenzt man auf 5x8 Fonts.

von Matthias (Gast)


Lesenswert?

Ja dann ergeben die 1er einen nach unten gerichteten Pfeil.

von Joachim B. (jar)


Angehängte Dateien:

Lesenswert?

eine XLS um in der Basic LIB eigene Zeichen einzufügen

von Matthias (Gast)


Lesenswert?

Danke schon mal für die schnellen Antworten aber ich weiß noch nicht so 
ganz wie mich das jetzt weiterbringt.

von Matthias (Gast)


Lesenswert?

Also ich versteh jetzt was die font-Datei bedeutet aber woher weiß der 
MC auf welche Zeile er für welches Zeichen zugreifen muss. Z.B. dass 
Zeile 20 ein "B" ist.

von W.S. (Gast)


Lesenswert?

Matthias schrieb:
> Danke schon mal für die schnellen Antworten aber ich weiß noch nicht so
> ganz wie mich das jetzt weiterbringt.

An Font-Dateien gibt es viele - und es gibt ganz viele mehr oder weniger 
gute Methoden, sowas aufzubauen. Also frag nicht "Wie ist eine 
Fontdatei", sondern eher "Wie funktioniert genau DIESE Fontdatei".

Lade dir mal die Lernbetty von hier herunter. Dort kannst du sehen, wie 
eine Font-Datei aufgebaut sein kann. Die funktioniert eben nur 
zusammen mit den dazu passenden GDI, was du als Quelle dort auch 
findest. Die Fonts, die ich der Lernbetty beigegeben habe, können 
proportional sein, also ein 'i' ist schmaler als ein 'W' und trotzdem 
ist solch ein Font relativ platzsparend. Ein passender Fontcompiler ist 
übrigens auch dabei.

W.S.

von grundschüler (Gast)


Lesenswert?

Matthias schrieb:
> aber woher weiß der MC auf welche Zeile er für welches Zeichen zugreifen > muss. 
Z.B. dass Zeile 20 ein "B" ist.

B ist Ascii Zeichen 66. Wenn "B" auf Zeile 20 steht muss jedes Zeichen 
mit einem Versatz von 46 zum Ascii-Code aufgerufen werden. Schau dir den 
code an, der anhand des fonts ein einzelnes Zeichen malt. Er springt auf 
den Anfang von Zeile 20 und setzt anhand von 2 for-Schleifen die 16 byte 
in ein Zeichen auf dem display um.

von Hosenmatz (Gast)


Lesenswert?

Matthias schrieb:
> Also ich versteh jetzt was die font-Datei bedeutet aber woher weiß der
> MC auf welche Zeile er für welches Zeichen zugreifen muss. Z.B. dass
> Zeile 20 ein "B" ist.

Die Zeichen sind im uC selbst als Folge von Binärzeichen gespeichert. 
Die Zuordnung zwischen einer Folge von Binärzeichen ist willkürlich. 
Dazu gibt es einen weit verbreiteten Standard namens "ASCII".

Das Zeichen 'B' z.B. hat die Bitfolge 01000010. Bitfolgen können aber 
auch als Dezimal- oder Hexadezimalzahlen interpretiert werden. Das wäre 
bei der gegebenen Bitfolge dezimal 66 oder 0x42.

Damit kann man einem Buchstaben eine Zahl zuordnen und umgekehrt.

von Joachim B. (jar)


Lesenswert?

Hosenmatz schrieb:
> Die Zeichen sind im uC selbst als Folge von Binärzeichen gespeichert.
> Die Zuordnung zwischen einer Folge von Binärzeichen ist willkürlich.
> Dazu gibt es einen weit verbreiteten Standard namens "ASCII".
>
> Das Zeichen 'B' z.B. hat die Bitfolge 01000010. Bitfolgen können aber
> auch als Dezimal- oder Hexadezimalzahlen interpretiert werden. Das wäre
> bei der gegebenen Bitfolge dezimal 66 oder 0x42.
>
> Damit kann man einem Buchstaben eine Zahl zuordnen und umgekehrt.

damit malt man aber immer noch keine Pixel die wie ein 'B' aussehen auf 
das Grafikdisplay.

von coder (Gast)


Lesenswert?

Matthias schrieb:
> Z.B. dass
> Zeile 20 ein "B" ist.
...Zeile 20 ist kein "B"!

Matthias schrieb:
> aber woher weiß der
> MC auf welche Zeile er für welches Zeichen zugreifen muss.
...versuche die Funktion LCDSoftChar aus fontsoft.c zu verstehen --> 
dort wird das Array mit den Bit-Mustern angesprochen. Es wird aus dem 
ASCII des darzustellenden Zeichens der Start-Index für den Zugriff auf 
das Array berechnet und dann das ganze Zeugs (für ein Zeichen) 
ausgegeben.

von Matthias (Gast)


Lesenswert?

Danke für die Lektüre. Dann wird ich mich da erst mal durch arbeiten und 
am Ende hoffentlich eine Lösung für mein Problem finden.

von Hosenmatz (Gast)


Lesenswert?

Joachim B. schrieb:
> Hosenmatz schrieb:
>> Die Zeichen sind im uC selbst als Folge von Binärzeichen gespeichert.
>> Die Zuordnung zwischen einer Folge von Binärzeichen ist willkürlich.
>> Dazu gibt es einen weit verbreiteten Standard namens "ASCII".
>>
>> Das Zeichen 'B' z.B. hat die Bitfolge 01000010. Bitfolgen können aber
>> auch als Dezimal- oder Hexadezimalzahlen interpretiert werden. Das wäre
>> bei der gegebenen Bitfolge dezimal 66 oder 0x42.
>>
>> Damit kann man einem Buchstaben eine Zahl zuordnen und umgekehrt.
>
> damit malt man aber immer noch keine Pixel die wie ein 'B' aussehen auf
> das Grafikdisplay.

Ja. Das hast Du ganz richtig festgestellt. Sehr gut!

von Matthias (Gast)


Lesenswert?

Das alles hilft mir jetzt schon mal sehr das ganze zu verstehen. Vielen 
Dank dafür. Aber falls noch jemand eine Idee hat warum bei mir die 
Zeichen nicht richtig auf dem Display dargestellt werden wäre das super. 
Mir wäre es zwar lieber den Fehler selbst zu finden aber einen kleinen 
Schubbser in die richtige Richtung könnte ich gerade gut gebrauchen.

von Hosenmatz (Gast)


Lesenswert?

Da Du nun weißt, wie das mit den Fonts funktioniert, könntest Du die 
Funktion im Debugger bis zu dem Schritt, bei dem die Pixel an das 
Display weitergegeben werden, verfolgen.

Unklar ist, was Du nun tatsächlich auf dem Display siehst, wenn Du 
"Hallo" ausgibst. Das könnte Hinweise geben.

Da Du Linien etc. korrekt zeichnen kannst, wird wohl die Schaltung in 
Ordnung sein.

Damit wir gezielter Ratschläge geben können, wären mehr Informationen 
hilfreich. Siehe den Artikel Netiquette. Lieber zuviel als zuwenig 
Informationen.

von coder (Gast)


Lesenswert?

Hosenmatz schrieb:
> Da Du Linien etc. korrekt zeichnen kannst, wird wohl die Schaltung in
> Ordnung sein.

...das wäre die nächste Frage, ob es wirklich so ist...?!

von Hosenmatz (Gast)


Lesenswert?

coder schrieb:
> Hosenmatz schrieb:
>> Da Du Linien etc. korrekt zeichnen kannst, wird wohl die Schaltung in
>> Ordnung sein.
>
> ...das wäre die nächste Frage, ob es wirklich so ist...?!

Wieso die "nächste" Frage?. Sie ist ja in meinem Satz, den Du vor Deinem 
zitierst, schon beantwortet. Warum die Frage zweimal stellen und 
beantworten?

Falls Du aber sagen wolltest: "Das halte ich nicht für gegeben", dann 
schreib das doch - und gib bitte die Gründe für Deine Skepsis an. Den 
Grund, warum ich meine Aussage machte, habe ich ja auch angegeben. Kann 
ja sein, dass Du konkrete Gründe für Deine Skepsis hast, die sich als 
wahr herausstellen. Das Wort "wohl" relativiert meine Aussage ohnehin.

Im übrigen wirst Du bei nochmaligem Lesen des Beitrages feststellen, 
dass ich, ausdrücklich mit Hinweis auf die Netiquette, um mehr 
Informationen bat. Und in der Netiquette wird der Schaltplan 
ausdrücklich erwähnt.

Was genau ist also der Sinn Deines Beitrages?

von coder (Gast)


Lesenswert?

Hosenmatz schrieb:
> Falls Du aber sagen wolltest: "Das halte ich nicht für gegeben", dann
> schreib das doch

genau so ist meine Anmerkung zu verstehen!

Hosenmatz schrieb:
> und gib bitte die Gründe für Deine Skepsis an.
im Quelltext sind zwar, einkommentiert, zwar die entsprechenden Befehle, 
enthalten, aber der TO hat nicht geschrieben, dass er es auch wirklich 
ausprobiert hat!

Da ich bei kurzem Überfliegen des Programms keinen offensichtlichen 
Fehler sehe, sollte erst einmal dies ausprobiert werden, um sicher zu 
gehen, dass die Hardware funktioniert...

Hosenmatz schrieb:
> Das Wort "wohl" relativiert meine Aussage ohnehin.
die Ironie, die in diesem "wohl" steckt, habe ich schon bemerkt und 
wollte den TO noch einmal mit der Nase darauf stoßen!

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.