... rgl
Matrices carrées à diodes
Matrices triangulaires à diodes
pour matricage optimal des claviers
Claviers matriciels - Application MicroContrôleur Claviers matricés - Matricage des claviers : matrice à diodes carrée, matrice à diodes triangulaire, matrices à diodes
(c) R.LEGAT |
Gérez un clavier matricé, jusqu'à 112 touches sur 8 bits...
grâce à la matrice triangulaire à diodes double étendue !!!
- Matricage des claviers
- Matrice Carrée à diodes (Simple / Double - Avec bit d'interruption / Reset - "Polyphonique" à diodes)
- Matrice Triangulaire à diodes (Simple / Etendue - Double / Etendue - "polyphoniques" à diodes)
- Tableau récapitulatif de la capacité des matrices à claviers, matrices à diodes carrées et triangulaires
Claviers matricés - Claviers matriciels |
Le principe d'utilisation des matrices trouve une grande utilité dans la confection des claviers de commande.
Le terme de "matrice" est emprunté aux mathématiques, où il désigne un tableau de chiffres de forme rectangulaire, classé en lignes et en colonnes.
Il existe plus d’une méthode pour réaliser le matriçage d’un clavier.
Certaines, paradoxalement moins connues, permettent pourtant une économie importante du nombre de bits utilisés.
Certes, cette économie se fait par l’emploi d’un soft un peu plus élaboré, mais on peut câbler davantage de touches pour un même nombre de bits composant le port clavier.
Nous allons comparer, dans cette étude, le nombre de touches que l'on peut câbler et activer sur un port de 8 bits.
Les grandes lignes des algorythmes de traitement seront exposées.
Les ports utilisés par votre MicroContrôleur de gestion doivent être bidirectionnels (i/o).
Chaque ligne doit être forcée à l'état 1 par des résistances pull-up de 10K. (non représentées sur les schémas ci-dessous !!!)
A noter que certains µC intègrent une résistance de pull-up interne et programmable.
Clavier à Matrice carrée classique (16 touches pour 8 pins i/o)
Ce type de clavier simple et courant est composé de lignes et de colonnes à l’intersection desquelles se trouvent les touches qui viennent donner le contact électrique.
A chaque touche correspond un contact entre une ligne et une colonne. Ici il s’agit d’un clavier matricé de 16 touches avec 4 lignes et 4 colonnes.
Pour déterminer la touche appuyée, par programme, on peut réaliser un décodage logiciel consistant à envoyer un niveau bas, décalé dans le temps, sur les lignes (par exemple).
Ces lignes devant alors être, par défaut, au niveau haut. Les colonnes doivent être tirées à VCC par des résistances dites de "pull up".
Ainsi, en examinant l’état de ces colonnes, on peut en déduire quelle ligne et quelle colonne est active lorsqu’une touche est pressée.
Ce mode de fonctionnement est dit par scrutation (Polling), dans la mesure où faut examiner en permanence l’état du clavier (ici, les colonnes) pour pouvoir détecter qu’une touche a été pressée.
Une matrice carrée à diodes, classique, câblée sur 8 bits, ne permet la gestion que de 16 touches.
|
|
Algorithme de base pour décodage/lecture du clavier
P0 à P3 en entrée P4 à P7 en sortie
P4 en sortie =0 P5,6,7 en sortie =1 Lecture de P0 à P3 Si P0=0 alors Sw1 Si P1=0 alors Sw2 Si P2=0 alors Sw3 Si P3=0 alors Sw4
P5 en sortie =0 P4,6,7 en sortie =1 Lecture de P0 à P3 Si P0=0 alors Sw5 Si P1=0 alors Sw6 Si P2=0 alors Sw7 Si P3=0 alors Sw8
P6 en sortie =0 P4,5,7 en sortie =1 Lecture de P0 à P3 Si P0=0 alors Sw9 Si P1=0 alors Sw10 Si P2=0 alors Sw11 Si P3=0 alors Sw12
P7 en sortie =0 P4,5,6 en sortie =1 Lecture de P0 à P3 Si P0=0 alors Sw13 Si P1=0 alors Sw14 Si P2=0 alors Sw15 Si P3=0 alors Sw16
On peut alors améliorer l'algorithme en lui intégrant des fonctions spéciales:
- Si plus d'une touche est active, alors la routine de lecture du clavier retourne l'état précèdent.
- Si aucune touche n'est active, la routine retourne un code spécial, par exemple : 0
- L'anti-rebond peut être effectué par un test décisionnel portant sur 2 lectures consécutives.
- Si les 2 lectures sont identiques, le résultat après anti-rebond est cette lecture.
- Si les 2 lectures sont différentes, on retourne la valeur la plus ancienne.
- etc ...
|
La matrice carrée à diodes peut aussi être dessinée sous forme linéaire. Le schéma devient alors:
Clavier à Matrice carrée à diodes, Double (32 touches pour 8 pins i/o)
Nous avons vu que le principe de lecture d'un clavier matricé consiste à envoyer un état "0" au niveau d'une ligne et de voir sur quelle colonne il est récupéré par le contact du poussoir sollicité.
Voici la méthode permettant de doubler les capacités d'une matrice carrée, tout en conservant le même principe.
Pour varier, on envoie cependant les "0" par les colonnes et on les traque sur les lignes.
La configuration d'une matrice carrée double sera la suivante:
Nous avons cependant dédoublé chaque ligne de sortie par une ligne munie d'une diode.
Cette ligne particulière sera gérée par le programme qui permutera les Entrées et les Sorties !
Rappel, dans cet exemple, ce sont initialement les Colonnes P0 à P3 qui seront mises en sortie et "enverront les zéros" tandis que la scrutation se fera sur les Lignes P4 à P7.
Principe:
Si un port en lecture retourne un 0, alors mettre ce port en sortie = 0 et changer le port "émetteur" en entrée.
Si il est à 0 alors c'est la touche qui n'est pas sur la ligne avec diode qui est active
Si il est à 1 alors c'est la touche qui est sur la ligne avec diode qui est active
Algorithme
|
|
|
Switches possibles: |
|
If … Then |
|
Else |
|
|
P0 en sortie=0 |
Entrées P4 à P7, à lire successivement |
|
|
|
|
|
|
|
Si P4=0 |
1 |
ou |
1D |
mettre P4 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
1 |
else |
1D |
|
|
Si P5=0 |
5 |
ou |
5D |
mettre P5 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
5 |
else |
5D |
|
|
Si P6=0 |
9 |
ou |
9D |
mettre P6 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
9 |
else |
9D |
|
|
Si P7=0 |
13 |
ou |
13D |
mettre P7 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
13 |
else |
13D |
|
|
|
|
|
|
|
|
|
|
|
|
|
P1 en sortie=0 |
Entrées P4 à P7, à lire successivement |
|
|
|
|
|
|
|
Si P4=0 |
2 |
ou |
2D |
mettre P4 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
2 |
else |
2D |
|
|
Si P5=0 |
6 |
ou |
6D |
mettre P5 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
6 |
else |
6D |
|
|
Si P6=0 |
10 |
ou |
10D |
mettre P6 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
10 |
else |
10D |
|
|
Si P7=0 |
14 |
ou |
14D |
mettre P7 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
14 |
else |
14D |
|
|
|
|
|
|
|
|
|
|
|
|
|
P2 en sortie=0 |
Entrées P4 à P7, à lire successivement |
|
|
|
|
|
|
|
Si P4=0 |
3 |
ou |
3D |
mettre P4 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
3 |
else |
3D |
|
|
Si P5=0 |
7 |
ou |
7D |
mettre P5 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
7 |
else |
7D |
|
|
Si P6=0 |
11 |
ou |
11D |
mettre P6 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
11 |
else |
11D |
|
|
Si P7=0 |
15 |
ou |
15D |
mettre P7 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
15 |
else |
15D |
|
|
|
|
|
|
|
|
|
|
|
|
|
P3 en sortie=0 |
Entrées P4 à P7, à lire successivement |
|
|
|
|
|
|
|
Si P4=0 |
4 |
ou |
4D |
mettre P4 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
4 |
else |
4D |
|
|
Si P5=0 |
8 |
ou |
8D |
mettre P5 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
8 |
else |
8D |
|
|
Si P6=0 |
12 |
ou |
12D |
mettre P6 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
12 |
else |
12D |
|
|
Si P7=0 |
16 |
ou |
16D |
mettre P7 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
16 |
else |
16D |
Cette matrice à diodes peut également être dessinée sous forme linéaire:
Avec une matrice carrée dédoublée, nous pouvons gérer 32 switches !
Clavier à Matrice carrée à diodes, avec bit d’Interruption
L'avantage d'utiliser une Interruption est de permettre de lire immédiatement le clavier dès qu'une touche est pressée.
On a ainsi la certitude de ne pas "manquer" une touche, ce qui peut se produire si la boucle générale du programme complet est un peu longue à s'exécuter.
Il existe aussi un moyen simple de provoquer un signal d'Interruption dès activation du clavier.
Le principe est de détecter qu’une touche a été pressée pour alors mettre en route, une seule fois la routine d'Interruption qui va décoder la matrice.
La détection de touche se fait en réalisant, à l’aide de diodes, un "ET câblé" entre les 4 colonnes dont l'état par défaut est "Haut".
|
|
Dès qu’une touche quelconque est appuyée, le signal d’Interruption passe à l’état bas et déclenche le décodage de la touche.
On utilisera, à cet effet, l’une des entrées d’interruption du microcontrôleur.
Pour déterminer la touche enfoncée, il suffit de lancer la procédure de lecture de la matrice.
Ici, une seule exécution de cette routine de lecture/décodage suffira puisque cette procédure n’est lancée que lorsqu’une touche a réellement été enfoncée.
Nous évitons ainsi de devoir faire tourner en permanence une routine de polling qui scrute, sans fin, la matrice du clavier et qui mobilise inutilement les ressources du µC.
Diagramme des temps:
|
Schéma de brochage d’une matrice carrée à diodes, avec bit d’interruption
TMAIS tous les MicroContrôleurs (µC) ne gèrent cependant pas les Interruptions !
Il y a cependant un "moyen" de palier ce problème dans, seulement, certains cas précis.
En effet, dans certaines applications, le µC n'a besoin d'être activé que suite à l'action de l'utilisateur sur le clavier.
Le reste du temps, il reste ensuite en veille après avoir donné ses consignes aux éléments de contrôle qu'il gère.
Le principe est donc de provoquer un Reset du µC dès qu'il y a action sur le clavier.
Le programme commencera par une routine initiale de lecture du clavier, située au dessus de la boucle du programme principal.
La lecture du clavier ne sera alors plus renouvellée avant un nouveau Reset.
Le µC devra cependant toujours archiver ses valeurs de travail, de manière non volatile, pour ne pas les perdre lors du prochain Reset !
|
|
Les résistances de 100 ohms n'interviennent pas dans le processus de décodage ou de reset.
Elles servent à protéger le µC contre les décharges électrostatiques fréquentes lorsqu'un clavier est manipulé par un Humain !
En régime normal, C est chargé et un niveau haut est présent sur la broche de Reset du µC.
Lors de l'appui d'une touche, il se décharge au travers d'une R de 4K7, provoquant le Reset.
Pendant sa phase de Reset interne, le µC fait passer ses ports en haute impédance. C cesse donc de se décharger et le µC sort de son état de Reset et commence le décodage du clavier.
Le passage des lignes à l'état bas est sans effet sur la patte de Reset car sa durée est trop brève pour pouvoir redécharger C.
Une fois la touche actionnée décodée et le programme exécuté, on peut replacer le µC en mode de veille.
La seule précaution à prendre est qu'il faut que le temps de charge et de décharge de C soient inférerieurs à la durée d'un cycle de Reset du µC. (18msec pour un PIC 16C54)
|
Claviers à Matrices Triangulaires à diodes |
Nous allons voir, ci-dessous, un matriçage étonnamment moins bien connu alors que ses caractéristiques, en terme d’économie de bits utilisés, sont particulièrement intéressantes !
Clavier à Matrice triangulaire à diodes, simple (28 touches pour 8 pins i/o)
Une matrice triangulaire à diodes simple 4x4, qui utilise 8 bits du µC, permet la gestion de 28 touches.
On gagne ainsi 12 touches par rapport à la matrice carrée 4x4 classique qui utilise pourtant le même nombre d’entrée/sorties du µC !
Il y a aussi deux méthodes pour dessiner un clavier à matrice triangulaire à diodes:
La première, présente la matrice sous sa forme triangulaire, d'où son appellation.
La seconde, est une représentation linéiare, plus plane, et dont la simplicité va cependant nous permettre d'extrapoler les possibilités de cette matrice.
Les Ports sont drainés par une résistance Pull-Up les maintenant au niveau "Haut". Certains µC, comme les AVR, intègrent sur leurs pins d'entrée/sortie, une résistance d'entrée pull-up ou pull-down programmable.
Avec les µC ne comportant pas cette commodité, il faudra connecter chaque port à +Vcc par une Résistance de 10K.
La routine de balayage sera la suivante :
|
P0 en sortie=0 |
|
|
Autres P en entrée à lire |
|
Si P1=0 alors |
Sw |
1 |
|
Si P2=0 alors |
Sw |
2 |
|
Si P3=0 alors |
Sw |
3 |
|
Si P4=0 alors |
Sw |
4 |
|
Si P5=0 alors |
Sw |
5 |
|
Si P6=0 alors |
Sw |
6 |
|
Si P7=0 alors |
Sw |
7 |
|
|
|
|
|
P1 en sortie=0 |
|
|
Autres P en entrée à lire |
|
Si P2=0 alors |
Sw |
8 |
|
Si P3=0 alors |
Sw |
9 |
|
Si P4=0 alors |
Sw |
10 |
|
Si P5=0 alors |
Sw |
11 |
|
Si P6=0 alors |
Sw |
12 |
|
Si P7=0 alors |
Sw |
13 |
|
|
|
|
|
P2 en sortie=0 |
|
|
Autres P en entrée à lire |
|
Si P3=0 alors |
Sw |
14 |
|
Si P4=0 alors |
Sw |
15 |
|
Si P5=0 alors |
Sw |
16 |
|
Si P6=0 alors |
Sw |
17 |
|
Si P7=0 alors |
Sw |
18 |
|
|
|
|
|
P3 en sortie=0 |
|
|
Autres P en entrée à lire |
|
Si P4=0 alors |
Sw |
19 |
|
Si P5=0 alors |
Sw |
20 |
|
Si P6=0 alors |
Sw |
21 |
|
Si P7=0 alors |
Sw |
22 |
|
|
|
|
|
P4 en sortie=0 |
|
|
Autres P en entrée à lire |
|
Si P5=0 alors |
Sw |
23 |
|
Si P6=0 alors |
Sw |
24 |
|
Si P7=0 alors |
Sw |
25 |
|
|
|
|
|
P5 en sortie=0 |
|
|
Autres P en entrée à lire |
|
Si P6=0 alors |
Sw |
26 |
|
Si P7=0 alors |
Sw |
27 |
|
|
|
|
|
P6 en sortie=0 |
|
|
Autres P en entrée à lire |
|
Si P7=0 alors |
Sw |
28 | |
Clavier à Matrice triangulaire à diodes, simple étendue (56 touches pour 8 pins i/o)
La configuration linéaire nous fait immédiatement voir qu'il est possible d'étendre les possibilités de la simple matrice triangulaire initiale.
En effet, la matrice triangulaire simple est composée de 7 cellules comptant respectivement de 7 à 1 éléments.
Etendons cette configuration en placant (b-1) éléments dans chaque cellule. "b" étant le nombre de bits utilisés pour le port clavier.
Le schéma "étendu" comportera alors 8 cellules de 7 éléments, soit 56 switches pour 8 bits !
Le nombre de switches utilisables est alors de Switches = b*(b-1). "b" étant le nombre de bits utilisés pour le port clavier. (8 sur le présent schéma)
Ainsi, avec 3 bits on peut contrôler 3*(3-1)=6 switches, ; avec 4 bits: 4*(4-1)=12 switches et avec 8 bits: 8*(8-1) = 56 switches.
Rappelons nous que la matrice carrée ne permettait que 16 switches sur 8 bits !
La routine de balayage reste basée sur le même principe de polling et devient:
|
P0 en sortie=0 |
|
|
|
Autres P en entrée: à lire successivement |
|
Si P1=0 alors |
Sw |
1 |
|
|
Si P2=0 alors |
Sw |
2 |
|
|
Si P3=0 alors |
Sw |
3 |
|
|
Si P4=0 alors |
Sw |
4 |
|
|
Si P5=0 alors |
Sw |
5 |
|
|
Si P6=0 alors |
Sw |
6 |
|
|
Si P7=0 alors |
Sw |
7 |
|
|
|
|
|
|
|
P1 en sortie=0 |
|
|
|
Autres P en entrée: à lire successivement |
|
Si P0=0 alors |
Sw |
8 |
|
|
Si P2=0 alors |
Sw |
9 |
|
|
Si P3=0 alors |
Sw |
10 |
|
|
Si P4=0 alors |
Sw |
11 |
|
|
Si P5=0 alors |
Sw |
12 |
|
|
Si P6=0 alors |
Sw |
13 |
|
|
Si P7=0 alors |
Sw |
14 |
|
|
|
|
|
|
|
P2 en sortie=0 |
|
|
|
Autres P en entrée: à lire successivement |
|
Si P0=0 alors |
Sw |
15 |
|
|
Si P1=0 alors |
Sw |
16 |
|
|
Si P3=0 alors |
Sw |
17 |
|
|
Si P4=0 alors |
Sw |
18 |
|
|
Si P5=0 alors |
Sw |
19 |
|
|
Si P6=0 alors |
Sw |
20 |
|
|
Si P7=0 alors |
Sw |
21 |
|
|
|
|
|
|
|
P3 en sortie=0 |
|
|
|
Autres P en entrée: à lire successivement |
|
Si P0=0 alors |
Sw |
22 |
|
|
Si P1=0 alors |
Sw |
23 |
|
|
Si P2=0 alors |
Sw |
24 |
|
|
Si P4=0 alors |
Sw |
25 |
|
|
Si P5=0 alors |
Sw |
26 |
|
|
Si P6=0 alors |
Sw |
27 |
|
|
Si P7=0 alors |
Sw |
28 |
|
|
|
|
|
|
|
P4 en sortie=0 |
|
|
|
Autres P en entrée: à lire successivement |
|
Si P0=0 alors |
Sw |
29 |
|
|
Si P1=0 alors |
Sw |
30 |
|
|
Si P2=0 alors |
Sw |
31 |
|
|
Si P3=0 alors |
Sw |
32 |
|
|
Si P5=0 alors |
Sw |
33 |
|
|
Si P6=0 alors |
Sw |
34 |
|
|
Si P7=0 alors |
Sw |
35 |
|
|
|
|
|
|
|
P5 en sortie=0 |
|
|
|
Autres P en entrée: à lire successivement |
|
Si P0=0 alors |
Sw |
36 |
|
|
Si P1=0 alors |
Sw |
37 |
|
|
Si P2=0 alors |
Sw |
38 |
|
|
Si P3=0 alors |
Sw |
39 |
|
|
Si P4=0 alors |
Sw |
40 |
|
|
Si P6=0 alors |
Sw |
41 |
|
|
Si P7=0 alors |
Sw |
42 |
|
|
|
|
|
|
|
P6 en sortie=0 |
|
|
|
Autres P en entrée: à lire successivement |
|
Si P0=0 alors |
Sw |
43 |
|
|
Si P1=0 alors |
Sw |
44 |
|
|
Si P2=0 alors |
Sw |
45 |
|
|
Si P3=0 alors |
Sw |
46 |
|
|
Si P4=0 alors |
Sw |
47 |
|
|
Si P5=0 alors |
Sw |
48 |
|
|
Si P7=0 alors |
Sw |
49 |
|
|
|
|
|
|
|
P7 en sortie=0 |
|
|
|
Autres P en entrée: à lire successivement |
|
Si P0=0 alors |
Sw |
50 |
|
|
Si P1=0 alors |
Sw |
51 |
|
|
Si P2=0 alors |
Sw |
52 |
|
|
Si P3=0 alors |
Sw |
53 |
|
|
Si P4=0 alors |
Sw |
54 |
|
|
Si P5=0 alors |
Sw |
55 |
|
|
Si P6=0 alors |
Sw |
56 |
| |
Clavier matricé type « polyphonique » - Adjonction de diodes
A noter que les matrices vues ci-avant et leur routine de décodage ne permettent pas d’activer plusieurs touches simultanément sans induire des erreurs de lecture.
Ce qui suit va donc vous intéresser …
L’appellation « polyphonique » provient des claviers d’orgue qui permettent l’activation simultanée de plusieurs touches pour, par exemple, jouer un accord composé de plusieurs notes différentes en même temps.
Dans un clavier musical, les touches sont agencées en matrice de type carrée 8x8 mais dont chaque contact électrique simple est établi au travers d’une diode qui évite les « retours » électriques
des autres touches qui seraient également pressées simultanément.
Principe d'un clavier d'orgue musical
Avec le principe de lecture d'une matrice triangulaire à diodes, simple ou étendue, le µC va utiliser chaque port tantôt en lecture, tantôt en écriture.
Il sera donc nécessaire (si on veut qu'il soit possible d'activer simultanément plusieurs touches) d'utiliser deux diodes par switch.
Le schéma devient alors celui-ci:
! L'option "polyphonie" que nous venons de voir ici ne pourra plus être appliquée aux matrices dites "doubles" que nous allons étudier ci-dessous !
Clavier à Matrice triangulaire à diodes, double (84 touches pour 8 pins i/o)
Mais il est encore possible d'aller plus loin dans le matricage !
Voici une configuration qui, combinée à la programmation du µC, va permettre de gérer pas moins de 84 touches; et toujours pour seulement 8 pins i/o utilisés !!!
Afin de ne pas surcharger le schéma, les poussoirs ne sont pas dessinés cablés. Evidemment, ils doivent tous être connectés comme l'est Sw1.
Méthode de balayage de la matrice :
Mettre P0 à 0
Mettre P1..P7 en entrée
Lire P1..P7
Si un port en lecture retourne un 0, alors mettre ce port en sortie à 0 et changer P0 en entrée.
Si P0 est à 0 alors c'est la touche qui n'est pas sur la ligne avec diode qui est active
Si P0 est à 1 alors c'est la touche qui est sur la ligne avec diode qui est active
Exemple :
Si durant le balayage, on lit P1 = 0, (soit la touche 14, soit la touche 21 est active) alors on met P1 en sortie à 0, et P0 en entrée.
Si on lit P0 à 0 alors c'est la touche 14 qui est active
Si on lit P0 à 1 alors c'est la touche 21 qui est active
Continuez ainsi de suite en mettant à tour de rôle P2 à P7 à 0.
Algorithme complet
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Switches possibles |
|
IF … Then |
|
Else |
|
|
P0 en sortie=0 |
Autres P à lire successivement |
|
|
|
|
|
|
|
Si P1=0 |
14 |
ou |
21 |
mettre P1 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
14 |
sinon |
21 |
|
|
Si P2=0 |
12 |
ou |
20 |
mettre P2 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
12 |
sinon |
20 |
|
|
Si P3=0 |
10 |
ou |
19 |
mettre P3 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
10 |
sinon |
19 |
|
|
Si P4=0 |
8 |
ou |
18 |
mettre P4 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
8 |
sinon |
18 |
|
|
Si P5=0 |
6 |
ou |
17 |
mettre P5 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
6 |
sinon |
17 |
|
|
Si P6=0 |
4 |
ou |
16 |
mettre P6 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
4 |
sinon |
16 |
|
|
Si P7=0 |
2 |
ou |
15 |
mettre P7 en sortie=0 |
mettre P0 en entrée |
Si P0 =0 alors |
2 |
sinon |
15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
P1 en sortie=0 |
Autres P à lire successivement |
|
|
|
|
|
|
|
Si P0=0 |
14 |
ou |
13 |
mettre P0 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
14 |
sinon |
13 |
|
|
Si P2=0 |
33 |
ou |
39 |
mettre P2 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
33 |
sinon |
39 |
|
|
Si P3=0 |
31 |
ou |
38 |
mettre P3 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
31 |
sinon |
38 |
|
|
Si P4=0 |
29 |
ou |
37 |
mettre P4 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
29 |
sinon |
37 |
|
|
Si P5=0 |
27 |
ou |
36 |
mettre P5 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
27 |
sinon |
36 |
|
|
Si P6=0 |
25 |
ou |
35 |
mettre P6 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
25 |
sinon |
35 |
|
|
Si P7=0 |
23 |
ou |
34 |
mettre P7 en sortie=0 |
mettre P1 en entrée |
Si P1 =0 alors |
23 |
sinon |
34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
P2 en sortie=0 |
Autres P à lire successivement |
|
|
|
|
|
|
|
Si P0=0 |
12 |
ou |
11 |
mettre P0 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
12 |
sinon |
11 |
|
|
Si P1=0 |
33 |
ou |
32 |
mettre P1 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
33 |
sinon |
32 |
|
|
Si P3=0 |
49 |
ou |
54 |
mettre P3 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
49 |
sinon |
54 |
|
|
Si P4=0 |
47 |
ou |
53 |
mettre P4 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
47 |
sinon |
53 |
|
|
Si P5=0 |
45 |
ou |
52 |
mettre P5 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
45 |
sinon |
52 |
|
|
Si P6=0 |
43 |
ou |
51 |
mettre P6 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
43 |
sinon |
51 |
|
|
Si P7=0 |
41 |
ou |
50 |
mettre P7 en sortie=0 |
mettre P2 en entrée |
Si P2 =0 alors |
41 |
sinon |
50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
P3 en sortie=0 |
Autres P à lire successivement |
|
|
|
|
|
|
|
Si P0=0 |
10 |
ou |
9 |
mettre P0 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
10 |
sinon |
9 |
|
|
Si P1=0 |
31 |
ou |
30 |
mettre P1 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
31 |
sinon |
30 |
|
|
Si P2=0 |
49 |
ou |
48 |
mettre P2 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
49 |
sinon |
48 |
|
|
Si P4=0 |
62 |
ou |
66 |
mettre P4 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
62 |
sinon |
66 |
|
|
Si P5=0 |
60 |
ou |
65 |
mettre P5 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
60 |
sinon |
65 |
|
|
Si P6=0 |
58 |
ou |
64 |
mettre P6 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
58 |
sinon |
64 |
|
|
Si P7=0 |
56 |
ou |
63 |
mettre P7 en sortie=0 |
mettre P3 en entrée |
Si P3 =0 alors |
56 |
sinon |
63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
P4 en sortie=0 |
Autres P à lire successivement |
|
|
|
|
|
|
|
Si P0=0 |
8 |
ou |
7 |
mettre P0 en sortie=0 |
mettre P4 en entrée |
Si P4 =0 alors |
8 |
sinon |
7 |
|
|
Si P1=0 |
29 |
ou |
28 |
mettre P1 en sortie=0 |
mettre P4 en entrée |
Si P4 =0 alors |
29 |
sinon |
28 |
|
|
Si P2=0 |
47 |
ou |
46 |
mettre P2 en sortie=0 |
mettre P4 en entrée |
Si P4 =0 alors |
47 |
sinon |
46 |
|
|
Si P3=0 |
62 |
ou |
61 |
mettre P3 en sortie=0 |
mettre P4 en entrée |
Si P4 =0 alors |
62 |
sinon |
61 |
|
|
Si P5=0 |
72 |
ou |
75 |
mettre P5 en sortie=0 |
mettre P4 en entrée |
Si P4 =0 alors |
72 |
sinon |
75 |
|
|
Si P6=0 |
70 |
ou |
74 |
mettre P6 en sortie=0 |
mettre P4 en entrée |
Si P4 =0 alors |
70 |
sinon |
74 |
|
|
Si P7=0 |
68 |
ou |
73 |
mettre P7 en sortie=0 |
mettre P4 en entrée |
Si P4 =0 alors |
68 |
sinon |
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
P5 en sortie=0 |
Autres P à lire successivement |
|
|
|
|
|
|
|
Si P0=0 |
6 |
ou |
5 |
mettre P0 en sortie=0 |
mettre P5 en entrée |
Si P5 =0 alors |
6 |
sinon |
5 |
|
|
Si P1=0 |
27 |
ou |
26 |
mettre P1 en sortie=0 |
mettre P5 en entrée |
Si P5 =0 alors |
27 |
sinon |
26 |
|
|
Si P2=0 |
45 |
ou |
44 |
mettre P2 en sortie=0 |
mettre P5 en entrée |
Si P5 =0 alors |
45 |
sinon |
44 |
|
|
Si P3=0 |
60 |
ou |
59 |
mettre P3 en sortie=0 |
mettre P5 en entrée |
Si P5 =0 alors |
60 |
sinon |
59 |
|
|
Si P4=0 |
72 |
ou |
71 |
mettre P4 en sortie=0 |
mettre P5 en entrée |
Si P5 =0 alors |
72 |
sinon |
71 |
|
|
Si P6=0 |
79 |
ou |
81 |
mettre P6 en sortie=0 |
mettre P5 en entrée |
Si P5 =0 alors |
79 |
sinon |
81 |
|
|
Si P7=0 |
77 |
ou |
80 |
mettre P7 en sortie=0 |
mettre P5 en entrée |
Si P5 =0 alors |
77 |
sinon |
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
P6 en sortie=0 |
Autres P à lire successivement |
|
|
|
|
|
|
|
Si P0=0 |
4 |
ou |
3 |
mettre P0 en sortie=0 |
mettre P6 en entrée |
Si P6 =0 alors |
4 |
sinon |
3 |
|
|
Si P1=0 |
25 |
ou |
24 |
mettre P1 en sortie=0 |
mettre P6 en entrée |
Si P6 =0 alors |
25 |
sinon |
24 |
|
|
Si P2=0 |
43 |
ou |
42 |
mettre P2 en sortie=0 |
mettre P6 en entrée |
Si P6 =0 alors |
43 |
sinon |
42 |
|
|
Si P3=0 |
58 |
ou |
57 |
mettre P3 en sortie=0 |
mettre P6 en entrée |
Si P6 =0 alors |
58 |
sinon |
57 |
|
|
Si P4=0 |
70 |
ou |
69 |
mettre P4 en sortie=0 |
mettre P6 en entrée |
Si P6 =0 alors |
70 |
sinon |
69 |
|
|
Si P5=0 |
79 |
ou |
78 |
mettre P5 en sortie=0 |
mettre P6 en entrée |
Si P6 =0 alors |
79 |
sinon |
78 |
|
|
Si P7=0 |
83 |
ou |
84 |
mettre P7 en sortie=0 |
mettre P6 en entrée |
Si P6 =0 alors |
83 |
sinon |
84 |
|
|
|
|
|
|
|
|
|
|
|
|
|
P7 en sortie=0 |
Autres P à lire successivement |
|
|
|
|
|
|
|
Si P0=0 |
2 |
ou |
1 |
mettre P0 en sortie=0 |
mettre P7 en entrée |
Si P7 =0 alors |
2 |
sinon |
1 |
|
|
Si P1=0 |
23 |
ou |
22 |
mettre P1 en sortie=0 |
mettre P7 en entrée |
Si P7 =0 alors |
23 |
sinon |
22 |
|
|
Si P2=0 |
41 |
ou |
40 |
mettre P2 en sortie=0 |
mettre P7 en entrée |
Si P7 =0 alors |
41 |
sinon |
40 |
|
|
Si P3=0 |
56 |
ou |
55 |
mettre P3 en sortie=0 |
mettre P7 en entrée |
Si P7 =0 alors |
56 |
sinon |
55 |
|
|
Si P4=0 |
68 |
ou |
67 |
mettre P4 en sortie=0 |
mettre P7 en entrée |
Si P7 =0 alors |
68 |
sinon |
67 |
|
|
Si P5=0 |
77 |
ou |
76 |
mettre P5 en sortie=0 |
mettre P7 en entrée |
Si P7 =0 alors |
77 |
sinon |
76 |
|
|
Si P6=0 |
83 |
ou |
82 |
mettre P6 en sortie=0 |
mettre P7 en entrée |
Si P7 =0 alors |
83 |
sinon |
82 | |
Par le fait que les matrices dites "doubles" utilisent, sur les ports dédoublés, une diode qui n'autorise la lecture de ce port que dans un seul sens lors de la permutation des entrées/sorties, nous ne pourrons plus placer les diodes additionnelles qui permettaient la "polyphonie".
Les matrices à diodes dites "doubles" ne peuvent donc bénéficier de cette option "polyphonique" !
Clavier à Matrice triangulaire à diodes, double étendue
(112 touches pour 8 pins i/o)
Si on redessine la matrice triangulaire à diodes, double, sous forme linéaire et que, comme pour la matrice triangulaire étendue on réalise des cellules comptant le même nombre d'éléments,
on obtient une matrice triangulaire à diodes double étendue capable de gérer 112 switches !
L'algorithme sera conforme à celui présenté pour la matrice triangulaire double mais adapté pour les switches supplémentaires.
Tableau récapitulatif de la capacité des matrices à diodes, carrées et triangulaires pour claviers
|
|
"Polyphonique" |
|
Nombre de Bits: |
|
|
|
|
8 |
7 |
6 |
5 |
4 |
3 |
2 |
|
carrée simple |
X |
(b/2)^2 |
16 |
--- |
9 |
--- |
4 |
--- |
1 |
|
carrée double |
non |
2*((b/2)^2) |
32 |
--- |
18 |
--- |
8 |
--- |
2 |
|
Rectangulaire simple 4x3 |
X |
L*C |
--- |
12 |
--- |
--- |
--- |
--- |
--- |
|
Rectangulaire simple 3x2 |
X |
L*C |
--- |
--- |
--- |
6 |
--- |
--- |
--- |
|
Rectangulaire simple 2x1 |
X |
L*C |
--- |
--- |
--- |
--- |
--- |
2 |
--- |
|
Rectangulaire double 4x3 |
non |
2*L*C |
--- |
24 |
--- |
--- |
--- |
--- |
--- |
|
Rectangulaire double 3x2 |
non |
2*L*C |
--- |
--- |
--- |
12 |
--- |
--- |
--- |
|
Rectangulaire double 2x1 |
non |
2*L*C |
--- |
--- |
--- |
--- |
--- |
4 |
--- |
|
Triangulaire simple |
X |
b/2*(b-1) |
28 |
21 |
15 |
10 |
6 |
3 |
1 |
|
Triangulaire simple étendue |
X |
b*(b-1) |
56 |
42 |
30 |
20 |
12 |
6 |
2 |
|
Triangulaire double |
non |
|
84 |
63 |
45 |
30 |
18 |
9 |
3 |
|
Triangulaire double étendue |
non |
2b*(b-1) |
112 |
84 |
60 |
40 |
24 |
12 |
4 |
|
|
|
|
Nombre de switches gérés |
L: nombre de Lignes d'une Matrice Rectangulaire
C: nombre de Colonnes d'une Matrice Rectangulaire
b: nombre de Bits utilisés pour la Matrice
Trafic Visiteurs:
[ Retour de Page ]