Réalisation d'une interface USB avec afficheur LCD / récepteur Infrarouge compatible LIRC pour Linux ou Windows avec un ATtiny 2313

Ayant découvert sur différents sites web qu'il était possible sur base de micro contrôleur AVR sans interface USB, de développer des applications contenant une implémentation complètement logicielle du protocole USB 1.1 (basse vitesse), je me suis intéressé à ces possibilités en vue de doter un serveur linux sans écran d'un dispositif permettant de :

  • Prendre des ordres d'une télécommande RC5 (compatible Philipps / Sony)
  • Afficher des informations sur un LCD 2x20 ou 4x20 caractères compatible HD44780

Vous trouverez dans cet article les détails de la réalisation matérielle (très smple), la mise en œuvre logicielle, ainsi que deux drivers pour utiliser cette interface sous Windows avec le programme LCD Smartie (DLL pilote) et pour Linux avec LCD4Linux.

L'interface finie (le trou dans la partie supérieure est pour le capteur infra rouge pour lire les signaux de la télécommande RC5):

irlcd.jpgAprès avoir joué du fer à souder pour monter l'interface sur la base du schéma de Dick Streefland ( http://www.xs4all.nl/~dicks/avr/usbtiny/index.html ) légèrement modifié par mes soins afin d'ajouter 2 relais et un connecteur de programmation ICSP, il a fallu programmer l'AVR.

Vue interne de la réalisation. Le connecteur pour l'alimentation extérieure est inutilisé. La led, (en bas à droite) clignote lors de la réception d'une trame RC5 par le capteur infrarouge (en haut). Le connecteur à 10 broches sert à connecter le programmateur AVR.

Disposant d'une interface de programmation USBTinyISB de LadyAda ( http://www.ladyada.net/make/usbtinyisp/index.html ), il m'a suffit d'utiliser le programme AVRdude, pour réaliser cette tache.

Si le support logiciel de la partie infrarouge est évident sous Linux (car compatible avec le protocol IgorPlug), il n'existait aucune solution pour le support du LCD que ce soit sous Linux ou Windows. J'ai donc développé 2 drivers (soumis aux auteurs de ces projets pour intégration dans les logiciels concernés...) :

  • l'un pour fonctionner sous Windows avec LCSmartie (http://lcdsmartie.sourceforge.net/). Il a été réalisé à l'aide du compilateur MinGW (libre), lui même intégré dans l'environnement de développent Eclipse (libre également). Il n'est pas encore intégré sur le site de LCsmartie, mais est joint à ce post.
  • L'autre pour LCD4Linux (http://ssl.bulix.org/projects/lcd4linux/), réalisé à l'aide de GCC et baptisé IRLCD. Une page de documentation a été rédigée pour ce driver sur le Wiki de LC4Linux (http://ssl.bulix.org/projects/lcd4linux/wiki/IRLCD). Il a été intégré dans le SVN le jour même par l'auteur du logiciel. Pour récupérer le driver, il faut prendre la version SVN de lcd4linux.

Si lors du branchement sur un système linux, rien de particulier n'est à faire (à part vérifier dans /var/log/messages que l'interface a bien été détectée..), il n'en est pas de même sous Windows. Il faut en effet installer avant de raccorder l'interface la librairie libusb-win32. Cette installation doit se faire en plusieurs temps, afin de vous faciliter la vie pour des déploiements ultérieurs.

  • Installer libusb-win32-filter-bin-xxx.exe, qui va mettre en place presque tout ce qui est requis. Un reboot sera nécessaire
  • Récupérer l'archive libusb-device-bin-xxx.tar.gz, et prélever le fichier "inf-wizard.exe" que vous allez placer dans le répertoire "C:\Program Files\LibUSB-Win32\bin"
  • Branchez vote interface IRLCD, et ne faites rien sur l'assitant d'installation
  • Lancer le programme "C:\Program Files\LibUSB-Win32\bin\inf-wizard.exe", et suivez toutes ses étapes. Il va créer un .inf vous permettant de déployer votre interface.
  • A la fermeture de l'inf-wizard, repassez dans l'assistant d'installation du nouveau périphérique détecté (irlcd) et précisez lui le chemin du fichier.inf que vous venez de créer.

Vous pouvez sauver à part le fichier inf et les 2 fichiers cat, en plus desquels vous n'aurez qu'à ajouter C:\Program Files\LibUSB-Win32\bin\libusb0.sys pour que votre archive de driver soit complète! Vous pourrez ainsi le réinstaller simplement sur d'autres PC.

Sont joints à ce post :

Références :