Interfacer un clavier

Introduction

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

pcteam_65

Article

Notre application du mois dernier était consacrée à l’affichage. Nous allons compléter notre système avec un clavier qui jouera le rôle d’interface avec l’utilisateur et rendra ainsi l’application plus interactive.

L’écran LCD du mois dernier ne nous a pas laissé beaucoup de broches disponibles. Mais heureusement, quelques astuces vont nous permettre de contourner ce problème. Le bus de données est pris, ainsi que deux broches de contrôle. Cela nous laisse donc sept broches dont cinq en entrées et deux en entrées/sorties.

L’inventaire est terminé, passons maintenant à ce qui nous intéresse à savoir la gestion d’un clavier. Il se présente sous la forme d’un pavé numérique à 12 touches, semblable à ce qui existe sur les téléphones. On y trouve donc les chiffres de 0 à 9, ainsi que les caractères spéciaux * et #.

pcteam_65

Voici les deux claviers à douze et seize touches

Les deux types de clavier

Le clavier que nous allons utiliser est en plastique (voir l’illustration) et ne coûte qu’une dizaine de francs. Il mesure 6 cm sur 5 environ et possède 12 touches. Les claviers à 16 touches dits “alphanumériques” possèdent en plus les lettres A à F pour coder des nombres hexadécimaux. Ces claviers supportent généralement près de 300mA sous 24V et ont une durée de vie supérieure à 107 manœuvres. Il existe deux technologies de fabrication du circuit électrique ; on parle alors de clavier à matrice et de clavier à point commun. Les deux versions possèdent des avantages et des inconvénients. Un clavier à point commun est très facile à mettre en œuvre et à traiter mais possède 13 sorties (12 pour chaque touche plus le point commun). Un clavier matriciel n’a que 7 sorties (pour 12 touches) mais sera plus difficile à gérer. Nous avons opté pour la deuxième version, vu qu’il ne nous reste que peu de broches disponibles sur le port parallèle. Nous n’aurons encore une fois que peu de composants additionnels car la scrutation des touches sera entièrement logicielle.

pcteam_65

Le câblage électrique d’un clavier matriciel

Plagions un peu…

Bien sûr, il existe quelques circuits qui pourraient nous épargner bien des lignes de codes. Malheureusement ce type de circuits, comme le 74C922, coûte assez cher, 80 F environ. Nous allons donc contourner le problème en réalisant la plupart des fonctions intégrées dans ce composant à l’aide d’un peu de programmation. Le 74C922, dont la documentation technique est fournie sur le CD Pro, est très pratique pour encoder des claviers car il contient toute la logique nécessaire : des résistances de tirage, une horloge interne, un registre de sortie mémorisant la dernière touche activée, un système anti-rebonds, un signal annonçant qu’une touche a été appuyée… il suffit de connecter le clavier et le tour est joué.

Regardons d’un peu plus près l’intérieur du 74C922 : le schéma fonctionnel ci-contre nous montre la voie à suivre.

Une résistance de tirage au +5V (résistance dite de “pull-up”) est connectée sur chaque ligne du clavier. Quand aucune touche n’est appuyée, le potentiel est au 5V. Les colonnes sont connectées à une horloge via un décodeur 2 vers 4, dont les sorties actives sont au niveau bas. Cela est très intéressant : l’horloge sert en fait de compteur, qui permet de scruter les colonnes les unes après les autres. Il suffit d’appliquer tour à tour un 0V sur une colonne et, lorsqu’une touche est pressée, le 0V se retrouve sur la ligne correspondante. La logique externe détermine en fonction de tous ces paramètres la touche qui a été appuyée.

pcteam_65

L’encodeur de clavier 74C922, une solution simple mais onéreuse

Mise en oeuvre

Le schéma ci-contre montre l’interfaçage du clavier au port parallèle ; il n’y a que très peu de composants additionnels. Nous avons le réseau de résistances (entre 4.7k Ohms et 10k Ohms), et le circuit logique 74HCT139, un décodeur 2 vers 4 qui nous permettra d’étendre le système à un clavier de 16 touches. En plus de réduire le nombre de fils partant du port parallèle le 74HCT139 a l’avantage de posséder des sorties actives au niveau bas. Cette propriété est très intéressante pour notre application car nous souhaitons scruter les colonnes une par une (la colonne à tester sera alors à 0V tandis que les autres seront au potentiel de 5V). Au niveau de la réalisation, le mieux est de compléter la plaquette à trous ou à bandes cuivrées du mois dernier, et d’utiliser la même source d’alimentation à base de 7805. Comme nous le voyons, tout cela reste très simple.

pcteam_65

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

La programmation

Nous allons utiliser ici uniquement Visual Basic car comme son nom l’indique ce langage est un peu plus visuel que le C. Cependant, il est tout à fait possible de réaliser la programmation dans un autre langage qui possède des fonctions permettant la gestion du port parallèle (C, Basic, Pascal etc.). Dès lors, il suffit de reprendre les sources VB fournies sur le CD Pro et de traduire les algorithmes. Nous rappelons que les fichiers .frm ainsi que les fichiers .bas sont lisibles à partir de n’importe quel éditeur de texte. Nous retrouvons ici la Dll InpOut.dll que nous avons déjà utilisée les mois précédents. Elle doit se placer dans le répertoire où se situe le programme ou dans le répertoire Windows. Deux fonctions sont déclarées dans un module et servent à écrire et à lire dans les registres du port parallèle. Ceci étant dit, intéressons nous plus particulièrement à la fonction principale du programme. Comme nous l’avons mentionné plus haut, le but est de scruter le clavier. Pour cela, nous allons prendre le contrôle “Timer” et le configurer pour qu’il s’exécute toutes les 100 ms. Cette valeur est purement arbitraire, il faut simplement prendre une valeur suffisamment petite devant le temps de la pression d’un bouton. Bien qu’il soit possible de descendre plus bas pour améliorer les performances, il est déconseillé de descendre en dessous de 100 ms en Visual Basic car ce langage n’est pas très rigoureux au niveau de la gestion du temps. Donc, toutes les 100 ms, le programme exécutera les instructions contenues dans cette fonction. Il suffit alors de la compléter en respectant l’algorithme suivant :

Procédure Timer () {
	Colonne 1 à 0V, Colonnes 2 et 3 à 5V
	{
		…
		Traitement
		…
	}
	Colonne 2 à 0V,  Colonnes 1 et 3 à 5V
	{
		…
		Traitement
		…
	}
	etc …
}

Le traitement est en fait le décodage de l’information lue dans le registre d’Etat, en fonction des quatre bits d’entrées. Les sources sont suffisamment commentées pour enlever toute ambiguïté.

pcteam_65

Notre application en pleine action

Le système complet

Nous possédons maintenant un ensemble complet d’interface utilisateur. A vous d’imaginer les applications, comme le contrôle d’accès ou comme interface dans un système plus complexe. Le programme final gérant l’écran LCD et le clavier se trouve sur le CD Pro, c’est en fait le rassemblement des programmes du mois dernier et ce mois-ci. Nous avons imaginé un petit système invitant l’utilisateur à entrer un code de 4 chiffres s’affichant sur l’écran LCD. L’ordinateur compare ensuite le code saisi avec un code en mémoire et affiche le résultat. Il est également possible de reprendre les algorithmes afin d’utiliser ce système dans n’importe quelle électronique embarquée.

Voilà notre port parallèle complètement utilisé, il ne reste presque aucune broche de disponible. Cependant comme nous l’avons vu, il est facile d’en étendre les sorties à l’aide des décodeurs, comme le 74HCT138, un décodeur 3 vers 8. Il est possible d’apporter plusieurs améliorations à ce montage comme arranger la période de scrutation, ajouter un système anti-rebonds… à vos fers à souder !