Forum: Mikrocontroller und Digitale Elektronik Hilfe zu Code Ausschnitt


von Blacky (Gast)


Angehängte Dateien:

Lesenswert?

Mit dem Display T6963 möchte ich eine Bitmap Grafik darstellen lassen.
Im Internet habe ich diesen C-Code gefunden.
Ich habe mir desshalb den Code heruntergeladen, weil dieser eine
Funktion zum Darstellen eines Bitmaps beinhaltet.
Jetzt weiss ich allerdings nicht welche Werte ich für cols und rows
geben muss. Mir ist nicht ganz klar warum ich cols und rows vorgeben
muss. Kann mir jemand dazu helfen?

void t6963_copy_bitmap(u16 lcd_adr, PGM_P bitmap, u08 cols, u08 rows,
u08 invert)
{
  // lcd_adr = start adress in the display RAM
  // bitmap = pointer to the bitmap in the flash
  // cols = cols of the bitmap in bytes (pixel / 8)
  // rows = rows of the bitmap in pixel (row = Reihe)
  // invert = if > 0, then bitmap is inverted (maybe a bug in BMP2C)

  u08 row, col, data;
  u16 lcd_ptr;

  for(row=0; row < rows; row++)
  {
    lcd_ptr = lcd_adr + (row * cols);
    t6963_write_cmd2(CMD_SET_ADRESS_POINTER , lo8(lcd_ptr),
hi8(lcd_ptr));

    for(col=0; col < cols; col++)
    {
      data = pgm_read_byte(bitmap + (row * cols) + col);
      if(invert) data = ~data;
      t6963_write_cmd1(CMD_DATA_WR_INC, data);
    }
  }
}

von Rufus T. Firefly (Gast)


Lesenswert?

Da mit einem Schreibvorgang gleich 8 Bit in horizontaler Anordnung
geschrieben werden, ist doch naheliegend, daß cols die Horizontale
Pixelzahl / 8 sein muss.

Wo liegt das Problem?

Die Größe der Bitmap musst Du angeben, weil ... naja, sie könnte ja
auch kleiner sein, nicht?

Allerdings funktioniert diese Routine nicht sinnvoll mit Bitmaps, die
schmaler sind als das Display, aber immerhin mit welchen, die weniger
hoch sind.

von Blacky (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang befindet sich ein Beispiel.
Jetzt weiss ich allerdings nicht welche Werte ich für cols bzw. rows
geben muss.

von Blacky (Gast)


Lesenswert?

Hallo Rufus!

Was meinst du mit "Allerdings funktioniert diese Routine nicht
sinnvoll mit Bitmaps, die
schmaler sind als das Display, aber immerhin mit welchen, die weniger
hoch sind."

von Blacky (Gast)


Lesenswert?

Hi Rufus!

Kannst du mir anhand eines Beispiels sagen welche Werte ich für cols
und rows geben muss. Ich hab das immer noch nicht verstanden.

von Rufus T. Firefly (Gast)


Lesenswert?

Die Routine macht nichts anderes, als alles Bytes, aus denen die Bitmap
besteht, nacheinander an das Display zu übertragen. Ist die Bitmap
schmaler als das Display, so werden die Daten, die eigentlich in der
zweiten Zeile des Displays dargestellt werden sollte, rechts an die
erste Zeile angehängt, bis die Display-Zeile voll ist.

Mal eine Demonstration:

Display ist 10 "Pixel" breit, Bitmap ist 8 "Pixel" breit

Bitmap:
00000000
11111111
22222222
33333333

Wird so dargestellt:
0000000011
1111112222
2222333333
33

und so weiter.

Als Breite musst Du also die Breite des von Dir verwendeten Displays
angeben - und die Bitmap muss dazu passen.

Das von Dir gepostete "Beispiel" ist zumindest von den Konstanten her
fragwürdig; ich glaube nicht, daß das Display 67 Pixel breit ist.

von Blacky (Gast)


Lesenswert?

Vielen Dank Rufus!

Achso.... am besten ich erzeuge gleich ein Bitmap mit 128x128 Pixeln.
Mein Display hat nämlich diese größe.
Dann kann ich auch für cols 128 und für rows 128 eingeben.

von Rufus T. Firefly (Gast)


Lesenswert?

Ja, genau so sieht's aus. Endlich ist das Währungsmetallstück gefallen.

von Thorsten (Gast)


Lesenswert?

@Blacky:
Wo hast Du denn den Code gefunden? Ich hab ihn auch mal runtergeladen,
weiss aber nicht mehr woher (und mit welcher Lizenz).

Da ist naemlich ein kleiner Fehler drin, den ich mal dokumentieren
wollte: Das Setzen der CG RAM Offset Adresse ist falsch:

#define  CG_RAM_START  0x1800
#define  CG_RAM_END  0x1FFF    // CG-RAM must be 2048 Byte !!!
#define CG_RAM_OFFSET  (CG_RAM_START & 0xF800)  // upper 5 bits of the
start address

t6963_write_cmd2( CMD_SET_OFFSET_REGISTER, hi8( CG_RAM_OFFSET ), 0 );

Im Datenblatt heisst es:
The lower five bits of the first data byte should be set to the upper 5
bits of the start address for the character generator RAM (CG-RAM)
area.

Also muss man da noch verschieben ...

Sorry, dass ich immer so alte Beitraege rauskrame, aber das Forum ist
fuer mich auch immer eine Art Bibliothek, und es waere schade, wenn da
Fehler nicht richtig gestellt wuerden.

Schoene Gruesse aus London

Thorsten

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.