Le problème du pilote

J'ai un afficheur graphique. Je suis content. Il marche, c'est génial. Vous avez un afficheur graphique, mais il peut ne pas fonctionner (en principe si l'écran reste blanc, c'est que le programme n'est pas bon). La bibliothèque que j'ai écrite dépend du circuit driver qui se trouve sur la carte afficheur. Évidemment, j'ai écrit pour que cela fonctionne avec MON matériel. Je ne peux debugger que ce que je possède, et je sais faire plus de bugs que de lignes de code.

Voici un petit programme à dézipper pour arduino quelPilote qui est capable de reconnaître les pilotes ILI9341 et ST7781. Si vous avez l'un des deux, ma bibliothèque fonctionnera. Vous recevrez alors sur la console série et sur l'écran l'information si cela fonctionne. Par ici si vous le voulez sous forme texte.

Écrire une bibliothèque qui fonctionne avec tous les drivers, c'est possible, mais il faudrait déjà écrire une procédure d'initialisation par circuit. Cela fait un code gigantesque. D'autre part pour celui qui n'a qu'un seul afficheur, ce n'est pas utile de disposer dans sa bibliothèque de tout ce qui ne lui servira jamais à rien mais qui prend toute sa mémoire. Se pose aussi un autre problème car certaines procédure de dessin peuvent être optimisées en fonction du circuit. Par exemple le circuit ST7781 utilise des données en 16 bits, alors que le ILI9341 est plutôt en 8 bits. Quand on lit un registre, cela se fait directement avec le premier, mais pour le deuxième il faut faire une première lecture inutile avant. Les temps de lectures ne sont pas le mêmes...

C'est surtout quand je regarde ma liste de quelques circuits graphiques permettant de piloter un écran LCD (la liste n'est pas exhaustive!):
FSA506 HX8309 HX8310 HX8312 HX8340 HX8345 HX8346 HX8347 HX8352 HX8353 HX8357 HX8367 HX8368 HX8369 ILI9163 ILI9220 ILI9221 ILI9222 ILI9225 ILI9320 ILI9325 ILI9326 ILI9327 ILI9328 ILI9331 ILI9335 ILI9340 ILI9341 ILI9342 ILI9481 ILI9486 ILI9488 LGDP4524 OTM2201 OTM3225 R61505 R61509 R61580 RM68090 S1D13517 S1D13742 S1D13743 S6B33BF S6D0129 S6D02A1 S6D0144 SEPS525 SPFD5408 SPFD54126 SSD1269 SSD1276 SSD1278 SSD1279 SSD1283 SSD1284 SSD1285 SSD1286 SSD1287 SSD1288 SSD1289 SSD1298 SSD1331 SSD1335 SSD1339 SSD1355 SSD1926 SSD1928 SSD1961 SSD1962 SSD1963 SSD2119 SSD2119 ST7628 ST7715 ST7735 ST7773 ST7781 ST7787 ST7789 TL1771 UC1682 UC1697 UC1698 UC1698U
Et si je me limite seulement à ma résolution 240x320 pixels, j'ai quand même à prévoir pour les circuits:
HX8312 HX8346 HX8347 HX8367 HX8368 ILI9320 ILI9325 ILI9328 ILI9331 ILI9335 ILI9340 ILI9341 ILI9342 OTM3225 R61505 R61580 RM68090 S6D0129 SPFD5408 SSD1269 SSD1279 SSD1289 SSD1298 SSD2119 SSD2119 ST7781 ST7787 ST7789
Ce qui fait quand même 28 pilotes à écrire (plus si j'en oublie).

Je crois savoir aussi que le ILI9341 fait 240x320 (colonnes x lignes), le ILI9342 fait 320x240 et le ST7781 fait les deux possibilités. Pour dessiner en portait ou en paysage, cela ne se fait donc pas pareil en fonction du circuit. Si la plupart des circuits couleurs sont en 18 bits (comme le mien, que je n'utilise qu'en mode 16 bits), il y a aussi des circuits en 16 bits (SSD1331) et des 24 bits (HX8357). En mode gris, on trouve des 1,2 et 4 bits par pixels. Tout se complique pour faire un programme universel. Je note que quand j'ai acheté mon afficheur la bibliothèque AdaFruit fonctionnait, mais plus maintenant; la bibliothèque Arduino a évoluée et ne reconnaît pas tous les circuits.

J'ai donc choisi, pour des questions de test et de remplissage mémoire de faire une bibliothèque par driver. Pour l'instant j'ai une carte à ST7781, et une avec le ILI9341. J'ai donc écrit ma bibliothèque uniquement pour ces deux circuits. Si vous avez autre chose, ma bibliothèque ne fonctionnera sans doute pas.

Adapter la bibliothèque pour un autre circuit consiste à trouver quel est le circuit pilote, à lire et comprendre les 200 pages de documentation du circuit et à modifier 5% de la bibliothèque déjà établie. Mais c'est faisable


dansetrad.fr Contactez-moi