Salut à tous.
Je n'ai aucun problème de fonctionnement de mon TFT 1.8" de chez Joy-It.
Je gère mon TFT 1.8" avec mon NodeMCU ESP32. Le driver est le ST7735.
J'ai réécrit la totalité de la bibliothèque TFT et a priori, cela fonctionne relativement bien.
J'ai un problème de compréhension avec les couleurs.
J'ai fait le choix de travailler avec le mode 18 bits.
Dans le paramétrage de base, j'envoie deux paramètres qui sont :
a) commande "COLMOD" (0x3A) avec la valeur 0x06.
Cette valeur correspond au 18 bit-pixel.
b) commande "MADCTL (0x36) avec la valeur 0xC8.
Le "C" me permet de mettre l'affichage dans le bon sens.
Tandis que le "8" gère le mode RGB.
C'est sur ce point que je ne comprends pas bien le fonctionnement du TFT.
Le bit D3 correspondant prend deux valeurs qui sont :
--> ‘0’ =RGB color filter panel, (sens normal)
--> ‘1’ =BGR color filter panel. (sens inversé)
La commande "MADCTL" met mon écran dans le mode "BGR". J'aurai préféré avoir "RGB".
Si j'ai bien compris cette commande, elle inverse le sens de lecture des couleurs, soit de droite à gauche ou de gauche à droite.
Dans mes programmes, j'ai défini la couleur suivant le type ci-après :
Autrement dit, j'utilise les couleurs comme si j'étais en HTML, soit sur 24 bits.
Code arduino : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 typedef struct { unsigned char red; unsigned char green; unsigned char blue; } T_COLOR;
J'utilise les couleurs suivantes :
J'obtiens bien la couleur correspondante avec le mode "BGR".
Code arduino : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 const T_COLOR _black = { 0, 0, 0}; const T_COLOR _blue = { 0, 0,255}; const T_COLOR _green = { 0,255, 0}; const T_COLOR _cyan = { 0,255,255}; const T_COLOR _red = {255, 0, 0}; const T_COLOR _magenta = {255, 0,255}; const T_COLOR _yellow = {255,255, 0}; const T_COLOR _white = {255,255,255}; const T_COLOR _orange = {255,165, 0};
Si je mets "RGB", les couleurs sont inversés.
C'est caractérisé par le rouge qui devient le bleu et vice-versa.
Si j'ai bien compris, la couleur s'écrit sur 18 bits de la façon suivante :
Avec "R" pour red, "G" pour Green et "B" pour blue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 0| 0| 0| 0| 0| 0|R5|R4|R3|R2|R1|R0|G5|G4|G3|G2|G1|G0|B5|B4|B3|B2|B1|B0| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
A priori, j'envoie :
Je crois que le sens de lecture se fait de gauche à droite. Pourquoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |R7|R6|R5|R4|R3|R2|R1|R0|G7|G6|G5|G4|G3|G2|G1|G0|B7|B6|B5|B4|B3|B2|B1|B0| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Le SPISettings possède la valeur "MSBFIRST", donc les poids forts en premier.
Code arduino : Sélectionner tout - Visualiser dans une fenêtre à part const SPISettings settings{8000000, MSBFIRST, SPI_MODE0};
Mes question sont :
--> pourquoi dois-je utiliser le "BGR" pour avoir le rouge ?
Ce n'est pas logique car je devrais être en "RGB" pour obtenir le rouge, non ?
--> Ou se trouve l'inversion, s'il s'agit de cela ?
Dans le paramétrage, à l'initialisation du TFT 1.8" ?
Ou dans le transfert de la couleur vers le TFT 1.8" ?
--> je préfère conserver mes couleurs dans la représentation RGB sur 24 bits.
Cela me parait plus naturel à l'usage.
Dois-je donc créer une fonctionner qui va inverser le sens de lecture de la couleur ?
J'envoie la couleur comme si je lisais de gauche à droite.
Ma fonction devrait s'employer à lire de droite à gauche.
Pour des questions de rapidité, je préfère ne pas avoir cette soltion.
Comment faire ?
Dans la bibliothèque Adafruit, c'est le mode "BGR" qui est utilisé.
Par contre, la couleur est codifiée sur 16 bits, soit sur deux octets.
Cordialement.
Artemus24.
@+
Partager