Schriftdarstellung auf seriellem grafischem Display

  • Thread starter Wolfgang Berger
  • Start date
W

Wolfgang Berger

Guest
Ich möchte ein grafisches Display (132x132 Pixel bei 4092 Farben,
seriell) über einen PIC16F876 ansteuern. Von den Farben genügen mir auch
deutlich weniger. Das Problem ist allerdings, dass mein Display keinen
eingebauten Zeichensatz hat. Das bedeutet, dass ich im PIC Ascii Daten
in Grafik umwandeln muss. Zudem sollte die Schrift in mindestens zwei
Größen zur Verfügung stehen.

Bei einer Zeichengröße von 16x16 Pixel ergibt das 16 x 2Byte x 200
Zeichen (unwichtige weggelassen) = 6,4 KB.
Für die doppelte Schriftgröße 32 x32 Pixel wären dies 32 x 4 x200 = 25,6
KB
Also insgesamt etwa 30 KB.

Dafür könnte ich dann zum Beispiel ein I2C EEProm verwenden (der PIC hat
leider zu wenig Speicher). Über die Geschwindigkeit dabei habe ich mir
noch keine Gedanken gemacht. Sollte aber unproblematisch sein, da der
Displayinhalt relativ selten aktualisiert wird.

Ist diese Vorgehensweise sinnvoll, oder gibt es bessere Möglichkeiten,
zum Beispiel fertige Schriftsatz Speicher ?
Sollte die kleinere Schrift durch schrumpfen der großen dynamisch
erstellt werden ? Zum Beispiel zusammenfassen von 4 Pixeln. Bei >2
schwarz, wir der Pixel schwarz dargestellt, bei <=2 weiß.

Bekomme ich irgendwoher fertige Zeichensätze gratis oder relativ
günstig, oder muss ich diese komplett selbst erstellen ?


Ich bin nicht absolut auf den PIC festgelegt. Sollte es allerdings damit
gehen, wäre es mir am liebsten, da ich schon viel damit gearbeitet habe
und so die Einarbeitung entfällt.

--
Viele Grüße
Wolfgang Berger

wberger (at) gmx (dot) de
 
Wolfgang Berger <wberger@web.de> schrieb:
wberger (at) gmx (dot) de
By the way: Nimm immer oder nimmer Klartextadressen.

Michael
 
On Tue, 08 Jul 2003 14:07:28 +0200, Wolfgang Berger <wberger@web.de> wrote:


Dafür könnte ich dann zum Beispiel ein I2C EEProm verwenden (der PIC hat
leider zu wenig Speicher). Über die Geschwindigkeit dabei habe ich mir
noch keine Gedanken gemacht. Sollte aber unproblematisch sein, da der
Displayinhalt relativ selten aktualisiert wird.
Von Atmel gibts SPI Flash-Bausteine mit 128k und darüber.

Ist diese Vorgehensweise sinnvoll, oder gibt es bessere Möglichkeiten,
zum Beispiel fertige Schriftsatz Speicher ?
Sollte die kleinere Schrift durch schrumpfen der großen dynamisch
erstellt werden ? Zum Beispiel zusammenfassen von 4 Pixeln. Bei >2
schwarz, wir der Pixel schwarz dargestellt, bei <=2 weiß.
Nein, bloß nicht, das wird unleserlich.

Bekomme ich irgendwoher fertige Zeichensätze gratis oder relativ
günstig, oder muss ich diese komplett selbst erstellen ?
Nimm Dir ein Linux-System und schau in den Font-Ordner. Da gibts Schriften in
allen Größen und Formen - auch Bitmap-Schriften. Die Datenformate sind bekannt
und nicht allzu kompliziert.

Ich bin nicht absolut auf den PIC festgelegt. Sollte es allerdings damit
gehen, wäre es mir am liebsten, da ich schon viel damit gearbeitet habe
und so die Einarbeitung entfällt.
AVR wäre eine Alternative. Es gibt Prozessoren mit ziemlich viel Flash (128k),
und das sollte eigentlich für alles ausreichen. Und flott sind die auch noch.

Mit freundlichen Grüßen

Dipl.-Ing. Frank-Christian Krügel
 
weisst Du, ob der Displaycontroller eigenen Speicher hat oder nicht?
Nur Ram für den aktuellen Displayinhalt. Keinen Speicher für
Zeichensätze.

200 Zeichen halte ich für ziemlichen Luxus.
Ok. Aber 100 sind auf jeden Fall nötig. Dann benötige ich immer noch 15K
Speicher.

Bist Du sicher, dass die Zeichenmatrix quadratisch sein muss?
Ich behaupte REcheckig fährst Du besser (Must Du ausprobieren).

Müssen die Zeichen 16 bzw. 32 Pixel hoch sein? (Es ist recht sinnfrei,
leere Zwischenräume zwischen den Zeichen / Zeilen mit abzuspeichern).

Die Größenangaben waren nur zur groben Abschätzung. Es soll später keine
Schrift mit fester breite genutzt werden. Ich könnte zum Beispiel in den
ersten beiden Bytes die Breite abspeichern. Allerdings gewinne ich
dadurch nicht viel, da ich immer diese 2 Bytes Overhead habe.


Anfangen würde ich mit dem 16x16 Zeichensatz, anschliessend mal
versuchsweise hochskalieren und dann prüfen, ob sich das ergebnis
angucken lässt.
Werde ich mal versuchen. Den kann ich nämlich noch im Speicher des PIC
unterbringen. Allerdings schätze ich, dass beim einfachen hochskalieren
1Pixel -> 4 Pixel die Schrift nicht mehr so toll aussieht. Einen Versuch
ist es aber auf jeden Fall wert.

Gruß
Wolfgang
 
Ist diese Vorgehensweise sinnvoll, oder gibt es bessere Möglichkeiten,
zum Beispiel fertige Schriftsatz Speicher ?
Sollte die kleinere Schrift durch schrumpfen der großen dynamisch
erstellt werden ? Zum Beispiel zusammenfassen von 4 Pixeln. Bei >2
schwarz, wir der Pixel schwarz dargestellt, bei <=2 weiß.

Bekomme ich irgendwoher fertige Zeichensätze gratis oder relativ
günstig, oder muss ich diese komplett selbst erstellen ?

Am PC mit Visual Basic den kompletten Zeichensatz für eine Schriftart
und -grösse deiner Wahl anzeigen, pixelweise auslesen und geeignet
abspeichern. Das sind nur ein paar Zeilen Code und du kannst die Tabellen
gleich als HEX-Datei oder ASM oder C-Source abspeichern.

Wenn es gut aussehen soll, Proportionalschriften verwenden und die Schriften
inkl. der Antialiasing-Graustufen speichern, was die Lesbarkeit sehr erhöht.

Die Zeichensätze in den benötigten Grössen in einem seriellen EEPROM oder
FLASH-PROM ablegen, billig, ausreichend Platz und einfach anzuschliessen.

Georg
 
Wenn es gut aussehen soll, Proportionalschriften verwenden und die
Schriften
inkl. der Antialiasing-Graustufen speichern, was die Lesbarkeit sehr
erhöht.
^^^^^^^^^^^^^^^^^^^^^^^
Also ich habe bei mir (Win98SE) keine einzige Schriftart, die Graustufen
hat (und ich habe knapp 1000 Schriftarten). Ich glaube auch kaum, dass
das TTF-Format sowas unterstützt.


Gruß,
Arne
 
Arne Rossius schrieb:
Wenn es gut aussehen soll, Proportionalschriften verwenden und die
Schriften
inkl. der Antialiasing-Graustufen speichern, was die Lesbarkeit sehr
erhöht.
^^^^^^^^^^^^^^^^^^^^^^^
Also ich habe bei mir (Win98SE) keine einzige Schriftart, die Graustufen
hat (und ich habe knapp 1000 Schriftarten). Ich glaube auch kaum, dass
das TTF-Format sowas unterstützt.

Das ist die Option "Bildschirmschriften glätten" aber das wird m.W.
nicht abgespeichert, sondern beim Skalieren der TTF (Vektor) Fonts in
Echtzeit gerechnet. Am Bildschirm hast du sehr wohl Graustufen für
"halbe" Pixel.

Martin
 
Das ist die Option "Bildschirmschriften glätten" aber das wird m.W.
nicht abgespeichert, sondern beim Skalieren der TTF (Vektor) Fonts in
Echtzeit gerechnet.
Ach so!

Am Bildschirm hast du sehr wohl Graustufen für
"halbe" Pixel.
Ich nicht. Absichtlich.


Gruß,
Arne
 
Auf einem hochauflösenden PC-Bildschirm macht das nicht viel aus, bei einem
Display mit relativ grober Auflösung sehen die Schriften mit dieser Option
um Klassen besser aus.

Es reicht, wenn man die Zwischenstufen auf wenige Grauwerte reduziert.
Das erhöht allerdings die Speichergröße und die Anzahl der zu
übertragenden Daten um ein Vielfaches.

Viele Grüße
Wolfgang
 
Wolfgang Berger wrote:
Ich möchte ein grafisches Display (132x132 Pixel bei 4092 Farben,
seriell) über einen PIC16F876 ansteuern. Von den Farben genügen mir auch
deutlich weniger. Das Problem ist allerdings, dass mein Display keinen
eingebauten Zeichensatz hat. Das bedeutet, dass ich im PIC Ascii Daten
in Grafik umwandeln muss. Zudem sollte die Schrift in mindestens zwei
Größen zur Verfügung stehen.
Ich hab' für meinen MP3-Player einen netten Font-Converter geschrieben,
der u.a. auch mit PalmOS-Fonts umgehen kann. Die gibt's in 1000
Variationen, meistens sogar frei, und vorallem für die angestrebte
Auflösung gedacht & optimiert. Wenn dein Display eine ähnliche
Organisation wie ein SED1520 Display hat, sollte das Binärformat auch
schon gut geeignet sein.

Ich hab' auch ein fertiges Pack mit ca. 100 Fonts zum downloaden:

http://www.kreapc.de/files/fontpack1.zip

Die grösse der im binärformat vorliegenden Fonts lässt sich ohne
Kompression kaum noch schlagen. (ca. 3-4kb für einen 10Pixel hohen
Proportionalfont mit AFARI 192 Chars)

Allerdings solltest du vor der Benutzung für dein eigenes Projekt
unbedingt den Autor der Fonts fragen:

http://www.rainerzenz.de/palm/alphafonts.html

Die Software, um die Fonts selber umzuwandeln gibbet im
Sourcecode-Archiv für den Player (QtFont):

http://www.kreapc.de/files/src2002-08-04.zip


Viel Spass!
--
thomas.kindler@gmx.de, www.kreapc.de
 
Ok. Aber 100 sind auf jeden Fall nötig. Dann benötige ich immer noch 15K
Speicher.
Du kannst die Fonts auch komprimiert abspeichern. Hier gibt es ein
paar Ideen dazu:

http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=utf-8&threadm=af3f5bb5.0209041444.a67814%40posting.google.com&rnum=1&prev=/groups%3Fq%3Djetmarc%2Bfont%2Bcompression%26sourceid%3Dopera%26num%3D0%26ie%3Dutf-8%26oe%3Dutf-8

In Deinem Fall (2 Fonts) kommst Du sicher mit 1kb locker weg.

Marc
 
Wolfgang Berger schrieb:
weisst Du, ob der Displaycontroller eigenen Speicher hat oder nicht?


Nur Ram für den aktuellen Displayinhalt. Keinen Speicher für
Zeichensätze.


200 Zeichen halte ich für ziemlichen Luxus.


Ok. Aber 100 sind auf jeden Fall nötig. Dann benötige ich immer noch 15K
Speicher.


Bist Du sicher, dass die Zeichenmatrix quadratisch sein muss?
Ich behaupte REcheckig fährst Du besser (Must Du ausprobieren).


Müssen die Zeichen 16 bzw. 32 Pixel hoch sein? (Es ist recht sinnfrei,
leere Zwischenräume zwischen den Zeichen / Zeilen mit abzuspeichern).



Die Größenangaben waren nur zur groben Abschätzung. Es soll später keine
Schrift mit fester breite genutzt werden. Ich könnte zum Beispiel in den
ersten beiden Bytes die Breite abspeichern. Allerdings gewinne ich
dadurch nicht viel, da ich immer diese 2 Bytes Overhead habe.
Hallo Wolfgang. warum schliesst Du nicht jedes Zeichen mit einer Null
ab? --> Overhead 1 Byte pro Zeichen. Ausserdem kannst Du durch einfaches
Nullen Zählen das Zeichen finden, und Sparst Dir so ein Inhaltsverzeichis.

Auch wenn die Breite der Schrift variabel ist, so sollte doch die Höhe
gleich sein. Und es ist doch einen Unterschied, ob Du eine matrix von
16x8 oder 14x8 Pixel hast. Mach Dir mal Gedanken, wie gross die Zeichen
sein sollen, dann weisst Du auch, welchen Speicherplatz Du benötigst.
Mach Dir auch Gedanken, wie der Displaycontroller organisiert ist, das
Spart Usortierarbeiten in der Software (unter C gesht Du bei so was fast
am "Stock").
Anfangen würde ich mit dem 16x16 Zeichensatz, anschliessend mal
versuchsweise hochskalieren und dann prüfen, ob sich das ergebnis
angucken lässt.


Werde ich mal versuchen. Den kann ich nämlich noch im Speicher des PIC
unterbringen. Allerdings schätze ich, dass beim einfachen hochskalieren
1Pixel -> 4 Pixel die Schrift nicht mehr so toll aussieht. Einen Versuch
ist es aber auf jeden Fall wert.

Gruß
Wolfgang
Gruss Jochen
 
Hallo Georg
Vergiss die TTF Fonts von Windows. Wenn Du diese Schriftarten in der
geforderten Pixelgrösse ausliest, dann sieht das einfach furchtbar aus.
Das beste ist immer noch, de Buchstaben Pixel für Pixel zu designen oder
eine Bitmap-Schrift mit entsprechend niedriger auflösung zu wählen.

Gruss Jochen


Georg Meister schrieb:

Ist diese Vorgehensweise sinnvoll, oder gibt es bessere Möglichkeiten,
zum Beispiel fertige Schriftsatz Speicher ?
Sollte die kleinere Schrift durch schrumpfen der großen dynamisch
erstellt werden ? Zum Beispiel zusammenfassen von 4 Pixeln. Bei >2
schwarz, wir der Pixel schwarz dargestellt, bei <=2 weiß.

Bekomme ich irgendwoher fertige Zeichensätze gratis oder relativ
günstig, oder muss ich diese komplett selbst erstellen ?



Am PC mit Visual Basic den kompletten Zeichensatz für eine Schriftart
und -grösse deiner Wahl anzeigen, pixelweise auslesen und geeignet
abspeichern. Das sind nur ein paar Zeilen Code und du kannst die Tabellen
gleich als HEX-Datei oder ASM oder C-Source abspeichern.

Wenn es gut aussehen soll, Proportionalschriften verwenden und die Schriften
inkl. der Antialiasing-Graustufen speichern, was die Lesbarkeit sehr erhöht.

Die Zeichensätze in den benötigten Grössen in einem seriellen EEPROM oder
FLASH-PROM ablegen, billig, ausreichend Platz und einfach anzuschliessen.

Georg
 
Vergiss die TTF Fonts von Windows. Wenn Du diese Schriftarten in der
geforderten Pixelgrösse ausliest, dann sieht das einfach furchtbar aus.
Das beste ist immer noch, de Buchstaben Pixel für Pixel zu designen oder
eine Bitmap-Schrift mit entsprechend niedriger auflösung zu wählen.
Bei den unzähligen TTF-Fonts kann man sich eine Schrift aussuchen, die einem
gefällt. Aber das hat natürlich keinen Sinn, wenn es um sehr kleine
Fontgrössen geht. Windows verwendet da übrigens auch automatisch
Bitmap-Fonts, hab ich mal wo gelesen.

Die Idee war ja, die Daten pixelweise vom Bildschirm auszulesen, um sich das
Selbstzeichnen zu ersparen. Man kann natürlich auch Bitmap-Fonts verwenden.

Georg
 
Auf einem hochauflösenden PC-Bildschirm macht das nicht viel aus, bei
einem
Display mit relativ grober Auflösung sehen die Schriften mit dieser
Option
um Klassen besser aus.

Es reicht, wenn man die Zwischenstufen auf wenige Grauwerte reduziert.

Das erhöht allerdings die Speichergröße und die Anzahl der zu
übertragenden Daten um ein Vielfaches.
Klar ist damit ein etwas grösserer Aufwand verbunden. Man kann sich
allerdings eine einfache Komprimierung überlegen, um den Speicherbedarf
klein zu halten, und wie gesagt, wenige Graustufen reichen.

Georg
 
Hallo,

ich denke, es ist einfacher, aus dem Datenblatt eines Dot-Matrix
Controllers z.B. Hitacht HD 44780 oder so den Zeichensatz abzumalen, und
zu skalieren und anschliessend mit einigen Pixeln noch ein wenig
Schönheitsoperation betreiben.

Gruss Jochen
 

Welcome to EDABoard.com

Sponsor

Back
Top