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); } } }
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.
Im Anhang befindet sich ein Beispiel. Jetzt weiss ich allerdings nicht welche Werte ich für cols bzw. rows geben muss.
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."
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.
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.
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.
Ja, genau so sieht's aus. Endlich ist das Währungsmetallstück gefallen.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.