samedi 7 avril 2012

lecture de contacts

Ajourd'hui je discute de différentes méthodes pour lire des contacts ouvert/fermé en utilisant un minimum d'E/S. La méthode la plus simple et la plus évidente de lire un contact est de le brancher directement entre broche du PIC et le négatif de l'alimentation. On programme cette broche en mode entrée avec pull-up activé. Économique mais sur un petit MCU avec très peut d'E/S ça limite les possibilitées. Les diverses méthodes expliquées dans cette chronique étendrent les possibilitées.

méthode 1, lecture du temps de charge d'un condensateur

J'ai présenté cette méthode dans le projet PocketSimon ainsi que dans la chronique Lecture d'un clavier sur entrée en logique TTL. Je ne reviendrai donc pas sur cette méthode du temps de charge d'un condensateur à travers un circuit RC sauf pour mentionner que cette méthode fonctionnerait mieux sur une entrée avec comparateur. Le PIC10F206 a un comparateur, il est donc plus avantageux que le PIC10F202 pour l'utilisation de cette méthode. L'avantage du comparateur se situe à 2 niveaux, le premier est qu'il y a un voltage de référence précis auquel la tension du condensateur est comparée, ce qui n'est pas le cas pour une entrée TTL ce qui complique les calculs lors de la conception il faut même utiliser une méthode empirique pour déterminer les valeurs de seuil. Le deuxième avantage est l'hystérésie (dead band) sur l'entrée. Une fois que le comparateur a atteint son seuil de déclenchement, même si le voltage redescent légèrement il va resté enclenché. Cette hystérérie représente une immunité contre les fluctuations causé par le bruit. Il est vrai que le condensateur lui-même filtre les interférences hautes-fréquences.
inconvénient: Ne permet la lecture que d'un seul bouton à la fois, quoique en modifiant légèrement le montage pour mettre les résistances en parrallèles plutôt qu'en série, une combinaison de contact pourrait-être lue.

méthode 2, le convertisseur A/N

Une simple chaine de diviseurs de tension sur une entrée convertisseur analogue/numérique permet de faire la lecture de plusieurs boutons. Le nombre de boutons pouvant être lue par cette méthode dépend de la résolution du convertissseur et de la précision des résistances.

SW1SW2SW3SW4Vdiv
OOOO1/5Vcc
FOOO1/4Vcc
OFOO1/3Vcc
OOFO1/2Vcc
OOOFVcc
Inconvénient: ce montage ne permet la lecture que d'un seul bouton à la fois. Mais d'autres arrangements permettent la lecture de plusieurs boutons simultanément.

Avec cet arrangement chaque combinaison de contact (16) donne une valeur unique de lecture.

méthode 3, séquence entrée/sortie

Cette méthode fait appel à la programmabilité des E/S en passant du mode entrée au mode sortie. Si on dispose de 3+ E/S le nombre de contacts lisiblent est de N*(N-1). Donc pour 3 E/S on 3*2=6, pour 4 on obtient 12. Le gain est exponentiel, avec 5 E/S on est déjà rendu à 20.

L'algorithme
  • Mettre GP0 en mode sortie avec niveau bas
  • Mettre GP1 et GP2 en mode entrée avec pullup
  • faire la lecture de GP1 (SW2) et GP2 (SW6)
  • recommencer avec GP1 comme sortie pour faire la lecture de SW1 et SW4
  • recommencer avec GP2 comme sortie pour faire la lecture de SW3 et SW5
Notez qu'avec cette méthode, sur un PIC10F2xx, si on utilise GP3 aussi on peut aller jusqu'à 9 contacts.
avantage:Permet la lecture simultanée de plusieurs contacts.

méthode 4, codage binaire par diodes

Avec cette méthode des diodes de commutation (1N914,1N4148,etc) sont utilisées pour encoder une valeur binaire pour chaque contact. Le nombre de contact possible est de (2^^n) - 1, soit 2 exposant le nombre d'entrées moins 1. Donc si on utilise 3 entrées on peut coder 7 contacts comme illustré ici.


GP0,GP1 et GP2 sont configurés entré binaire. Ceci n'est que pour illustrer le principe car en pratique sur un PIC10F202 j'utiliserais GP3 au lieu de GP2 comme 3ième entrée question de me garder une sortie. Le code binaire résultant est inversé, 0xE au lieu de 1, etc.

Inconvénient un seul contact peut-être fermé à la fois.

méthode 5, la matrice de points (cross-points)

C'est la méthode utilisé avec les les keypad 12 ou 16 touches. Il s'agit d'utiliser un nombre X de broches configurées en sortie et un nombre Y configuré en entrée. à chaque intersection X,Y on place un contact. Pour faire la lecture on garde les sorties en haute impédance en configurant 1 seule sortie à la fois on fait la lecture des entrées. On obtient donc une coordonné x,y du contact qui est fermé. Le nombre de contacts possible est x*y.
Avantage plusieurs contacts peuvent-être fermés en même temps.



méthode 6, utilisation d'un registre à décalage

Cette méthode nécessite un registre à décalage du genre SN74HC164 de 2 E/S programmés en sortie et d'une programmé en entrée avec pullup. On fait circuler un bit LOW sur chaque sortie en faisant une lecture après chaque décalage.

Dans le circuit ci-haut GP1 est utilisé comme sortie CLK, GP2 comme sortie bit et GP3 comme entrée de lecture des contacts.
avantage:N'importe quelle combinaison de boutons peut-être enfoncée simultanément. GP0 demeure libre. On pourrait fabriquer un petit synthétiseur à 8 notes avec ce circuit simplement en ajoutant un haut-parleur sur GP0.
En branchant simplement un autre 74HC164 en série avec le premier, sortie QH de U1 sur entrée A du deuxième 74HCH164 et les 2 entrées clk reliées ensembles, on pourrait lire 16 contacts.

Aucun commentaire:

Enregistrer un commentaire