[RESOLU]Impossible d'utiliser les librairies UTFT et UTOUCH

Bonjour à tous,

J'ai récemment acheté un écran Kuman 3.5".
Voici le lien : https://www.amazon.fr/Kuman-Tactile-Arduino-Module-Fonction/dp/B075CXXL1M

La librairie MCUfriend fonctionne parfaitement.
Cependant, j'aurais aimé réaliser ce projet.
Il utilise les librairies UTFT et UTOUCH, que je n'arrive pas à utiliser.
Impossible de lancer correctement un exemple.
Mon écran m'affiche uniquement une page blanche. Même en ayant modifié les paramètres lors de la déclaration de l'écran (son nom -> SSD1963 et ses broches).

Pour mon projet, j'ai besoin d'afficher une courbe de données en temps réel comme un oscilloscope. Les données viendront d'une broche analog, fournies par un capteur linéaire.
Cette courbe serait accessible dans un sous-menu de mon programme.

Si vous avez des idées sur comment réaliser une courbe sans utiliser les librairies UTFT et UTOUCH, ou que vous savez où est mon problème au niveau des librairies, je suis preneur :slight_smile:

Merci d'avance !

Pourquoi SSD1963 ?

Spécifications techniques:

-Type d'affichage: Module LCD TFT 3,5 pouces

-IC: pilote ILI9481 ou ILI9488 (par défaut dans ramdon)

SSD1963 est donné par un programme qui lit les caractéristiques de l’écran.
Les deux paramètres ILI, je les ais déjà testés et cela ne fonctionne pas plus …

SSD1963, en général, est implanté sur des écrans plus grands.
Ceci confirme :
https://www.locoduino.org/spip.php?article255
Où l'auteur utilise ceci :
https://mega.nz/folder/zEtCzDCD#Eb7qoJlbfn93s8ar9SvyBA

La librairie MCUfriend fonctionne parfaitement.
Mon écran m’affiche uniquement une page blanche

J’ai du mal à suivre. Quelle est cette librairie qui fonctionne? A quoi elle sert?
Le programme suivant fait un dump des registre et cela permet souvent à un œil exercé de savoir quel est le driver.

// adapted from LCD_ID_Reader from http://misc.ws/lcd_information
// controllers either read as 16-bit or as a sequence of 8-bit values

//-- Arduino UNO or Mega 2560 Plugged as shield
#define LCD_RST A4
#define LCD_CS A3
#define LCD_RS A2
#define LCD_WR A1
#define LCD_RD A0

#define LCD_D0 8
#define LCD_D1 9
#define LCD_D2 2
#define LCD_D3 3
#define LCD_D4 4
#define LCD_D5 5
#define LCD_D6 6
#define LCD_D7 7

void setup()
{
    Serial.begin(115200);
    while (!Serial) ;
    Serial.println("Read Command on UNO shield");
    lcdInit();
    readCmd(7); 
    Serial.println("\nRead Registers on UNO shield");
    lcdInit();
    for (uint16_t i = 0; i < 256; i++) readReg(i, 7); 
    Serial.print("\nPas vu d'ID:");
    Serial.print("\n                                                        ILI9320");
}

void loop() 
{
}

void printhex(uint8_t val)
{
    if (val < 0x10) Serial.print("0");
    Serial.print(val, HEX);
}

void readReg(uint16_t reg, uint8_t n)
{
    uint8_t val8;
    lcdReset();
    lcdSetWriteDir();
    lcdWriteCommand(reg);
    Serial.print("reg(0x");
    printhex(reg >> 8);
    printhex(reg);
    Serial.print(")");
    lcdSetReadDir();
    while (n--) {
        val8 = lcdReadData8();
        Serial.print(" ");
        printhex(val8);
    }
    lcdSetWriteDir();
    Serial.print("\t");

    switch (reg)
    {
       case 0x00: Serial.print("ST7781: 77 83 77 83 77 83 77");
           Serial.print("\n                                        HX8347: 47 ou 75?");
           Serial.print("\n                                        HX8367: 67");
           Serial.print("\n                                        ILI9325: 9325");
           Serial.print("\n                                        ILI9328: 9325");
           Serial.print("\n                                        ILI9331: 9331");
           Serial.print("\n                                        ILI9335: 9335");
           Serial.print("\n                                        R61505: 1505");
           Serial.print("\n                                        R61580: 1580");
           Serial.print("\n                                        RM68090: 6809");
           Serial.print("\n                                        S6D0129: 0129");
           Serial.print("\n                                        ST7781: 7783");
           break;
	   case 0x04:   
    Serial.print("\n                                                        ST7787");
    Serial.print("\n                                                        ST7789");
           break;
       case 0x32: Serial.print("HX8312: 0C"); break;
       case 0x67: Serial.print("HX8346: 46"); break;
       case 0xD3: Serial.print("ILI9341: 00 00 93 41 41 41 41");
           Serial.print("\n                                        ILI9340: 40");
           Serial.print("\n                                        ILI9342: 9342");
           break;
    }
    Serial.println();
}

void readCmd(uint8_t n)
{
    uint8_t val8;
    lcdReset();
    lcdSetReadDir();
    Serial.print("Cmd        ");
    while (n--) {
        Serial.print(" ");
        printhex(lcdReadReg8());
    }
    lcdSetWriteDir();
    Serial.print("\n                                        SPFD5408: 5408");
    Serial.print("\n                                        OTM3225");
    Serial.println();
}

void lcdInit()
{
    pinMode(LCD_CS, OUTPUT);
    digitalWrite(LCD_CS, HIGH);
    pinMode(LCD_RS, OUTPUT);
    digitalWrite(LCD_RS, HIGH);
    pinMode(LCD_WR, OUTPUT);
    digitalWrite(LCD_WR, HIGH);
    pinMode(LCD_RD, OUTPUT);
    digitalWrite(LCD_RD, HIGH);
    pinMode(LCD_RST, OUTPUT);
    digitalWrite(LCD_RST, HIGH);
}

void lcdReset()
{
    digitalWrite(LCD_RST, LOW);
    delay(2);
    digitalWrite(LCD_RST, HIGH);
    delay(10);             //allow controller to re-start
}

void lcdWrite8(uint16_t data)
{
    digitalWrite(LCD_D0, data & 1);
    digitalWrite(LCD_D1, (data & 2) >> 1);
    digitalWrite(LCD_D2, (data & 4) >> 2);
    digitalWrite(LCD_D3, (data & 8) >> 3);
    digitalWrite(LCD_D4, (data & 16) >> 4);
    digitalWrite(LCD_D5, (data & 32) >> 5);
    digitalWrite(LCD_D6, (data & 64) >> 6);
    digitalWrite(LCD_D7, (data & 128) >> 7);
}

uint16_t lcdRead8()
{
    uint16_t result = digitalRead(LCD_D7);
    result <<= 1;
    result |= digitalRead(LCD_D6);
    result <<= 1;
    result |= digitalRead(LCD_D5);
    result <<= 1;
    result |= digitalRead(LCD_D4);
    result <<= 1;
    result |= digitalRead(LCD_D3);
    result <<= 1;
    result |= digitalRead(LCD_D2);
    result <<= 1;
    result |= digitalRead(LCD_D1);
    result <<= 1;
    result |= digitalRead(LCD_D0);

    return result;
}

void lcdSetWriteDir()
{
    pinMode(LCD_D0, OUTPUT);
    pinMode(LCD_D1, OUTPUT);
    pinMode(LCD_D2, OUTPUT);
    pinMode(LCD_D3, OUTPUT);
    pinMode(LCD_D4, OUTPUT);
    pinMode(LCD_D5, OUTPUT);
    pinMode(LCD_D6, OUTPUT);
    pinMode(LCD_D7, OUTPUT);
}


void lcdSetReadDir()
{
    pinMode(LCD_D0, INPUT);
    pinMode(LCD_D1, INPUT);
    pinMode(LCD_D2, INPUT);
    pinMode(LCD_D3, INPUT);
    pinMode(LCD_D4, INPUT);
    pinMode(LCD_D5, INPUT);
    pinMode(LCD_D6, INPUT);
    pinMode(LCD_D7, INPUT);
}

void lcdWriteData(uint16_t data)
{
    lcdSetWriteDir();
    digitalWrite(LCD_CS, LOW);
    digitalWrite(LCD_RS, HIGH);
    digitalWrite(LCD_RD, HIGH);
    digitalWrite(LCD_WR, HIGH);

    lcdWrite8(data >> 8);

    digitalWrite(LCD_WR, LOW);
    delayMicroseconds(10);
    digitalWrite(LCD_WR, HIGH);

    lcdWrite8(data);

    digitalWrite(LCD_WR, LOW);
    delayMicroseconds(10);
    digitalWrite(LCD_WR, HIGH);

    digitalWrite(LCD_CS, HIGH);
}

void lcdWriteCommand(uint16_t command)
{
    lcdSetWriteDir();
    digitalWrite(LCD_CS, LOW);
    digitalWrite(LCD_RS, LOW);
    digitalWrite(LCD_RD, HIGH);
    digitalWrite(LCD_WR, HIGH);
    lcdWrite8(command >> 8);
    digitalWrite(LCD_WR, LOW);
    delayMicroseconds(10);
    digitalWrite(LCD_WR, HIGH);
    lcdWrite8(command);
    digitalWrite(LCD_WR, LOW);
    delayMicroseconds(10);
    digitalWrite(LCD_WR, HIGH);
    digitalWrite(LCD_CS, HIGH);
}

uint8_t lcdReadData8()
{
    uint8_t result;
    lcdSetReadDir();
    digitalWrite(LCD_CS, LOW);
    digitalWrite(LCD_RS, HIGH);
    digitalWrite(LCD_RD, HIGH);
    digitalWrite(LCD_WR, HIGH);
    digitalWrite(LCD_RD, LOW);
    delayMicroseconds(10);
    result = lcdRead8();
    digitalWrite(LCD_RD, HIGH);
    delayMicroseconds(10);
    return result;
}

uint8_t lcdReadReg8()
{
    uint8_t result;
    lcdSetReadDir();
    digitalWrite(LCD_CS, LOW);
    digitalWrite(LCD_RS, LOW);
    digitalWrite(LCD_RD, HIGH);
    digitalWrite(LCD_WR, HIGH);
    digitalWrite(LCD_RD, LOW);
    delayMicroseconds(10);
    result = lcdRead8();
    digitalWrite(LCD_RD, HIGH);
    delayMicroseconds(10);
    return result;
}

Qu’affiche ce programme (console réglée à 115200 bauds)?
Tu parles du SSD1963, Henri parle des ILI9481 et ILI9488, l’article parle du ILI9486… Dans un premier temps,il vaut mieux savoir lequel est-ce?

Le programme que vous m'avez envoyé affiche ILI 9320 à la fin.
La librairie qui fonctionne est MCUFriend_kbv. Pour le moment j'ai réussi a dessiner une courbe avec des valeurs d'entrée qui varient mais j'ai un autre soucis qui est hors sujet.

Le fait est que je voulais utiliser les librairies cités plus haut, qui ne fonctionnent pas dans mon cas, pour afficher une courbe.
Je pense que je vais fermer le topic puisque je n'ai plus besoin de ces 2 librairies.
Merci pour votre aide

Le programme que vous m'avez envoyé affiche ILI 9320 à la fin.

Cela veut dire que tu n'as pas encore un oeil exercé. Il est impossible que le pilote soit un ILI9320 car il n'est pas capable de gérer un 480 x 320.
Qu'affiche ce programme (console réglée à 115200 bauds)? Un jour j'écrirais peut être un programme plus explicite, mais pour l'instant celui-ci existe, et on fait avec.
Que l'on utilise une bibliothèque ou une autre cela revient presque au même. Pourquoi essayer de changer de bibliothèque si il y en a une qui fonctionne? Qu'est-ce que les autres te permettent?

J'avais déjà un peu programmé avec les autres bibliothèques, elle m'étaient donc plus familières. Et elles ont surtout l'air d'avoir plus de fonctionnalités.

Voici ce que m'affiche la console avec le programme que vous m'avez envoyé :

Read Registers on UNO shield
reg(0x0000) 00 00 00 00 00 00 00 ST7781: 77 83 77 83 77 83 77
                                        HX8347: 47 ou 75?
                                        HX8367: 67
                                        ILI9325: 9325
                                        ILI9328: 9325
                                        ILI9331: 9331
                                        ILI9335: 9335
                                        R61505: 1505
                                        R61580: 1580
                                        RM68090: 6809
                                        S6D0129: 0129
                                        ST7781: 7783
reg(0x0001) 00 00 00 00 00 00 00 
reg(0x0002) 00 00 00 00 00 00 00 
reg(0x0003) 00 00 00 00 00 00 00 
reg(0x0004) 00 5B C0 D0 00 00 00 
                                                        ST7787
                                                        ST7789
reg(0x0005) 00 00 00 00 00 00 00 
reg(0x0006) 00 00 00 00 00 00 00 
reg(0x0007) 00 00 00 00 00 00 00 
reg(0x0008) 00 00 00 00 00 00 00 
reg(0x0009) 00 00 61 00 00 00 00 
reg(0x000A) 00 08 00 00 00 00 00 
reg(0x000B) 00 00 00 00 00 00 00 
reg(0x000C) 00 66 00 00 00 00 00 
reg(0x000D) 00 00 00 00 00 00 00 
reg(0x000E) 00 00 00 00 00 00 00 
reg(0x002D) 00 00 00 00 00 00 00 
reg(0x002E) 00 A8 A8 A8 54 54 54 
reg(0x002F) 00 00 00 00 00 00 00 
reg(0x0030) 00 00 00 00 00 00 00 
reg(0x0031) 00 00 00 00 00 00 00 
reg(0x0032) 00 00 00 00 00 00 00 HX8312: 0C
reg(0x0033) 00 00 00 00 00 00 00 
reg(0x0034) 00 00 00 00 00 00 00 
reg(0x0035) 00 00 00 00 00 00 00 
reg(0x0036) 00 00 00 00 00 00 00 
reg(0x0037) 00 00 00 00 00 00 00 
reg(0x0059) 00 00 00 00 00 00 00 
reg(0x005A) 00 00 00 00 00 00 00 
reg(0x005B) 00 00 00 00 00 00 00 
reg(0x005C) 00 00 00 00 00 00 00 
reg(0x005D) 00 00 00 00 00 00 00 
reg(0x005E) 00 00 00 00 00 00 00 
reg(0x005F) 00 00 00 00 00 00 00 
reg(0x0060) 00 00 00 00 00 00 00 
reg(0x0061) 00 00 00 00 00 00 00 
reg(0x0062) 00 00 00 00 00 00 00 
reg(0x0063) 00 00 00 00 00 00 00 
reg(0x0064) 00 00 00 00 00 00 00 
reg(0x0065) 00 00 00 00 00 00 00 
reg(0x0066) 00 00 00 00 00 00 00 
reg(0x0067) 00 00 00 00 00 00 00 HX8346: 46
reg(0x0068) 00 00 00 00 00 00 00 
reg(0x0069) 00 00 00 00 00 00 00 
reg(0x006A) 00 00 00 00 00 00 00 
reg(0x006B) 00 00 00 00 00 00 00 
reg(0x00A4) 00 00 00 00 00 00 00 
reg(0x00A5) 00 00 00 00 00 00 00 
reg(0x00A6) 00 00 00 00 00 00 00 
reg(0x00A7) 00 00 00 00 00 00 00 
reg(0x00A8) 00 00 00 00 00 FF FF 
reg(0x00A9) 00 00 00 00 00 00 00 
reg(0x00AA) 00 00 00 00 00 00 00 
reg(0x00AB) 00 00 00 00 00 00 00 
reg(0x00AC) 00 00 00 00 00 00 00 
reg(0x00AD) 00 00 00 00 00 00 00 
reg(0x00AE) 00 00 00 00 00 00 00 
reg(0x00AF) 00 00 00 00 00 00 00 
reg(0x00B0) 00 00 00 00 00 00 00 
reg(0x00B1) 00 B0 11 11 11 11 11 
reg(0x00B2) 00 00 11 11 11 11 11 
reg(0x00B3) 00 00 11 11 11 11 11 
reg(0x00B4) 00 00 00 00 00 00 00 
reg(0x00B5) 00 02 02 0A 04 04 04 
reg(0x00B6) 00 02 02 3B 3B 3B 3B 
reg(0x00B7) 00 06 06 06 06 06 06 
reg(0x00B8) 00 00 00 00 00 00 00 
reg(0x00B9) 00 00 00 00 00 00 00 
reg(0x00BA) 00 00 00 00 00 00 00 
reg(0x00BB) 00 00 00 00 00 00 00 
reg(0x00BC) 00 00 00 00 00 00 00 
reg(0x00BD) 00 00 00 00 00 00 00 
reg(0x00BE) 00 00 00 00 00 00 00 
reg(0x00BF) 00 00 00 00 00 00 00 
reg(0x00C0) 00 0E 0E 0E 0E 0E 0E 
reg(0x00C1) 00 44 00 00 00 00 00 
reg(0x00C2) 00 33 33 33 33 33 33 
reg(0x00C3) 00 33 33 33 33 33 33 
reg(0x00C4) 00 33 33 33 33 33 33 
reg(0x00C5) 00 01 60 00 49 49 49 
reg(0x00C6) 00 E0 01 01 01 01 01 
reg(0x00C7) 00 FF FF FF FF FF FF 
reg(0x00C8) 00 00 00 00 00 00 00 
reg(0x00C9) 00 BB BB BB BB BB BB 
reg(0x00CA) 00 0B 0B 0B 0B 0B 0B 
reg(0x00CB) 00 A8 A8 A8 A8 A8 A8 
reg(0x00CC) 00 04 04 04 04 04 04 
reg(0x00CD) 00 43 43 43 43 43 43 
reg(0x00CE) 00 02 02 02 02 02 02 
reg(0x00CF) 00 18 18 18 18 18 18 
reg(0x00D0) 00 00 00 00 00 00 00 
reg(0x00D1) 00 00 00 00 00 00 00 
reg(0x00D2) 00 00 11 11 00 00 00 
reg(0x00D3) 00 00 94 86 86 86 86 ILI9341: 00 00 93 41 41 41 41
                                        ILI9340: 40
                                        ILI9342: 9342
reg(0x00D4) 00 00 00 00 00 00 00 
reg(0x00D5) 00 00 00 00 00 00 00 
reg(0x00D6) 00 00 00 00 00 00 00 
reg(0x00D7) 00 00 00 00 00 00 00 
reg(0x00D8) 00 00 00 00 00 00 00 
reg(0x00EE) 00 2A 2A 2A 2A 2A 2A 
reg(0x00EF) 00 80 00 10 60 40 10 
reg(0x00F0) 00 02 07 07 07 07 07 
reg(0x00F1) 00 36 04 00 3C 0F 0F 
reg(0x00F2) 00 18 A3 12 02 B2 12 
reg(0x00F3) 00 22 40 00 00 00 00 
reg(0x00F4) 00 00 00 08 91 04 04 
reg(0x00F5) 00 00 00 00 00 00 00 
reg(0x00F6) 00 5B C0 D0 D0 D0 D0 
reg(0x00F7) 00 A9 91 2D 0A 4C 00 
reg(0x00F8) 00 21 07 02 00 00 00 
reg(0x00F9) 00 00 00 00 00 00 00 
reg(0x00FA) 00 00 00 00 00 00 00 
reg(0x00FB) 00 00 00 00 00 00 00 
reg(0x00FC) 00 00 09 80 07 07 07 
reg(0x00FD) 00 00 00 01 3F 00 00 
reg(0x00FE) 00 00 00 01 E0 00 00 
reg(0x00FF) 00 00 00 00 00 00 00 

Pas vu d'ID:
                                                        ILI9320

J'ai du effacer quelques lignes pour envoyer la réponse.

Simple petite question :
Il n'est pas possible de Lire et Ecrire en même temps sur l'écran ?

Je m'explique :
Sur mon menu GRAPH, je suis continuellement en train d'afficher des pixels pour dessiner une courbe. Et il m'est impossible d'appuyer sur mon bouton "BACK" pour revenir au sélecteur de menus. Le bouton "BACK" est situé sur l'écran tactile bien sur.

Vous avez des idées de solutions ?
J'exclue évidemment toute solution nécessitant un bouton physique.

Voici ce que m'affiche la console avec le programme que vous m'avez envoyé :

C'est bien la signature d'un ILI9486

Sur mon menu GRAPH, je suis continuellement en train d'afficher des pixels pour dessiner une courbe. Et il m'est impossible d'appuyer sur mon bouton "BACK" pour revenir au sélecteur de menus. Le bouton "BACK" est situé sur l'écran tactile bien sur.

Dans l'état actuelle des bibliothèques, il faut dessiner quelques pixels, lire le touchpad, dessiner quelques pixels, lire le touchpad... En gros que le dessin ne soit pas bloquant.

Dans un avenir fort lointain, je pense écrire une bibliothèque qui permetra la gestion des évènements dans une fonction d'interruption. Mais c'est loin d'être fait

Bon le problème du bouton semble réglé. Je ne sais par quelle sorcellerie, mais j'ai fait un fonction pour l'affichage des pixels, mis la lecture du bouton avant l'appel de la fonction et ça à l'air de bien fonctionner pour le moment.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.