le shield en question


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.

c'est bôôôôôôô!


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

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.