Gestion d'un écran LCD

Introduction

Cet article est paru dans le magazine PC Team numéro 64, janvier 2001, au sein de la rubrique “Team pratik” sous rubrique “Électronique”.

pcteam_64

Article

Le mois dernier était consacré à la découverte du port parallèle. Ce mois-ci, nous allons utiliser nos connaissances en mettant en œuvre un écran LCD, que l’on trouve aujourd’hui un peu partout dans les appareils électroniques.

Réaliser l’interface d’un écran LCD est une expérience très intéressante. Ses possibilités d’utilisation sont importantes car les afficheurs envahissent littéralement notre quotidien. L’écran étudié ici est du type alphanumérique (écriture de chiffres, de lettres et de signes) et est complètement standard. Il possède un générateur de caractères, un contrôleur intégré et est capable d’afficher 2 lignes de 16 caractères.

pcteam_64

L’écran que nous utilisons et son connecteur

Enfin, grâce à la présence d’une LED derrière l’écran, l’afficheur est doté d’un rétro éclairage du plus bel effet. Un tel écran coûte aux alentours de 100 F, le prix variant selon le nombre de lignes, la présence d’un rétro éclairage et le système de transmission (série ou parallèle).

Vérifier seulement que le contrôleur est compatible avec le HD44780 de Hitashi, dont la documentation complète est fournie sur le CD Pro.

Principe de fonctionnement

Compte tenu de l’étendue du sujet, un résumé des principaux paramètres se trouve dans le fichier lcd.pdf situé sur le CD du magazine. Le fonctionnement est relativement simple car la plus grande partie du travail est laissée au contrôleur d’écran. En dehors de l’alimentation, seuls deux signaux de contrôle et huit bits de données sont nécessaires pour faire fonctionner notre écran.

Le bus de données bidirectionnel va nous servir principalement à envoyer des paramètres et des caractères vers l’écran. Les caractères à écrire sont codés en ASCII, donc sur 8 bits. Le bit de contrôle E joue le rôle d’horloge : la donnée est effective sur un front descendant. Le bit RS sert quant à lui à indiquer au contrôleur que l’information présente sur le bus de données est une instruction (RS à 0) ou un caractère (RS à 1). L’entrée de configuration R/_W permet de configurer l’écran en écriture (R/_W à 0) ou en lecture (R/_W à 1) ; pour simplifier notre montage, nous connecterons directement cette broche à la masse car seule l’écriture nous intéressera. Il est également possible de faire varier le contraste en modifiant la tension de V0. En ce qui concerne le hardware, l’écran est constitué d’un contrôleur qui se charge d’allumer ou d’éteindre les cellules correspondantes. Chaque caractère est formé à l’aide d’une matrice de 5*8 cellules. Le plus souvent, seules les 7 lignes supérieures de la matrice servent, la dernière étant réservée à la visualisation d’un curseur. Il y a deux types de mémoires inclues dans l’écran : la CG RAM (Character Generator) qui contient des caractères (dont des signes japonais) et la DD RAM qui contient l’adresse courante du curseur.

pcteam_64

Le protocole de communication

Mise en œuvre

Le schéma ci-contre montre un exemple d’interfaçage sur le port parallèle. Le bus de données du port ne fonctionne ici qu’en sortie : il est donc relié directement à celui de l’écran (qui est bien sûr compatible TTL).

Certains ports parallèles possèdent des broches de sortie en collecteur ouvert ; il peut être alors utile d’ajouter une résistance de tirage au +5V de 10K Ohms sur les lignes E et RS. Le contraste et la luminosité du rétro éclairage se règlent à l’aide de deux potentiomètres. Veillez à interconnecter toutes les masses et à relier l’ensemble à la masse du port parallèle située sur les broches 18 à 25.

L’alimentation du circuit est laissée à un classique 7805 dont il convient de câbler comme indiqué sur le schéma ci-contre.

pcteam_64

Un rappel de brochages

Ce composant se charge de transformer une tension comprise entre 7 à 15V en un 5V continu capable de débiter une intensité relativement importante.

pcteam_64

Le branchement classique d’un 7805

En effet, le port parallèle est incapable de fournir le courant nécessaire au fonctionnement de l’écran. Celui-ci consomme 100mA environ, ajouté au rétro éclairage (optionnel) qui absorbe au bas mot 300mA, cela fait au total près de 0,5 A ! Le 7805 est toujours accompagné d’une série de condensateurs servant de réserves d’énergie, c’est un montage que nous utiliserons très souvent dans cette rubrique. Enfin, il est très facile d’implémenter ce schéma sur une plaquette à bandes cuivrées que l’on peut trouver aisément aux alentours de 20F. Pour la liaison entre l’écran et le PC, il faut éviter d’utiliser un câble parallèle de plus de 3m : dans certains cas, il peut y avoir des erreurs de transmission.

pcteam_64

Le câblage entre l’écran et le port parallèle

Programmation de l’écran

L’écran ainsi branché ne sert pas à grand chose sans un minimum de programmation. Nous allons faire appel une fois de plus au C et au Visual Basic accompagné de sa dll inpout.dll, permettant de gérer le port parallèle dans ce langage. La programmation en C se révèle d’ailleurs un peu plus aisée car toutes les routines de base sont incluses en standard. Tous les programmes sont comme à l’accoutumée fournis sur le CD Pro et accompagnés de leurs sources commentées. Comme nous l’avons vu précédemment, la communication avec l’afficheur obéit à un protocole assez simple. La meilleure manière de programmer un tel projet est de créer plusieurs procédures :

  • Init_LCD () : cette fonction se chargera d’initialiser l’écran (bus de 4 ou 8 bits, configuration du curseur, etc.)
  • Efface_LCD () : son nom est assez explicite, l’écran est effacé et le curseur revient au début de la première ligne.
  • Ecrire_LCD (Chaine, Position) : cette fonction écrit sur l’écran la phrase passée en paramètre à l’emplacement désiré.

Pour ceux qui programment en C, il suffit d’inclure le fichier d’en-tête LCD.h à un projet pour bénéficier des procédures. Le dialogue le plus simple est l’écriture d’un caractère à l’écran : il suffit de traduire en programmation les chronogrammes du protocole de communication. Voici par exemple l’algorithme qui écrit le caractère ‘A’ :

procédure Ecrire_Caractère(A)
{
	RS=1;  // l'octet envoyé est un caractère
	outportb (0x378, 65);  // on place la valeur ASCII de A sur le bus de données
	E=1;  // E à 5V pour préparer un front descendant
	delai(2 ms); // délai de 2 millisecondes
	E=0;  // on baisse E à 0V : le caractère est inscrit sur l'écran
delai(2 ms);
}

Dans le cas de l’envoi d’une instruction, l’algorithme reste exactement le même sauf pour les délais qui doivent être un peu plus important. Les délais sont utilisés pour éviter de “planter” l’écran. Lorsque celui-ci reçoit une instruction, comme effacer l’écran par exemple, le contrôleur met un certain temps pour exécuter l’ordre et est alors indisponible durant cette période. La documentation technique nous fournit heureusement tous ces temps d’exécution ; les sources fournies sur le CD sont donc à adapter au contrôleur utilisé. Notons cependant qu’il existe une solution plus fiable mais légèrement plus compliquée : en commutant l’écran en lecture, il est possible de voir si l’écran est occupé grâce à l’état du bit BF (Busy Flag). Enfin, n’oublions pas qu’il est nécessaire d’initialiser l’écran avant toute tentative d’écriture. L’initialisation consiste à configurer l’écran selon le matériel disponible et ses préférences : nombre de lignes d’affichage, mode de communication, présence du curseur, etc.

Conclusion

Une fois que l’on a bien compris le principe de fonctionnement, il devient facile d’étendre les possibilités de notre système. Il est possible par exemple de connecter la borne Read/_Write au port parallèle pour pouvoir lire la mémoire et utiliser le signal “Busy Flag”. Il est également envisageable d’utiliser les possibilités de création de caractères et, partant, créer les signes propres au français (les é, à, è etc.). Les applications sont nombreuses, n’hésitez donc pas à nous envoyer vos réalisations pour les faire figurer sur le CD Pro !