Forum: Mikrocontroller und Digitale Elektronik Font in C erstellen brauch mal hilfe


von Mannometer (Gast)


Lesenswert?

Hi all!

ich hab ein LCD das keinen Font hat also muss ich den ja selber
machen.

Ich dachte mir folgendes aus:
unsigned char FNT[500]={0,0,0,0,0,0,
                            .
                            .
                        124,10,124,10,0,
                            .
                            .
                         12,12,0,0,0,0};

Des beispiel hingt jetzt ein bischen aber so in dem stil hab ich des
mal in C gemacht aber es klappt nicht so wie ich mir es vorgestellt
hatte.


Jetzt mal an den Erfahrenen C Programierer wie macht ihr das wenn ihr
einen Font erstellt und wie bindet man es ein?

ich hoffe das ich nicht zu oberflächlich mein Problem darstellte.

Gruss

von Ronny (Gast)


Lesenswert?

500 Zeichen....was für ein Font soll es den sein?Der ganze darstellbare
ASCII-Zeichensatz oder auch Sonderzeichen oder nur einige einzelne
Zeichen?

8x8,10x8,12x8,12x10,...?

Wie soll der Font gespeichert werden,pro Pixel ein Bit oder vielleicht
farbig mit mehreren Bits pro Pixel?Wie kopierst du die Fontbitmap in
den Grafikspeicher?Ist das Display korrekt
angeschlossen,initialisiert?

Wie ist das Display in den Adressraum des Mikrocontrollers eingeblendet
und welchen verwendest du überhaupt?

So könnte ich jetzt ewig weitermachen....

von Mannometer (Gast)


Lesenswert?

@Ronny

Es soll ein 8x6 Font werden also  6 Byte ergeben ein Zeichen.
LCD ist ein EA DIP 122-5 Grafik Display.

Display ist Korrekt angeschlossen. Kein Farbdisplay.

>Wie ist das Display in den Adressraum des Mikrocontrollers
eingeblendet

Display ist überhaupt nicht im Adressraum eingeblendet.

>Wie kopierst du die Fontbitmap in den Grafikspeicher?

Byte weise.

Nun da mir etwas die Grundlagen zum erstellen von Fonts fehlen habe ich
gehofft, dass jemand der Ahnung davon hat ein bischen unter die Arme
greift.

von Ronny (Gast)


Lesenswert?

Die letzte Bemerkung könnte ich persönlich nehmen.Schau dir mal an wie
andere hier hier Fragen stellen (insbesondere wie das entsprechende
Problem erklärt wird) und wielange es dauert bis eine Antwort
kommt.Fällt dir was auf?

Ok,du hast also das Display direkt dran gestöpselt und entsprechende CS
Signale für linke und rechte Displayhälfte.

Kannst du denn einzelne Pixel schreiben?Wenn ja,wie liest du ein Bit
aus dem Font aus und wohin schreibst du es?

von Karl H. (kbuchegg)


Lesenswert?

> mal in C gemacht aber es klappt nicht so wie ich mir es vorgestellt
> hatte.
>
> dass jemand der Ahnung davon hat ein bischen unter die Arme
> greift.

Wenn dir jemand helfen soll, dann musst du
'aber es klappt nicht so wie ich mir es vorgestellt habe' etwas
genauer erläutern.

Prinzipiell ist dein Ansatz mit dem Array ja nicht schlecht.
Was klappt den nicht? Was passiert stattdessen?

von Karl H. (kbuchegg)


Lesenswert?

Ach ja.
Das Array (eigentlich der Array-Inhalt) ist ja nun mal nur
die halbe Miete.
Aber wie gehts weiter? Was machst du mit dem Array?

von A.K. (Gast)


Lesenswert?

Was ist denn dein Problem? Den Font als C-Array zu erzeugen, oder mit
einem erstellten Array etwas anzufangen?

von Lanius (Gast)


Angehängte Dateien:

Lesenswert?

unter Linux könntest du zB den Font im *.xbm - Format mit Gimp
erstellen, das Format ist C-Quelltext den du leicht wie eine
Header-Datei einbinden kannst. Welches Grafikprogramm unter Windows xbm
kann, keine Ahnung.
Die Ausrichtung des Fonts sollte möglichst mit der Ausrichtung der
Bytes auf deinem Display übereinstimmen, dann brauchst du nicht mit
Pixeln zu Arbeiten.

Beispiel im Anhang

von one (Gast)


Lesenswert?

gimp gibts auch fuer windows (und mac....) gähn

ist zwar lang her als ichs mal unter win getestet hab aber iirc gabs da
keinen unterschied.

gruesse

von Mannometer (Gast)


Lesenswert?

Hallo Leute!

Tut mir Leid das meine Antworten spät folgen liegt daran, das ich die
ganze Zeit an dem Font gearbeitet hatte und  habe das Problem soweit
gelöst.

Da hier einige sehr empfindlich sind möchte ich mich hiermit
Entschuldigen.

Wollt ja niemand mit meinem Code Kauderwelsch oder Schaltungsteteils
langweilen.

Um dem aber trotzdem gerecht zuwerden werde ich es doch erzählen.

Ich  hab mir ein kleines Experimentier Board gebastelt mit einen
AT89C51Ed2 drauf.
Das LCD - Display DIP 122-5 wird über I²C-Bus von zwei
Porterweiterungsbausteine PCF8574 gesteuert.
Eine 12*1 Tasturfeld ebenfalls mit zwei PCF8574 angesteuert.
Dann sind noch 8 Tasten direkt an Port 1 angeschlossen.
An Port0 und Port2 hängen dann noch LED's für Status Ausgaben oder
andere Spielereien.
Achja ne Uhr PCF8583 ist auch noch drauf auch über I²C-Bus.

Alle Baugruppen funktionieren soweit und machen keine Probleme.

Da ich die meiste Zeit damit verbracht habe in Assembler zu
Programmieren, dachte ich mir, das ich meine C Kenntnisse ein bischen
aufzufrischen sollte.

Nachdem ich mir ein paar Routinen zur Ansteuerung des I²-Bus erstellt
habe, machte ich auch gleich an die Routinen für LCD Ausgaben ran.

Da das LCD keinen eigenen Font besitzt muss man es selber herstellen
und im Speicher ablegen.

Dabei soll es sich um ein 8x6 Font im Standard ASCII format handeln.
bsp.  Zeichen  'A' = 0x7C,0xA,0x9,0xA,7C,0

Die probleme die sich stellten waren, wenn das Array als
unsigned char[546]= {......};

im xdata - Bereich abgelegt wurde, beim Auslesen nur pixelmist
herausgekommen ist.

Das nächste war ein reines Anfängerproblem, hab bei der Funktion zur
Zeichenausgabe in der Parameterliste nur unsigned char anstatt int
verwendet.

Dadurch gab es eine Fehlberechnung des Arrays und alles fing ab 255
wieder bei null an. :((

Nachdem ich das Array im Code-Bereich abgelegt hatte funktioniert
alles.

Trotzdem frage ich mich, ob man die sache mit dem Font nicht einfacher
und besser lösen könnte oder einfach anders.

So! dann Danke ich mal allen die mich verseckelt haben und hoffe
dass jetzt genügend Überblick über die Harware besteht.

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.