Écran texte 16*2 VFD en lieu et place du LCD

Certains le savent, juste derrière les leds, j’adore les écran LCD type HD44780 (lcdproc, lcd4linux, etc). Je viens de recevoir des 16T202DA1J de Samsung achetés sur eBay pour moins de 20 Euros pièces (port inclus). Certes, c’est deux fois plus cher que le LCD mais franchement, ça a une autre gueule. Comme le brochage est parfaitement compatible avec les LCD HD44780, c’est interchangeable directement sur mon module USB/série/AVR permettant un contrôle USB de l’affichage. De quoi décorer bon nombre de montages embarqués et mes serveurs…

Bon, on ne peut pas faire de PWM sur le rétro-éclairage (puisqu’il n’en en a pas) mais le rendu et la luminosité de l’ensemble compense largement.

Ecran LCD 2*16 série/USB via AVR Attiny2313

Décidément aujourd’hui je n’arrête pas ! Cela faisait longtemps que j’avais cette idée en tête : monter un afficheur LCD alpha-numérique sur USB/série. Voilà chose faîte avec un petit AVR Attiny2313.

La connectique est simple :
LCD (1 ) : Masse
LCD(2) : Vcc +5V
LCD(3) : Contraste ((connecté à Masse)
LCD(4) : RS (1=data, 0=commande) : AVR Port D PD5
LCD(5) : RW (1=read, 0=write) : AVR Port D PD4
LCD(6) : Enable : AVR Port D PD3
LCD(7-14) : data 0-7 : AVR Port B PB0-PB7

L’Attiny2313 est configuré pour la communication série à 19200 avec un quartz à 14.7456 Mhz.

Le code n’est qu’un début mais il permet déjà d’afficher du texte sur les deux lignes de l’afficheur. Quelques essais montrent qu’il est relativement facile de créer les 8 caractères programmables si on respecte bien la datasheet et les timings. Le code est, pour l’instant, relativement bouillon. C’est normal ;)
serialint.c
makefile
common.mk

Le but n’est pas vraiment d’obtenir un firmware complet permettant toutes les opérations possibles comme ce qui existe déjà dans les boutiques sur le Web (quoi que, si j’ai le temps). Il s’agit d’avoir un périphérique d’affichage simple pouvant se connecter en TTL, RS232 et/ou USB sur un système embarqué comme une Fonera, Fonera+ ou Fonera 2. Je pourrai alors voir en temps réel les connexions Wifi et autres informations de base pour un AP.

Décidément, j’adore le 2313, c’est vraiment mon microcontrôleur préféré.

Quelques liens :
http://www.quinapalus.com/hd44780udg.html
http://home.iae.nl/users/pouweha/lcd/lcd0.shtml
http://www.geocities.com/dinceraydin/lcd/custom.htm

Un écran LCD pour la Fonera

Décidément La Fonera est un super jouet. Comme, de toutes façon, j’ai désactivé la console série pour utiliser le port pour autre chose, j’ai tenté l’utilisation d’un écran LCD 128*128 série fabriqué par 4D Systems et vendu par Dontronics.
Il s’agit d’un modèle d’afficheur qui n’est plus fabriqué. Celui-ci est remplacé par un modèle OLED bien plus efficace et riche incluant un lecteur micro SD pour stocker des images et des animations. Le modèle utilisé ici ne permet que d’afficher des primitives graphiques simples (trait, cercle, texte) ainsi que des images pixel par pixel.

Peu importe, ce qu’il est possible de faire avec ce vieux modèle l’est également avec les nouveaux. Le mode de connexion est relativement simple. Le module LCD est alimenté en +5Volts tiré de La Fonera, l’interfacage série est en +3.3/0V (comme le port série du routeur donc).

Il suffit donc de brancher tous cela pour que cela fonctionne ? NON !

Le module auto-détecte la vitesse du port série sur demande. C’est la première requête qu’il faut lui envoyer à la mise sous tension. Le problème qui se pose alors vient de RedBoot qui envoi sur le port série tout un blabla à la mise sous tension du routeur. Inutile de vouloir modifier RedBoot, non seulement cela semble des plus délicat mais, en plus on risque de perdre définitivement la main sur le routeur en cas de problème. Ne touchons pas a RedBoot.

La solution consiste à allumer le module LCD après le démarrage du routeur. Toutes les lignes GPIO placées à l’arrière de La Fonera de test sont utilisées pour mon bus i2c. Reste la led WAN pilotée par un transistor. La modification consiste donc à retirer la led et le transistor et utiliser la ligne via un BC547B permettant de piloter l’alimentation du module :

On voit ici que j’ai placé un petit strap entre la ligne 2 (base de l’ancien transistor) et l’anode de la led. Ceci permet, tout simplement d’utiliser l’emplacement juste dessous pour souder un fil (jaune). Il ne reste ensuite plus qu’à brancher le fil sur la base du BC547 via une résistance de 47 Ohms (c’est suffisant pour saturer le transistor). Ce qui nous donne le schémas suivant :

Il ne reste plus, ensuite qu’à piloter le module depuis le routeur. Pour cela j’ai écrit un petit code en C permettant différentes manipulations sur le module (effacement, contraste, rétro-éclairage, chargement d’image PNG). C’est une version préliminaire permettant déjà d’afficher point par point une image sur l’écran (c’est très lent car, même en 115200 il faut attendre l’accusé réception pour chaque pixel, et il y en a 16384). Une option permet de minimiser le nombre de pixels à afficher en déterminant la couleur dominante de l’image et en en remplissant le fond de l’écran. Ne reste ensuite qu’à afficher les pixels d’une couleur différente. Ce genre de choses n’est plus nécessaire avec les nouveaux modules OLED. Il suffit de stocker les images sur la micro SD et le module les affiche à vitesse grand V.

Voici le nécessaire :
Les sources pour OpenWrt
Le paquet IPKG pour Kamikaze 7.09

Les sources ne seront peut-être pas compilables avec votre BuildRoot OpenWrt et pour cause. Il semble que les règles Build/InstallDev du Makefile de la libGD soient… heu… étranges. J’ai donc un peu bricolé dedans.

Au final, La Fonera peut afficher (doucement) de sympathiques images en 128*128 :

Miaouuuuu !

Il vous faudra aussi le module kernel proc_gpio disponible ici : http://daubau.net/proc_gpio/

La vous pourrez alimenter le module avec :
insmod proc_gpio
echo 1 > /proc/gpio/2_dir
echo 1 > /proc/gpio/2_out