www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fonttabel multiliziert mit 2 ?


Autor: Martin Sv (sv_martin)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.
//-----------------------------------------------------------
//Die Ausgabe des Wochetag's MO, DI, ......SO;; werden aus den Zeichen in WochenTag.h  zusammengesetzt 
//    momentane Zeichenmaske    MO    DI    MI    DO    FR    SA    SO
//    die position der Font.h   0,1   2,4  0,4    2,1   7,5   3,6   3,1
//  hier wirds ein bischen Suspekt die FUnktion eines richtig dargestellen Zeichens setzt eien Verdopplung der PosNr voraus

//  MO=>0; DI=>1; MI=>2; DO=>3; FR=>4; SA=>5; SO=>6
//-----------------------------------------------------------
void GLCD_WriteDay(int x, int px)
{
  uint8_t wochen_Tag[2][7]={{ 0, 4, 0, 4, 14, 6, 6 },
                           {2, 8, 8, 2, 10, 12, 2 }};  

  int i;
  int j;
  px *= 10;
  for (j = 0; j < 2; j++)
  {
    GLCD_GoTo(px,0+j);  
    for(i = 0; i < 10; i++)
    {
        GLCD_WriteData(pgm_read_byte(font10x16 + (10* (wochen_Tag[0][x]+j)) + i));
    }
//---------------------------------------------- Eingefügt für das zweite Zeichen
    GLCD_GoTo(px+10,0+j);
    for(i = 0; i < 10; i++)
    {
        GLCD_WriteData(pgm_read_byte(font10x16 + (10 * (wochen_Tag[1][x]+j) ) + i));
    }

    GLCD_WriteData(0x00);
  }
}


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

Autor: ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du das mal auf Deutsch formulieren? Ich versteh nur Bahnhof.

Autor: Martin Sv (sv_martin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
??? schrieb:
> Kannst du das mal auf Deutsch formulieren?

In der TAbelle ist das
    0x00, 0xFF, 0xFF, 0x0E, 0x3C,   0x3C, 0x0E, 0xFF, 0xFF, 0x00,
    0x00, 0x3F, 0x3F, 0x00, 0x00,   0x00, 0x00, 0x3F, 0x3F, 0x00,
    // [M]    Index 0  Position 1  
  
  0x00, 0xFC, 0xFE, 0x07, 0x03,   0x03, 0x07, 0xFE, 0xFC, 0x00,
    0x00, 0x0F, 0x1F, 0x38, 0x30,   0x30, 0x38, 0x1F, 0x0F, 0x00,
  // [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.

Autor: ??? (Gast)
Datum:

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

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

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

Das hat wahrscheinlich noch niemand verstanden.

mfg.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Sv (sv_martin)
Datum:

Bewertung
0 lesenswert
nicht 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.
uint8_t wochen_Tag[2][7]={{ 0, 4, 0, 4, 14, 6, 6 },
                  {  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
uint8_t wochen_Tag[2][7]={{ 0, 2, 0, 2, 7, 3, 3 },
                  {  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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Sv schrieb:

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

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.

Autor: G a s t (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Martin Sv (sv_martin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, dann eine Folgefrage

das fogeldne ist die Funktion der 15x24 Fonts
//-------------------------------------------------------------------
//funkt. für großen Zahlen
// ------------------------------------------------------------------
void GLCD_WriteChar_G(int x, int px) {                                    
  char i;
  char j;
  x -= 1;
  x *= 3;
  px *= 15;
  for (j = 0; j < 3; j++)
  {
    GLCD_GoTo(px,0+j);

    for(i = 0; i < 15; i++)
    {
        GLCD_WriteData(pgm_read_byte(font15x24 + (15 * (x+j) ) + i));
    }

    GLCD_WriteData(0x00);
  }
}

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
  x -= 1;
  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

Autor: Martin Sv (sv_martin)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.