Verständiniss Problem data = pgm_read_byte(X);

Gast #366751
Hallo

Bin am verzweifeln beim Textdarstellen eines Displays von Display
3000.


Bekomme die textdarstellung nicht hin.

habe aus einen Beispiel folgendes


int n6100DrawChar(char c) {
  uint16_t index;
  uint8_t i, j, w, data, skipped=1, startY=yCoord;

  sendCMD(MEM_ACCESS_CTRL);
  memAccessCtrl |= (0x01 << VERT_WRITE);
  sendData(memAccessCtrl);

  if(c == '\n')
    n6100NewLine();
  if(c < 32)
    return 0;

  c -= 32;
  index = c*f.width*(f.height/8);

  for(w=0; w<f.width; w++) {
    for(i=0; i<f.height/8; i++) {
      data = pgm_read_byte(f.charData + index++);
      for(j=0; j<8; j++) {
        if(data & 0x01) {
          if(skipped) {
            n6100GotoXY(xCoord, yCoord);
            sendCMD(MEM_WRITE);
            skipped=0;
          }
          n6100DrawPixel();
          yCoord++;
        } else {
          skipped=1;
          n6100GotoXY(xCoord, ++yCoord);
        }
        data >>= 1;
      }
    }
    n6100GotoXY(++xCoord, startY);
  }

  sendCMD(MEM_ACCESS_CTRL);
  memAccessCtrl &= ~(0x01 << VERT_WRITE);
  sendData(memAccessCtrl);

  return 0;
}


wenn ich als c ='9' schicke dann sieht es aus wie Japanische
Schrift.
aber nicht wie eine 9


  0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // "9"

welchen wert hat data bei

    data = pgm_read_byte(f.charData + index++);

hatt data 01101101????


danke
Angehängte Dateien:
Gast
"0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // "9"" stammt aus der 6x8
Fonttabelle.

Die Werte sind in Binärdarstellung

00000000
00000110
01001001
01001001
00101001
00011110

Rotiert (90° CCW) wegen 6=Breite und 8=Höhe

00###0
0#000#
0#000#
00####
00000#
0000#0
000#00
000000

Sieht wie eine "9" aus ;-)

Schiefgehen könnte die Anzeige im Programm, wenn die Struktur f nicht
mit den korrekten Daten über den Font gefüllt ist. D.h. f.width z.B.
nicht auf 6 steht... oder die f.chardata nicht auf das Font6x8 Array
zeigt. Danach sieht es aber nicht aus, die Initialisierung kommt mir
korrekt vor.

Ich würde auch Deinen Ansatz verfolgen und an der Stelle "data =
pgm_read_byte(f.charData + index++);" kontrollieren, mit was data
gefüllt wird.

Die Folge 01101101 (0x6D) kommt bei der "9" nicht vor, sie kommt
sogar nirgends vor, d.h. möglicherweise zeigt f.chardata nicht auf das
Font6x8 Array, oder pgm_read_byte() arbeitet nicht richtig oder index
ist falsch berechnet.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.