| ![[Photo of the Author]](../../common/images/Guido-S.gif)  par  Guido Socher (homepage)
 
 L´auteur:
 
 Guido apprécie Linux parce que c'est un vraiment bon système pour
    développer son propre matériel. 
 Traduit en Français par:
 Jean-Etienne Poirrier (homepage)
 
 Sommaire:
 | 
 
| lcdproc -- affichages LCD faciles à utiliser et faciles à construire![[Illustration]](../../common/images2/article375/title.jpg)  Résumé:
 
    Que les lecteurs qui pourraient avoir attendu maintenant un article sur les
    microcontrôleurs ne se tracassent pas. Je continuerai certainement. Le
    prochain article sur du matériel que j'écrirai sera de nouveau sur les
    microcontrôleurs. J'ai aussi créé une page où vous pourrez trouvez tous les
    articles récents d'électronique : 
    http://www.tuxgraphics.org/electronics/_________________ _________________ _________________J'espère que cela rendra le tout facile à suivre et à en avoir un
    aperçu.
 
 Les lecteurs de longue date de LinuxFocus se rappelleront encore mon vieil
    article de Mars 2003 : Affichage LCD
    USB sous Linux et celui de Mai 2002 : Un panneau de contrôle LCD pour
    votre serveur Linux. C'étaient des panneaux LCD « de luxe », avec chien de
    garde et ADC, etc. Avec le temps, j'ai noté que toutes ces fonctionnalités
    supplémentaires étaient des choses que je n'utilisais pas souvent.
 
 Cet article présente maintenant un modèle « de base » : un affichage LCD et 2
    boutons, simple et facile à construire pour tout le monde.
 
 
 | 
     
Qu'est-ce que lcdproc?
     Au tout début, lcdproc était utilisé
    comme programme pour afficher quelques statistiques (charge processeur,
    uptime, temps), ... sur un affichage LCD externe. Avec le temps, il a
    cependant évolué vers une solution beaucoup plus générique. De nos jours, le
    paquet lcdproc contient LCDd, un serveur générique et le pilote LCD,
    accompagné de nombreux clients. Un de ces clients est toujours l'exécutable
    appelé lcdproc qui affiche toujours des statistiques du serveur, bien qu'il
    y en ait d'autres. Cette architecture client serveur a le grand avantage que
    vous ne devez pas écrire votre client dans un langage spécifique. Vous avez
    juste besoin d'utiliser le protocole ascii simple entre le client et le
    serveur. Voici un exemple qui implémente une horloge en juste 36 lignes de
    code Perl. Çà affiche l'heure et la date et le coin supérieur droit
    montre un icône appelé « battement de coeur ». Le « battement de coeur » est
    ajouté par le serveur LCDd. Cet icône « battement de coeur » clignote une fois
    de temps en temps pour indiquer que l'affichage est toujours vivant.
 Au tout début, lcdproc était utilisé
    comme programme pour afficher quelques statistiques (charge processeur,
    uptime, temps), ... sur un affichage LCD externe. Avec le temps, il a
    cependant évolué vers une solution beaucoup plus générique. De nos jours, le
    paquet lcdproc contient LCDd, un serveur générique et le pilote LCD,
    accompagné de nombreux clients. Un de ces clients est toujours l'exécutable
    appelé lcdproc qui affiche toujours des statistiques du serveur, bien qu'il
    y en ait d'autres. Cette architecture client serveur a le grand avantage que
    vous ne devez pas écrire votre client dans un langage spécifique. Vous avez
    juste besoin d'utiliser le protocole ascii simple entre le client et le
    serveur. Voici un exemple qui implémente une horloge en juste 36 lignes de
    code Perl. Çà affiche l'heure et la date et le coin supérieur droit
    montre un icône appelé « battement de coeur ». Le « battement de coeur » est
    ajouté par le serveur LCDd. Cet icône « battement de coeur » clignote une fois
    de temps en temps pour indiquer que l'affichage est toujours vivant.
    
    Avec lcdproc, vous pouvez avoir plus que juste des chaînes. Vous avez des
    barres de graphique, des barres de défilement, des barres de titre, ... et
    des chaînes de caractères. Au début du programme, vous définissez ces objets
    (ils sont appelés « widgets ») et, ensuite, vous les remplissez avec des
    données. Tout cela est expliqué dans le Guide du
    Développeur de LCDproc, aux pages 7 et suivantes.
    
    La partie principale de la petite horloge LCD du
    programme d'exemple ressemble à ceci :
#!/usr/bin/perl -w
....
# initialise la communication:
print $remote "hello\n";
....
# défini notre nom et défini un widget de type chaîne de texte
print $remote "client_set name lcdtime\n";
print $remote "screen_add scr1\n";
print $remote "widget_add scr1 str1 string\n";
....
while(1)
{
    ....
    $date = scalar localtime;
    # maintenant écrit sur le LCD:
    print $remote "widget_set scr1 str1 1 1 \"$date\"\n";
    sleep 10;
}
    Assez facile, non ? OK, maintenant, construisons quelque chose de plus
    utile.
     
Le Matériel
    Selon les spécifications, le port parallèle d'un PC travaille à 5V. Si vous
    jetez un oeil à la feuille de données d'un affichage LCD moderne (par
    exemple, à partir de tuxgraphics : 
    http://shop.tuxgraphics.org/electronic/lcd.html), vous vous apercevrez
    que même si les affichage sont grands, ils nécessitent extrêment peu
    d'énergie. Seulement 2 mA ! Avec si peu de courant, il devrait être
    possible d'alimenter l'affichage directement par le port parallèle.
    L'avantage est qu'alors, vous n'avez plus besoin d'un connecteur de
    courant supplémentaire. C'est juste un affichage LCD avec un connecteur au
    port parallèle. Très commode.
    
    Tout ceci est possible avec un port parallèle qui fournit réellement 5V. Le
    problème est qu'il y en a quelques uns qui ne respectent pas les
    spécifications. Ainsi, comment savez-vous si votre port parallèle est
    suffisamment bon pour une solution « auto-alimentée » ? Voici un petit test :
    
      - Installez lcdproc avec le patch « parallel port power » (voyez les
      références).
- Configurez le fichier /etc/LCDd.conf comme décrit ci-dessous.
- Lancez le programme LCDd en tant que root.
- Prenez un voltmètre digital et mesurez la tension sur la broche 1. Il
      devrait être de 4.90V ou plus (mesurez entre la broche 1 et la broche 18,
      càd. la terre (GND)).
- Maintenant, connectez une résistance de 33K sur le port parallèle, entre les
      broches 1 et 18. Le voltage devrait descendre à 4,25V. Si vous obtenez
      plus, alors votre port parallèle est très bon. Si vous obtenez moins,
      votre solution « auto-alimentée » ne fonctionnera pas.
Si le test est réussi, alors vous pourrez utiliser la solution à port
    parallèle auto-alimenté en utilisant l'affichage 20x2 de tuxgraphics (ou un
    équivalent). Celui-là est testé. Il fonctionnera.
    
     Si votre port
    parallèle est un peu faible, ne vous en faites pas trop. Vous pouvez soit
    utiliser les 5V internes de votre PC (vous devrez l'ouvrir pour cela) soit
    vous pouvez prendre 5V d'un connecteur USB libre.
 Si votre port
    parallèle est un peu faible, ne vous en faites pas trop. Vous pouvez soit
    utiliser les 5V internes de votre PC (vous devrez l'ouvrir pour cela) soit
    vous pouvez prendre 5V d'un connecteur USB libre. 
     
Le diagramme du circuit
    Le premier diagramme montre les connections pour un affichage LCD avec 2
    boutons, utilisant la solution du port parallèle auto-alimenté.
    
      
       
    
    
Port parallèle
pin 1 , strobe  = 220, supply voltage
pin 2 , D0      = LCD pin D4
pin 3 , D1      = LCD pin D5
pin 4 , D2      = LCD pin D6
pin 5 , D3      = LCD pin D7
pin 6 , D4      = LCD pin RS
pin 7 , D5      = LCD pin RW
pin 8 , D6      = LCD pin EN
pin 10, ACK     = bouton A, bouton rouge au-dessus
pin 12, PE      = bouton C, bouton noir en-dessous
pin 14, strobe  = 220, supply voltage
pin 16, strobe  = 220, supply voltage
pin 17, strobe  = 220, supply voltage
pin 18, ground  = 0V, GND
    
    
    Ce second schéma montre les connections pour un affichage LCD avec deux
    boutons et une source de courant extérieure :
    
      
       
      
    
    
    
    Comme pour tout nouvel article d'électronique, vous pouvez de nouveau
    obtenir un kit avec tous les composants sur shop.tuxgraphics.org 
    
    J'ai monté l'affichage LCD dans un cadre de plastique noir :
    
      
      
       
    
     
Le « lcdproc parallel port power patch »
    LCDd envoie toujours des données à l'affichage. On pourrait dès lors
    utiliser des diodes et dériver le courant des lignes de signal. Le problème
    est que les diodes vont générer une chute de tension d'au-moins 0,5V, même à
    des courants faibles. Nous ne pouvons pas nous le permettre. Il y a cependant
    assez de lignes de sortie libres si vous utilisez LCDd avec juste un seul
    affichage. Rien n'est plus simple que de modifier le logiciel LCDd pour
    toujours maintenir ces broches libres sur la valeur logique « 1 ». On insère
    toujours quelques résistances pour avoir une protection minimale contre les
    courts-circuits (ou une protection contre les fautes stupides ;-)). Le patch
    pour lcdproc-0.4.5 est disponible dans la section téléchargement. Vous
    l'appliquez comme ceci :
tar zxvf lcdproc-0.4.5.tar.gz
cd lcdproc-0.4.5
patch -p 1 < lcdproc-0.4.5-pp-powerpatch-v1.txt
./configure --enable-drivers=hd44780
make
make install
(ou vous pouvez juste faire "copy LCDd.conf /etc" et copier server/LCDd vers
/usr/bin)
     
Le fichier LCDd.conf
    Le fichier /etc/LCDd.conf configure nos pilote et serveur LCD (serveur =
    le processus LCDd). Dans le fichier /etc/LCDd.conf, vous devez enlever les
    commentaires sur les lignes suivantes pour utiliser l'affichage compatible
    HD44780 avec les connections décrites dans cet article :
[server]
Driver=HD44780
[HD44780]
# Hitachi HD44780 driver
Port=0x3BC
# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
ConnectionType=4bit
Keypad=yes
Backlight=no
Size=20x2
# Specifies the size of the LCD.
DelayMult=4
DelayBus=true
    La partie difficile est l'adresse du port (0x278, 0x378 et 0x3BC). Comment
    savez-vous à quelle adresse d'E/S correspond quel port parallèle ? Le plus
    simple est de charger le module noyau parport (modprobe parport) et
    d'ensuite regarder dans /proc/ioports:
modprobe parport
modprobe parport_pc
cat /proc/ioports
...
0388-0389 : OPL2/3 (left)
038a-038b : OPL2/3 (right)
03bc-03be : parport0
03c0-03df : vga+
03f6-03f6 : ide0
...
dans ce cas, vous utilisez : 0x3bc
     
Notre propre application
    Vous avez vu, au début de cet article, combien il était facile d'envoyer un
    texte de chaînes quelconque vers l'affichage. Cela devient un peu plus
    compliqué si vous voulez un affichage interactif (avec les deux boutons).
    Dans ce cas, nous avons besoin d'éviter le signal de sommeil, sinon les
    boutons ne répondront plus durant la période de sommeil. En même temps, nous
    avons besoin d'un signal d'arrêt qui arrête la boucle. Ce dont nous avons
    besoin est l'appel système « select ». Il arrête l'exécution tant qu'un
    timeout (délai) n'est pas dépassé ou jusqu'à ce qu'un bouton soit pressé sur
    l'affichage.
    
    Notre application va donner quelques statistiques (mem, swap, cpu, temps) et
    vous pouvez utiliser les boutons pour éteindre la machine.
    
    Le script s'appelle servermenu_pl et vous le trouverez dans la section de
    téléchargement
    
    Je présente juste ici une application de base car l'expérience des articles
    précédents m'a montré que la plupart des lecteurs souhaitent juste savoir
    comment faire quelque chose et, ensuite, ils ont leur propre applications
    pour cela. J'ai reçu des e-mail avec toutes sortes d'idées : station de
    gravure de CD, PC station météo, systèmes d'alarme, ... Tout cela peut être
    réalisé. Il suffit de modifier un peu le code.
    C'est vraiment génial et procure beaucoup de plaisir de jouer avec cet
    affichage et lcdproc.
    
      
    
     
Références
    
    
  
 
Talkback form for this article
Every article has its own talkback page. On this page you can submit a comment or look at comments from other readers:
    
2005-05-13, generated by lfparser version 2.52