ST7735R und INITR_REDTAB und Farbkonstanten

Moin zusammen,

ich habe das Display ST7735 -> http://www.wide.hk/products.php?product=1.8"-Serial-SPI-LCD-%2b-MicroSD-Socket-(ST7735)-%2b-ADXL335-%2d-Compatible-Arduino
in Verbindung mit einem Arduino Nano. Zugriff klappt super und der Code läuft auch performant ab.

Leider passen die Konstanten der Farbdefinitionen nicht. :frowning: Aus Gelb wird dann z.B. Hellblau.
Daher meine Frage, ob mir jemand erklären kann, wie die Werte aufgebaut sind.

Hier meine bisherigen korrekten Farben:

#define COLOR_BLACK   		0x0000
#define COLOR_GREEN 			0x07E0
#define COLOR_MIDDLE_GREEN 	0x06A0
#define COLOR_DARK_GREEN 	0x05A0
#define COLOR_BLUE			0xF800
#define COLOR_DARK_BLUE		0xFA00
#define COLOR_LEIGHT_BLUE  	0xFFE0  
#define COLOR_GRAY_BLUE		0xFF00
#define COLOR_RED 			0x001F
#define COLOR_YELLOW		0x07FF

Gruß und Dank
Kai

Es handelt sich um ein 16-bit RGB System. Die Farben Setzen sich aus 5 bit rot, 6 bit grün und 5 bit blau zusammen:

ein 16-bit wort sieht also so aus: BBBB-BGGG-GGGR-RRRR

Willst du die Grundfarben Rot Grün und Blau, dann setzt du die Jeweiligen bits auf 1, den Rest auf 0

Rot:  0000-0000-0001-1111 -> 0x001F
Grün: 0000-0111-1110-0000 -> 0x07E0
Blau: 1111-1000-0000-0000 -> 0xF800

So hast du es ja bereits gehabt. Die Mischfarben Cyan, Magenta und Gelb lassen sich also einfach herleiten:

Magenta: 1111-1000-0001-1111 -> 0x001F
Gelb:    0000-0111-1111-1111 -> 0x07E0
Cyan:    1111-1111-1110-0000 -> 0xF800

Du kannst auch eine einfache Funktion machen, die aus jeweils 8-bit R, G und B dein 16 bit RGB macht:

uint16_t RGB(byte red, byte green, byte blue){
  red >>= 3; //Reduzieren auf 5 bits
  green >>= 2; //Reduzieren auf 6 bits
  blue >>= 3; //Reduzieren auf 5 bits
  return (uint16_t)(blue << 11) | (uint16_t)(green << 5) | red;  //jeweils an die richtige Stelle schieben und verodern
}

Bei der Umrechnug binär hexadezimal hat sich ein Fehler eingeschlichen. richtig ist:

Magenta: 1111-1000-0001-1111 -> 0xF81F
Gelb:    0000-0111-1111-1111 -> 0x07FF
Cyan:    1111-1111-1110-0000 -> 0xFFE0

Grüße Uwe

Moin Uwe,

Danke für Deine Lebensrettung. :wink:

Die RGB Methode habe ich gleich mal in meinen Code gerettet. Klappt super!

Gruß und Dank
Kai