Hallo,
ich möchte gerne eine Funktion schreiben die mir mein Character aus dem
Array zieht.
Wie berechne Ich denn nun den Start bzw. Anfang von meinem Zeichen?
Es gibt ja einen Bereich in dem steht wie breit ein Zeichen ist (in
words - 16 Bit). Du musst also die Beiten aller Zeichen die vor deinem
gesuchten Zeichen im Array stehen aufsummieren.
Martin schrieb:> Es gibt ja einen Bereich in dem steht wie breit ein Zeichen ist> (in> words - 16 Bit). Du musst also die Beiten aller Zeichen die vor deinem> gesuchten Zeichen im Array stehen aufsummieren.
Und woher weiß Ich wie viele ich aufsummieren muss bis mein Zeichen
kommt?
Peter W. schrieb:> Und woher weiß Ich wie viele ich aufsummieren muss bis mein Zeichen> kommt?
Du wirst ja wohl wissen wo das Zeichen steht, sonst könntest du es ja
garnicht verwenden.
>Es gibt ja einen Bereich in dem steht wie breit ein Zeichen ist (in>words - 16 Bit). Du musst also die Beiten aller Zeichen die vor deinem>gesuchten Zeichen im Array stehen aufsummieren.
+ die 6Byte für size .. + 96 Bytes für die char widths
Peter W. schrieb:> Und woher weiß Ich wie viele ich aufsummieren muss bis mein Zeichen> kommt?
Weißt du was ASCII ist? Jedes Zeichen entspricht einer Nummer.
Peter W. schrieb:> Die Tabelle folgt doch gar nicht der ASCII Tabelle?Martin schrieb:> Den Ofset musst du aber auch berücksichtigen, die Tabelle fängt erst> beim Space (0x20) an.
Martin schrieb:> dummschwaetzer schrieb:>> + die 6Byte für size .. + 96 Bytes für die char widths
Ah okay überlesen.
Nun wenn ich '0' + 102 rechne komme Ich immer noch nicht an den Anfang
der Zahl '0' ich muss die breiten von den vorherigen Zahlen noch hinzu
rechnen oder?
genau!
Das erste Zeichen in der Tabelle ist das Space 0x20 32. Wobei das
Space eine Breite von 0 hat. Das nöchste Zeiche (0x21 / 33) ist das '!'
. Das hat eine Breite von 1 Pixel.
// char widths
0x00, 0x01, 0x03, 0x08, 0x07, 0x0A, 0x08, 0x01, 0x03, 0x03,
// font data
0xFE, 0x14, // 33
0x1E, 0x00, 0x1E, 0x00, 0x00, 0x00, // 34
Beachte, da jedes Zeichen 14 Bit hoch ist benötigt jede Spalte 2 Byte.
Jetzt musst du nur von 0x20 (32, Space) bis 0x30 (48, '0') zählen und
die Werte unter "char widths" aufaddieren.
Hast du irgendwo in der Doku die Beschreibung welches Bit welchem Pixel
entspricht,
z.B Breite 1:
0xFE, 0x14, // 33
Das sind 16Bit, deine schrift iat aber nur 14Pixel(0x0E, // height)
hoch.
dummschwaetzer schrieb:> Hast du irgendwo in der Doku die Beschreibung welches Bit welchem> Pixel> entspricht,> z.B Breite 1:> 0xFE, 0x14, // 33> Das sind 16Bit, deine schrift iat aber nur 14Pixel(0x0E, // height)> hoch.
Bei meinem Display wird alles "senkrecht" geschrieben.
[C]
0 // Bit 7
0
0
0
0
0
0
0 // Bit 0
{/C]
Das wäre die Erste Zeile vom Display.
dummschwaetzer schrieb:> mach mal das Ausrufezeichen, W, w, \, / mit in deinen teststring
Habe das Board gerade nicht zur Hand. Werde es morgen früh direkt
ausprobieren.
Was soll das bringen?
Welche Bits der 16 vorgegebenen sind zu viel?
Beispiel:
!
0xFE, 0x14, // 33
Zeile Interpretation1
0 X -\
1 X - \F
2 X - /
3 X -/
4 X -\
5 X - \E
6 X - /
7 -/
8 -\
9 - \1
10 - /
11 X -/
12 -\
13 X - \4
14 - /
15 -/
sieht komisch aus für ein Ausrufezeichen.
dummschwaetzer schrieb:> Welche Bits der 16 vorgegebenen sind zu viel?> Beispiel:> !> 0xFE, 0x14, // 33
Was soll mir das jetzt sagen? Die Zeichen sehen soweit richtig aus. Es
wird glaube Ich mal nicht am Zeichensatz liegen, meinste nicht auch?
dummschwaetzer schrieb:> sieht komisch aus für ein Ausrufezeichen.
Vom zweiten Byte nur 6 bit,
vom ersten kommt bit 0 natürlich nach oben
7 - byte 0 bit 0
6 X - byte 0 bit 1
5 X - byte 0 bit 2
4 X - byte 0 bit 3
3 X - byte 0 bit 4
2 X - byte 0 bit 5
1 X - byte 0 bit 6
0 X - byte 0 bit 7
13 X - byte 1 bit 0
12 - byte 1 bit 3
11 X - byte 1 bit 4
10 - byte 1 bit 5
9 - byte 1 bit 6
8 - byte 1 bit 7
Michael B. schrieb:> dummschwaetzer schrieb:>> sieht komisch aus für ein Ausrufezeichen.>> Vom zweiten Byte nur 6 bit,> vom ersten kommt bit 0 natürlich nach oben
Ja gut. Soll das heißen das mein anderes Byte verkehrt rum geschrieben
wird?
dummschwaetzer schrieb:> und da sind seine zwei Leerzeilen in seinem Displaybild.> vom 2.Byte die ersten beiden Bits nicht auf das Display.
Wieso wird dann solch ein Font erstellt? Das kommt doch sicherlich von
einem PC Programm? Gibt es andere Displays die nicht senkrecht die Bytes
auf dem Bildschirm werfen sondern waagerecht?
Man kann je nach Setup viele Displays von oben nach unten, unten nach
oben, links nach rechts oder rechts nach links beschreiben. Wie man es
halt gerade braucht. Oder weil man das Display um 90° drehen möchte.
Oder vielleicht hat man einen Spiegel dazwischen...
Und manch einer weiß das alles nicht und schreibt daher seinen Font
komisch. Schon alles gesehen.
Nico W. schrieb:> Man kann je nach Setup viele Displays von oben nach unten, unten> nach> oben, links nach rechts oder rechts nach links beschreiben. Wie man es> halt gerade braucht. Oder weil man das Display um 90° drehen möchte.> Oder vielleicht hat man einen Spiegel dazwischen...>> Und manch einer weiß das alles nicht und schreibt daher seinen Font> komisch. Schon alles gesehen.
Na gut. Ich hoffe ja da drauf das es wirklich mit dem unteresBild<<2 ist
und sich das Problem dadurch lösen lässt. Bin zuversichtlich-
Korrektur:
Michael B. schrieb:> 7 - byte 0 bit 0> 6 X - byte 0 bit 1> 5 X - byte 0 bit 2> 4 X - byte 0 bit 3> 3 X - byte 0 bit 4> 2 X - byte 0 bit 5> 1 X - byte 0 bit 6> 0 X - byte 0 bit 7> 13 X - byte 1 bit 0> 12 - byte 1 bit 3> 11 X - byte 1 bit 4> 10 - byte 1 bit 5> 9 - byte 1 bit 6> 8 - byte 1 bit 7dummschwaetzer schrieb:> vom 2.Byte die ersten beiden Bits nicht auf das Display.
vom 2.Byte das zweite und dritte Bit nicht auf das Display.
Tatsächlich! Das war es. Wieso aber funktioniert das? Hat man den Font
extra so angelegt? Ist das jetzt wirklich Display spezifisch?
Danke an alle die geholfen haben.
Was mir jetzt noch aufgefallen ist. Wenn ich einen String ausgeben will
mit dem Text, wie berechne Ich die Leerzeichen dazwischen? Aktuell
schreib Ich jedes Zeichen auf das letzte..