Utilisation d'un shield LCD TFT 3.2 avec Touchscreen
Par F1RMB le lundi, mars 3 2014, 07:22 - Arduino - Lien permanent
Voici les correctifs des bibliothèques UTFT et UTouch de Henning Karlsen pour l'utilisation avec un shield SainSmart, basé sur le SSD1289 et le XPT2046 (AD7843)
J'avais trouvé ce shield TFT / Touchscreen / SDCard à petit prix sur eBay, et tout content de l'essayer, j'ai rencontré quelques menus problèmes quant à son utilisation.
En fouillant le Net, j'ai donc trouvé qu'un developpeur (Henning Karlsen) avait créé deux bibliothèques universelles. L'une pour les dalles LCD, l'autre pour les dalles tactiles.
J'ai donc téléchargé les deux archives, installé tout ça à l'endroit adéquat, puis ouvert un des projects de démo dans l'IDE pour l'Arduino.
Il faut changer deux petites choses, concernant l'initialisation et le type de chip de la dalle:
Comme j'utilise ça sur un Mega 2560 (chinoiserie), il faut commenter la première ligne et décommenter la seconde, puis changer le type de chip pour un SSD1289:
// Uncomment the next line for Arduino 2009/Uno
//UTFT myGLCD(ITDB32S,19,18,17,16); // Remember to change the model parameter to suit your display module!
// Uncomment the next line for Arduino Mega
UTFT myGLCD(SSD1289,38,39,40,41); // Remember to change the model parameter to suit your display module!
Premier test, le compilateur m'enguirlande, utilisant son vocabulaire le plus fleuri.
Après correction du code source (voir le correctif en bas de page), la compilation passe, et je flashe donc la carte.
Bon, maintenant au tour du tactile...
Rebelote, j'ouvre le projet pour calibrer la dalle, je flashe sans aucun problème, après avoir changé la ligne concernant le chip et les pins du TFT, je lance la calibration.
Il termine le processus en m'affichant les trois valeurs à changer dans le fichier UTouchCD.h, mais après avoir flashé la démo QuickPaint, je me rend compte que ça ne fonctionne pas du tout: j'ai beau appuyer sur toute la surface de l'écran, seule une bande verticale se dessine, et l'écran flashe aussi de temps en temps.
Mouais...
Après moult recherches, je me rend compte que je ne suis pas le seul dans ce cas là, je vois beaucoup de demandes d'aides sur différents forums, mais aucune réponse.
Je modifie donc le code pour qu'il m'affiche en temps réel les coordonnées de pointage lues, et là c'est un festival de grand n'importe quoi.
Cool...
Je pars donc à la chasse aux informations, Je dégotte une archive avec quelques datasheets et du code incomplet, je regarde en profondeur comment fonctionne la bibliothèque UTouch et constate que c'est plutôt très propre et optimisé, ça adresse directement les ports au lieu de passer par des digitalWrite(), beaucoup plus lents.
Indice...
A l'aide de tout ça, j'imagine que ça cause trop vite sur le bus SPI, et qu'il faut quelques cycles supplémentaires entre les changements d'états.
Je rajoute donc quelques nop en assembleur, aux bons endroits, et je reflahe la carte avec le projet de calibration.
Victoire Ça fonctionne enfin correctement.
Je mets aussi à disposition le project de calibration modifié qui permet, en ouvrant le moniteur du port série, de voir s'afficher les fameuses trois lignes à changer dans le fichier UTouchCD.h, ça évite les erreurs de recopie.
UPDATE: le dev de ces bibliothèques n'ajoutera pas ces correctifs, et on ne peux pas dire qu'il soit des plus courtois (plutôt en mode paranoïaque / agressif, accusant le monde d'être à la solde des chinois, ces vilains voleurs)... Il ne faut pas lécher la peinture au plomb...
Bon Developpement
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Commentaires
Trop fort ce Dani !!
En tous les cas, au vue du résultat, c'est Bôôôôô !!!! ;o)
Les projets n'ont pas finis de fleurir !!
A Pluche pour de nouvelles aventures ...
Christo
Bonjour,
Excellent : cela fonctionne correctement chez moi maintenant .....
merci
Pierre
@F1IHR: Alors content de vous avoir aidé
73 de Daniel.
Bonjour,
où faut-il placer les fichiers correctifs .diff ? Directement dans le dossier libraries>UTFT ?
Merci d'avance pour votre aide !
Bonjour,
Non, il faut l'appliquer à l'aide de la commande "patch".
Amitiés.
---
Daniel
Bonjour,
enfin une solution pour utiliser l'écran tactile. Par contre, pouvez-vous détailler la procédure pour patcher la librairie UTFT, sachant que je suis sur OSX et pas habitué à la console.
Merci.
bonjour merci pour ce tuto
petite question svp,
de quoi s'agit t'il quand vous dites
( il faut l'appliquer à l'aide de la commande "patch".)
je suis sous windows 7, j ai CodeBlocks
et surtout je suis novice,
merci.
Bonsoir à tous, je suis nouveau et viens de "tomber" sur le site. Beaucoup d'info mais aussi des interrogations...
C'est quoi un*.diff ? et la commande "patch" ?
Je suis vraiment à la ramasse ...
D'avance merci.
Bonsoir,
Un "diff" est un format de fichier utilisé par l'utilitaire "patch".
Sous Windows, il existe quelques utilitaires (winmerge par exemple), pour OS-X, je ne sais pas, mais ça doit exister (et il y a le port des outils Unix).
Mais en ce qui concerne les deux petits patch, il est possible de les appliquer à la main (ouvrir le fichier diff dans un éditeur de texte):
--- file.yy
+++file.yy
@@ -xx
-
+
C'est donc assez facile à appliquer, surtout quand le patch est petit.
Amitiés.
---
Daniel
Bonjour,
je reviens vers vous car j'ai le même soucis mais cette fois sur un Arduino DUE.
En suivant la méthode, très bien expliqué au demeurant,je vois que je dois modifier le fichier HW-ARM.inc du dossier arm.
j'ai tenté de mettre des _nop_(); (je pense au bon endroit) mais le compilateur me dit :
C:\Program Files (x86)\Arduino\libraries\UTouch\/hardware/arm/HW_ARM.inc:XX: error: '_nop_' was not declared in this scope
Si jamais vous aviez une solution, je serais preneur avec grand plaisir.
cordialement
Pierre F1IHR
Bonjour,
pour un écran TFT tactile de 5 pouces en résolution 800x480, je suis passé sur le DUE car les 8 Mhz en 8 bits des AVR commençaient à "ramer" sérieusement.
cela fonctionne a merveille pour les AVR mais maintenant, j'ai le problème avec le DUE en ARM...
j'ai essayé de rajouter des : _nop_(); aux endroits qui m'ont paru évident mais le compilateur ne comprends pas, à priori l'instruction nop
auriez-vous une solution?
cordialement
73
Pierre F1IHR
Bonjour Pierre,
Le compilateur râle car il manque surement la déclaration de la macro _nop_() dans le fichier HW_ARM_defines.h:
#define _nop_() __asm__("nop\n\t");
Amitiés.
---
Daniel
Merci beaucoup pour ce patch !
Ca marche impeccable maintenant
ATMEGA2560 + lcd3.2" + Shield Sainsmart v1.0
Salut,
je n'ai pas compris du tout la procedure pour le pach.
Un conseil ?
@Sheldor
Bonjour,
Que n'avez vous pas compris ?
Amitiés.
bonjour. merci pour le tuto mais pour mon cas j ai une lcd tft 3.6 avec controleur ili9327 . donc j ai aussi avant la méme robléme du commande tactile il ne fonction pas quand je fais la calibration mais méme que j ai fait modifier les deux fichies HW_AVR ET HW_AVR_DEFINS IL NE MARCHE PAS AUSSI si vous pouvez m'aidée merci
bonjour, je suis débutant avec arduino...
je ne comprends pas comment "patcher" le fichier UTFT-fix.diff .
je veux dire quelle est le fichier a modifié ? est-ce le sketch de demo ? ou bien le UTFT.h ? ou le UTFT.cpp ???
je suis vraiment perdu .... si quelqu'un pouvais m'aider je lui en serait très reconnaissant
Merci d'avance
Bonjour,
Il faut appliquer le patch a l'aide de la commande du même nom.
Sinon, le .diff n'est qu'un fichier texte, et il est assez simple de regarder les lignes modifiées et d'appliquer ces changements "à la main".
Cordialement.
---
Daniel
@SAMIR
Bonjour,
N'ayant pas d'écran avec ce contrôleur, je ne peux malheureusement pas vous aider.
Cordialement.
---
Daniel
Bonjour
Tout d'abord ,merci pour ce tuto même si ça ne fonctionne toujours pas pour moi après les modifs que vous proposez.
En ce qui concerne l'affichage c'est ok mais avec ILI9327 !!
par contre au niveau tactile ça ressemble à votre description de départ autant dire que mon écran est inexploitable.
Auriez vous une piste à me proposer ?
merci par avance
Michel
@Michel
Bonjour,
Avec quel type de microcontrôleur utilisez-vous votre écran ?
Amitiés.
---
Daniel