Forum: Mikrocontroller und Digitale Elektronik Fonttabel multiliziert mit 2 ?


von Martin S. (sv_martin)


Angehängte Dateien:

Lesenswert?

Tag an alle,

Ich geb mal die Hardware an, Atmega 16, STK 500, EADIP 122X32 PIX
Grafikdisplay.

Ich habe mit den Fontgenarator (GLCDFontGenarator 2.1) die 
Wochentag-Kürzel für meine Kalender/WeckerFunktion erstellt siehe 
Dateianhang.
Größe 10 x 16 px

Jetz folgt die FUnktion die im 2D Array die Wochentage nach NR. 0...6
MO...SO erstellt.
1
//-----------------------------------------------------------
2
//Die Ausgabe des Wochetag's MO, DI, ......SO;; werden aus den Zeichen in WochenTag.h  zusammengesetzt 
3
//    momentane Zeichenmaske    MO    DI    MI    DO    FR    SA    SO
4
//    die position der Font.h   0,1   2,4  0,4    2,1   7,5   3,6   3,1
5
//  hier wirds ein bischen Suspekt die FUnktion eines richtig dargestellen Zeichens setzt eien Verdopplung der PosNr voraus
6
7
//  MO=>0; DI=>1; MI=>2; DO=>3; FR=>4; SA=>5; SO=>6
8
//-----------------------------------------------------------
9
void GLCD_WriteDay(int x, int px)
10
{
11
  uint8_t wochen_Tag[2][7]={{ 0, 4, 0, 4, 14, 6, 6 },
12
                           {2, 8, 8, 2, 10, 12, 2 }};  
13
14
  int i;
15
  int j;
16
  px *= 10;
17
  for (j = 0; j < 2; j++)
18
  {
19
    GLCD_GoTo(px,0+j);  
20
    for(i = 0; i < 10; i++)
21
    {
22
        GLCD_WriteData(pgm_read_byte(font10x16 + (10* (wochen_Tag[0][x]+j)) + i));
23
    }
24
//---------------------------------------------- Eingefügt für das zweite Zeichen
25
    GLCD_GoTo(px+10,0+j);
26
    for(i = 0; i < 10; i++)
27
    {
28
        GLCD_WriteData(pgm_read_byte(font10x16 + (10 * (wochen_Tag[1][x]+j) ) + i));
29
    }
30
31
    GLCD_WriteData(0x00);
32
  }
33
}


Was ich kier supersuspekt finde ist die quasiCharNummerierung
also "0" mein "M"
     "1" das  "O" OH
usw siehe Fonttabelle "WochenTag.h

Warum will diese f...ing Tabelle eine Verdopplung ihrer PosNr.??

hab auch schon ander Variablengrößen versucht " int", "char".
"long" und " double" noch nicht


Das überstigt komplett den Inhalt meiner C-Bücher

Danke Grüße
Martin

von ??? (Gast)


Lesenswert?

Kannst du das mal auf Deutsch formulieren? Ich versteh nur Bahnhof.

von Martin S. (sv_martin)


Lesenswert?

??? schrieb:
> Kannst du das mal auf Deutsch formulieren?

In der TAbelle ist das
1
    0x00, 0xFF, 0xFF, 0x0E, 0x3C,   0x3C, 0x0E, 0xFF, 0xFF, 0x00,
2
    0x00, 0x3F, 0x3F, 0x00, 0x00,   0x00, 0x00, 0x3F, 0x3F, 0x00,
3
    // [M]    Index 0  Position 1  
4
  
5
  0x00, 0xFC, 0xFE, 0x07, 0x03,   0x03, 0x07, 0xFE, 0xFC, 0x00,
6
    0x00, 0x0F, 0x1F, 0x38, 0x30,   0x30, 0x38, 0x1F, 0x0F, 0x00,
7
  // [O]  Index 1  Position 2
um ein  [O] an das Dipl. zu senden   muss ich aber im Array eine 2 
stehen haben.

sozusagen keine ungeraden Zahlen das "was weiß ich" möchte halt alles 
schön Symetrisch immer durch 2 Teilbar.

von ??? (Gast)


Lesenswert?

Ne, da kann ich nicht helfen, ich versteh die Frage nämlich weiterhin 
nicht.

von Thomas E. (thomase)


Lesenswert?

??? schrieb:
> ich versteh die Frage nämlich weiterhin
>
> nicht.

Das hat wahrscheinlich noch niemand verstanden.

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Thomas Eckmann schrieb:
> ??? schrieb:
>> ich versteh die Frage nämlich weiterhin
>>
>> nicht.
>
> Das hat wahrscheinlich noch niemand verstanden.

Richtig.

Ich seh allerdings im Code auch nichts, was jetzt irgendwie suspekt 
wäre.

Vielleicht wirft den Fragesteller die Tatsache aus der Bahn, dass jede 
Fontspalte 16 Bit hoch ist, also aus 2 Bytes besteht, die in y Richtung 
übereinander angezeigt werden.

Ansonsten kommt im ganzen Code keine 2 vor und diese 2 ist eben durch 
eine Pixelhöhe von 16 für den Font leicht zu erklären.

von Martin S. (sv_martin)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ansonsten kommt im ganzen Code keine 2 vor und diese 2 ist eben durch
> eine Pixelhöhe von 16 für den Font leicht zu erklären.

Na gut, also Entschuldigung erst mal , ich war mit Kochen dran, 
möglicherweise war ich zu hektisch.
1
uint8_t wochen_Tag[2][7]={{ 0, 4, 0, 4, 14, 6, 6 },
2
                  {  2, 8, 8, 2, 10, 12, 2 }};

diese 2D Array gibt mir die Kürzel für die Wochentage aus.
 der Ursprung war jedoch.
So würde es sich mit der Fonttabelle decken
1
uint8_t wochen_Tag[2][7]={{ 0, 2, 0, 2, 7, 3, 3 },
2
                  {  1, 4, 4, 1, 5, 6, 1 }};

Hier wurden in der Ausgabe immer untere Teile von einem "O" oder der 
obere Teil vom einem "A" erzeugt. nach ein nicht gerne genannten Zeit 
des Grübelns und Tüffteln war ich entsetzt das die Lösung des Problems 
in der Verdopplung der PositionNr. der Fonttabelle lag.

Vor einigen Wochen habe ich mir Ziffern in 3Byte Höhe erstellt und hier 
wurde je Positionsnummer zwar 3mal inkrementiert ( um die drei Zeilen 
aufzubauen) ich behaupte aber jetzt einfach mal das die Ziffern mit 
Ihrer "Basisadresse" aufgerufen wurden. (auf keinen FAll als "ich hab 
recht" verstehen)
Da ich hier in Anlenung zu den großen Ziffern gearbeitet habe, war ich 
ja so entsetzt das ich ein Zeichen mit seinem doppelten Tabellenindex 
ansprechen muss.

Was  kbuchegg  da erwähnt würde ja dann auch bedeuten, dass ein ASCII 
Zeichensatz mit 16px Höhe dann für ein "W" eine dez 174 (2*87) erwartet.

wenn dem so ist werde ich stillscheigen anfangen weiter Probleme zu 
produziern, die nur ich nicht verstehe.

Danke vorerst
Martin

von Karl H. (kbuchegg)


Lesenswert?

Martin Sv schrieb:

> So würde es sich mit der Fonttabelle decken
>
>
1
> uint8_t wochen_Tag[2][7]={{ 0, 2, 0, 2, 7, 3, 3 },
2
>                   {  1, 4, 4, 1, 5, 6, 1 }};
3
>

Wie kommst du darauf?
Jedes zeichen besteht aus 20 Bytes im Font. Deine Formel

10* (wochen_Tag[0][x]+j

rechnet aber nur in 10-er Einheiten. Also musst du im wochen_Tag Array 
eine Korrektur vornehmen, die berücksichtigt, dass jedes Zeichen aus 2 
Stück 10-er Einheiten besteht.

von G a s t (Gast)


Lesenswert?

Bleibt in der Zeichenmatrix vielleicht immer eine Zeile leer, so dass 
keine ungeraden Werte in der Tabelle auftreten für eine Cursorzeile) 
bzw. eine Spalte für einen Buchstabenabstand?

von Martin S. (sv_martin)


Lesenswert?

Ok, dann eine Folgefrage

das fogeldne ist die Funktion der 15x24 Fonts
1
//-------------------------------------------------------------------
2
//funkt. für großen Zahlen
3
// ------------------------------------------------------------------
4
void GLCD_WriteChar_G(int x, int px) {                                    
5
  char i;
6
  char j;
7
  x -= 1;
8
  x *= 3;
9
  px *= 15;
10
  for (j = 0; j < 3; j++)
11
  {
12
    GLCD_GoTo(px,0+j);
13
14
    for(i = 0; i < 15; i++)
15
    {
16
        GLCD_WriteData(pgm_read_byte(font15x24 + (15 * (x+j) ) + i));
17
    }
18
19
    GLCD_WriteData(0x00);
20
  }
21
}
hier arbeite ich auch mit der 15 was ja nach dem Bsp. von Oben dann
 45 oder ... ?? bedeuten müsste.
Ahh das hängt dan wohl mit der
1
  x -= 1;
2
  x *= 3;
zusammen.


Ja wieder mal Danke an das Team für das kleine Lichtlein da am Horizont
Es wurde sehr geholfen

Grüße
Martin

von Martin S. (sv_martin)


Lesenswert?

G a s t schrieb:
> Cursorzeile)
> bzw. eine Spalte für einen Buchstabenabstand?

nö, ich hab zwar eine Breite von 10 px die erste und letzt Spalte sind
kpl.0x00  unbenutzt
ebenso die unterste Pixelreihe oder Courserzeile.also kein 0xFx

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.