Afficheur LCD 3.5"

Bonjour tout le Monde!
Je commence à me dépatouiller avec le code Arduino avec l'excellent tuto d'Eskimon…
Là je cale sur un problème d'afficheur LCD, j'ai un montage basé sur une Arduino Méga 2560 et un afficheur VMA412, l'ensemble fonctionne parfaitement.
Caractéristiques VMA412

  • résolution: 240 RGB (H) x 320 (V)
  • driver: ILI9341 V0.7
  • profondeur de couleur: 65K couleurs
  • interface:
  • mode d'affichage:
  • température de service: de -40 °C à +85 °C



Je me suis entrepris de remplacer le VMA412 qui devient difficile à se procurer par un afficheur 3.5" écran TFT LCD Module 480x320 for Arduino UNO & MEGA un peut plus grand et moins cher.
A première vue les deux afficheurs semblent identiques si ce n'est la taille quelques millimètres plus large la connectique est strictement identique, bref presque tout pareil…
J'ai chargé le code sur la Méga 2560 et mon afficheur reste désespérément blanc.
Je suppose que le problème viendrait des bibliothèques qui ne seraient pas adaptées au nouvel afficheur???
En cherchant sur le web j'ai trouvé les supposées caractéristiques de l'afficheur:
Paramètres du produit
Nom Paramètre
Couleur d'affichage Couleur RVB 65K
SKU MAR3501 (ont un écran tactile)
Taille de l'écran 3,5 (pouces)
Type TFT
Pilote IC ILI9486
Résolution 480 * 320 (pixel)
Interface du module Interface parallèle 8 bits
Zone active 73,44 * 48,96 (millimètre)
Taille du PCB du module 85,49 * 55,63 (millimètre)
Température de fonctionnement -20 ℃ ~ 70 ℃
Température de stockage -40 ℃ ~ 70 ℃
Tension de fonctionnement 5 V / 3,3 V

Numéro Étiquette de broche Description des broches
1 LCD_RST Signal de réinitialisation du bus LCD, réinitialisation de bas niveau
2 LCD_CS Signal de sélection de puce de bus LCD, activation de bas niveau
3 LCD_RS Commande de bus LCD / signal de sélection de données, bas niveau: commande, haut niveau: données
4 LCD_WR Signal d'écriture du bus LCD
5 LCD_RD Signal de lecture du bus LCD
6 GND Masse d'alimentation
7 5V Entrée d'alimentation 5V
8 3V3 Entrée d'alimentation 3,3 V, cette broche peut être déconnectée
9 LCD_D0 LCD 8 bits de données Bit0
10 LCD_D1 LCD 8 bits de données Bit1
11 LCD_D2 LCD 8 bits de données Bit2
12 LCD_D3 LCD 8 bits de données Bit3
13 LCD_D4 LCD 8 bits de données Bit4
14 LCD_D5 LCD 8 bits de données Bit5
15 LCD_D6 LCD 8 bits de données Bit6
16 LCD_D7 LCD 8 bits de données Bit7
17 SD_SS Signal de sélection de puce de bus SPI de la carte SD, activation de bas niveau
18 SD_DI Signal MOSI du bus SPI de la carte SD
19 SD_DO Signal MISO du bus SPI de la carte SD
20 SD_SCK Signal d'horloge du bus SPI de la carte SD


Sur github.com il y a bien des bibliothèques mais la quelle choisir??
Si vous pouviez me donner qq conseils pour faire fonctionner l'afficheur se serait vraiment sympa.
Voici le code que j"utilise: En PJ
Cordialement.
@++

Heure_date_jour_temperature_humidite.ino (6.52 KB)

A première vue les deux afficheurs semblent identiques si ce n'est la taille quelques millimètres plus large la connectique est strictement identique, bref presque tout pareil…
J'ai chargé le code sur la Méga 2560 et mon afficheur reste désespérément blanc.
Je suppose que le problème viendrait des bibliothèques qui ne seraient pas adaptées au nouvel afficheur???

C'est exactement comme un français (ne parlant pas l'allemand) et un allemand (ne parlant pas le français). Ils se ressemblent, mais si on donne un ordre "Va chercher une bouteille de vin à la cave", l'un exécutera l'ordre, l'autre pas.
J'ai répertorié une centaine de drivers différents. Il faut donc soit une bibliothèque capable de travailler avec tous les drivers, soit pleins de bibliothèques capables de travailler avec quelques (voir un) driver. Si on fait une bibliothèque capable de dialoguer avec tous les drivers, elle sera trop volumineuse. Les bibliothèques ont donc un nombre limité de drivers avec lesquels elle peuvent travailler.
Si quelqu'un a le même driver d'écran (et qu'il est aussi en parallèle 8 bits), il pourra dire quelle bibliothèque fonctionne.
La plupart des bibliothèques fonctionnent avec la même base (adafruit). Prendre l'une ou l'autre est donc assez équivalent. Il reste à en trouver une qui fonctionne. Tu as de la chance d'avoir le nom du driver: ILI9486 Il faut donc chercher une bibliothèque ayant ce nom quelque part dans le code ou dans la doc.

vileroi:
Tu as de la chance d'avoir le nom du driver: ILI9486 Il faut donc chercher une bibliothèque ayant ce nom quelque part dans le code ou dans la doc.

Donc si je charge les démos divers du ILI9486 dans la Mega 2506 l'écran fonctionne ce qui veut que les démos contienne bien le bon driver...
Maintenant reste à savoir quoi récupérer pour faire fontioner mon code???
@++

Donc si je charge les démos divers du ILI9486...

les drivers n'ont pas de démos, ou si ils en ont ces démos ne sont pas forcément adaptées au câblage. Le ILI9486 doit pouvoir être branché en SPI (série), ou en parallèle 8, 9 ou 16 bits...
C'est les démos des bibliothèques qu'il faut utilisées. Si tu trouves le mot ILI9486, il y a de grandes chances que cela puisse fonctionner (si la bibliothèque accepte le parallèle 8 bits). Si il n'y est pas, il y a de grandes chances que cela ne fonctionne pas. ce mot peut de trouver dans la doc, mais souvent il faut voir dans tous les .cpp
Si une démo fonctionne, la bibliothèque devrait être utilisable.

vileroi:
C'est les démos des bibliothèques qu'il faut utilisées. Si tu trouves le mot ILI9486, il y a de grandes chances que cela puisse fonctionner (si la bibliothèque accepte le parallèle 8 bits). ce mot peut de trouver dans la doc, mais souvent il faut voir dans tous les .cpp
Si une démo fonctionne, la bibliothèque devrait être utilisable.

Je m'excuse je m'explique mal Voici un extrait d'une démo qui fonctionne

#include <LCDWIKI_GUI.h> //Core graphics library
#include <LCDWIKI_KBV.h> //Hardware-specific library
LCDWIKI_KBV mylcd(ILI9486,A3,A2,A1,A0,A4); //model,cs,cd,wr,rd,reset
void setup() 
{
    Serial.begin(9600);
    mylcd.Init_LCD(); //initialize lcd
    Serial.println(mylcd.Read_ID(), HEX);
    mylcd.Fill_Screen(0xFFFF); //display white
}
//
//

Problème c'est que je ne sais pas comment le "brancher" sur ce code

void setup(void) {
  dht.begin();
  Wire.begin();
  tft.begin(0x7783);
  tft.setRotation(1);
  tft.fillScreen(BLACK);
  // regler l'heure initiale ici:
  //DS3231 secondes, minutes, heure, jour, date, mois, annee
  //enlever les // en ligne 59 pour envoyer la mise a jour date et heure et les remetre apres le televersement
//setDS3231time(00,8,18,1,3,12,17);
}

Si je m'exprime correctement "tft" doit être une variable qui permet d'afficher la date, et apparemment elle n'est pas reconnue avec "LCDWIKI_KBV mylcd"
Si tu a une idée ???
@++

Pour les deux codes, il s'agit de deux bibliothèques différentes. Les déclarations des objets écrans n'est pas la même, les fonctions ne sont pas le mêmes...
C'est un peu comme si, sachant que les abeilles ont un langage à eux, on essayait de traduire du français en langage abeille.

Dans la première bibliothèque, la variable de l'écran s'apelle mylcd var elles est définie par la ligne:
LCDWIKI_KBV mylcd(ILI9486,A3,A2,A1,A0,A4); //model,cs,cd,wr,rd,reset
Mais on peur l'appeler tft si l'on veut en écrivant:
LCDWIKI_KBV tft(ILI9486,A3,A2,A1,A0,A4); //model,cs,cd,wr,rd,reset
Mais cela ne fera pas tout car les commandes ne sont pas les mêmes. Tu a fait du foot, tu passes au rudby, cela ressemble (il y a un ballon, des buts, deux équipes...), mais on ne fait pas les mêmes passes... pourtant dans les deux cas on marque des points.
On ne peut pas forcément traduire.

Pour adapter, il faut connaitre les règles des deux bibliothèques. Je ne connais pas du tout la première, à peine la seconde. Je peux comprendre le langage, mais je ne peux pas deviner comment s'appelle la fonction nécessaire.

Dans l'extrait du deuxième code, il y a un exemple plus important. Il faut en général, ne faire marcher que l'écran, et une fois qu'on sait le faire marcher rajouter l'horloge, les boutons...

Je vien de passer le weekend a me torturer l'esprit (du moins ce qu'il en reste) avec cette histoire de bibliothèque...
Et toujours pas de solution...
C'est une histoire de OUF! j'ai deux afficheurs LCD de la marque Velleman ref VMA412 l'un communique en parallèle et l'autre en série, cherchez l'erreur ??
L'un fonctionne avec "LCDWIKI_KBV.h" et "LCDWIKI_GUI.h"
L'autre celui que j'utilise avec mon code fonctionne avec "Adafruit_GFX.h" "Adafruit_TFTLCD.h" plus "MCUFRIEND_kbv.h".
J'y perd mon latin, je tourne en rond....
Si vous avez un peut de temps pour m'aider a adapter mon code avec "LCDWIKI_KBV.h" et "LCDWIKI_GUI.h" les brochages des LCD sont exactement les mêmes.
J'ai regardé les bibliothèques sur github.com, pour moi c'est du chinois ou presque!!!
D'avance Merci.
@++

C'est une histoire de OUF! j'ai deux afficheurs LCD de la marque Velleman ref VMA412 l'un communique en parallèle et l'autre en série,
Les brochages des LCD sont exactement les mêmes.

Le brochage qui est sur la photo ne permet pas le mode série! Si ils ont le même brochage dessiné, il sont en parallèle 8 bits tous les deux.
J'ai aussi deux VMA412, qui ont chacun leur bibliothèque, mais ils ont des drivers différents. Mais il sont forcément parallèle.

Les afficheurs série ont une broche SDA te n'ont pas D7..D0

Bonsoir
STP est ce que tu pourrais me faire passer les bibliothèques les drivers que tu utilise avec tes VMA412 pour que je puisse faire des essais?
D'avance Merci
@++

Les bibliothèques que j'utilise sont décrites sur:
http://dansetrad.fr/Orgue_de_barbarie/Pecheux_Graph/index.html
J'ai deux VMA, un qui a un ILI9341 et l'autre un ST7781

Merci je te tiens informé de mes tests
Bonne nuit
@++

Bonjour!
Je viens de visiter ton site qui est très intéressant, J'ai également récupéré dans la rubrique téléchargement les différents dossiers.
J'ai fait le teste des pilotes le résultat est le suivant pour les deux VMA412:
12:02:49.037 -> QuelPilote, Version 1.2
12:02:49.037 -> Vous avez un ILI9341

12:15:51.671 -> QuelPilote, Version 1.2
12:15:51.671 -> Vous avez un ST7781

Celui qui fonctionne avec mon code Date Heure... actuel est le ST7781

Question:
Quelles modifications apporté à mon code Date Heure pour le faire fonctionner avec le ILI9341?

L'autre LCD est inconnu par ton code de test

Cordialement.
@++

J'ai fait le teste des pilotes le résultat est le suivant pour les deux VMA412:
12:02:49.037 -> QuelPilote, Version 1.2
12:02:49.037 -> Vous avez un ILI9341

12:15:51.671 -> QuelPilote, Version 1.2
12:15:51.671 -> Vous avez un ST7781

En gros, je ne suis pas le seul à avoir deux écrans qui sont totalement identiques, mais qui ne se programment pas avec le même code. Bienvenu.
Au passage, j'ai aussi un écran équipé d'un ILI9486, mais je n'ai pas le temps de le tester. J'ai pleins de projets en cours...

Quelles modifications apporté à mon code Date Heure pour le faire fonctionner avec le ILI9341?

Il faut d'abord que tu choisisses la bibliothèque que tu vas utiliser. J'ai vu passer le code pour le 3''5 mais pas pour le 2"5.
Si c'est une des mienne, Ca passe, sinon, il faut voir si le ILI9341 est reconnu ou pas.
Après il faut adapter les noms des fonctions. En principe les fonctions sont semblables. Avec tous les écrans, on dessine des points, des droites, on écrit des textes... C'est en somme une traduction. J'attends le choix.

L'autre LCD est inconnu par ton code de test

Normal le test est fait pour voir si l'afficheur peut utiliser mes bibliothèques. Ce test ne reconnait que les ILI9341 et les ST7741. Quand je m'occuperai de mon 3"5, ton écran sera reconnu.

Bonjour,
Donc j'aimerais adapter le code joint à mon premier message pour l'utiliser avec le LCD "ILI9486".
Le code qui est joint a été écrit pour un LCD "ILI9341" et utilise :
#include <Adafruit_GFX.h> // Bibliotheque graphique de base
#include <Adafruit_TFTLCD.h> // Bibliotheque specifique au materiel
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;

Voici la liste des principales variables utilisées par "tft"
tft.setTextSize();//TAILLE POLICE
tft.setTextColor();//COULEUR (POLICE, FOND)
tft.setCursor();//Position Curseur (Col, Lin)
tft.print();
tft.println();
tft.setRotation();
tft.fillScreen();

Le LCD "ILI9486" utilise et fonctionne avec le driver LCDWIKI
#include <LCDWIKI_GUI.h> //Core graphics library
#include <LCDWIKI_KBV.h> //Hardware-specific library
LCDWIKI_KBV mylcd(ILI9486,A3,A2,A1,A0,A4); //model,cs,cd,wr,rd,reset

Dans LCDWIKI il faudrait trouver les équivalences à:
setTextSize, setTextColor, setRotation, fillScreen, setCursor, print et println

Le problème c'est que mes compétences limitées ne me permettent pas d'aller "fouiller" dans LCDWIKI_GUI.h et, ou LCDWIKI_KBV.h pour trouver les correspondances…
Lorsque j'aurais les correspondances je pourrais me débrouiller de modifier le code d'origine.

Merci d'avance pour le coup de pouce!
@++

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