Montage

Il faut faire très attention au brochage. Rien n'est standard, il peut varier du tout au tout entre deux références extrêmement voisines. Il est donc primordial de trouver le datasheet correspondant exactement à votre modèle, sous peine de risquer la destruction de l'afficheur. Ce qui est ici correspond à l'afficheur BTHQ 21605AV-YETF-LED04-I2C-5V (ouf !) de chez Batron.

En quelques mots, le bus I2C fonctionne avec deux fils (horloge et données), plus la masse. Les unités sont toutes branchées en parallèle, via des sorties en collecteur ouvert. Cela fait que les unités ne peuvent que forcer tirer les lignes à la masse. Pour que les lignes soient à l'état +5V lorsque toutes les unités sont dans l'état « haute impédance », il est nécessaire de connecter chacune des deux lignes au +5V via une résistance de pull-up.

Cet afficheur est rétro-éclairé par LED. À cet effet, il faut relier la broche n°3 (LED) au +5V, via une résistance qui fixe le courant. La valeur de la résistance (ici 33 Ω) se déduit simplement de la tension de seuil de la LED et du courant maximum.

Le schéma suivant très simple ; le brochage de l'afficheur est celui du modèle cité ci-dessus :

20091107_pic_i2c_lcd.png

Programme

J'ai utilisé un PIC 18F2455 qui possède un port I2C. La section 19.4.2 du manuel nous apprend que les broches I2C du PIC (appelées SCL et SDA) fonctionne en mode « collecteur ouvert » dès que le module I2C est activé, et à condition que ces broches soient configurées en entrée. Il faut donc s'en assurer à l'initialisation du programme. Ensuite, il faut donner une valeur correcte à SSPADD, le registre d'initialisation du « baud rate generator ». Personnellement, j'ai procédé par essais/erreurs...

Mon programme est écrit en C18 ; il utilise les fonctions I2C de la bibliothèque standard Microchip. Cependant, les fonctions I2C start, stop, write de base ne fonctionnaient pas ; j'ai dû les faire précéder d'un idle. Je les ai donc réécrites en ce sens.

Il faut faire attention à la table de caractères utilisée par l'afficheur, il ne s'agit pas forcément du code ASCII. Ainsi, dans le modèle présenté ici, il faut ajouter 0x80 par rapport aux codes de caractères ASCII : la plage de « caractères ASCII affichables » se trouve entre 160 et 256 au lieu de 32 à 128 (avec quelques différences mineures).

Sur les afficheurs LCD standards, la tension VLCD permet de régler le contraste. On fixe VLCD avec un pont diviseur de tension (potentiomètre). Grâce au protocole sur I2C du contrôleur PCF2119, VLCD peut se régler via la commande sur VLCD_set (voir spécification PCF2119, § 10.2.3.6).

Programme à télécharger : i2c_lcd.c