Pour les LED , la manière évidente de le faire est d'avoir une sortie pour chaque ligne et chaque colonne de l'échiquier: un total de 8 + 8 = 16 broches. Les anodes seraient connectées aux fils de ligne et les cathodes au fil de colonne. Pour la LED que vous souhaitez allumer, vous devez rendre son fil d'anode positif (logique 1) et son fil de cathode négatif (logique 0), tout en maintenant les autres à l'état inverse (de sorte que les LED restantes ont une polarisation neutre ou inverse.)
Je fais l'hypothèse ici que le microcontrôleur fournit des tensions suffisamment élevées / basses pour que vous puissiez ponter une LED de l'une à l'autre. Si ce n'est pas le cas, vous aurez besoin d'un transistor ou d'un tampon pour chaque ligne. Avec une alimentation de 5 V, c'est serré, compte tenu du fait que la LED chute d'environ 2 V et que vous voulez une chute de tension raisonnable sur votre résistance de limitation de courant (notez que vous devez seulement les installer dans les lignes de ligne ou les lignes de colonne, pas les deux).
Si vos sorties sont à trois états (c'est-à-dire, en plus de la logique 0 et de la logique 1, elles peuvent être réglées sur un état de haute impédance, peut-être en les configurant temporairement comme entrées), alors vous pouvez devenir intelligent et utiliser une grille 4x8, avec des LED connectés en paires antiparallèles. Il est important de régler les sorties inutilisées à haute impédance dans cette configuration, sinon les LED indésirables s'allumeront.
Dans les deux cas, vous devrez penser au tirage actuel et s'il est acceptable de risquer la possibilité d'une erreur logicielle allumant toutes les LED à la fois (ce qui, s'il n'est pas pris en compte, pourrait surintégrer cette ligne de ligne du microcontrôleur). .)
Le cas des capteurs est plus compliqué. Je vais supposer que vous utilisez des capteurs résistifs, bien que les phototransistors ne soient pas nécessairement garantis pour conduire dans une seule direction.
Vous pouvez utiliser les mêmes sorties à 8 lignes que vous utilisez pour allumer vos LED, mais vous aurez besoin de 8 entrées à colonnes dédiées à la détection. Vous aurez sans doute vu des circuits pour claviers comme celui-ci. Gardez à l'esprit que ceux-ci ne sont conçus que pour appuyer sur une touche à la fois . Si l'utilisateur appuie simultanément sur 1, 3, 7 et 9, le clavier n'est pas en mesure de détecter si l'utilisateur relâche l'une de ces quatre touches car il existe toujours un chemin actuel à travers les trois autres commutateurs.
Une solution utilisée sur les claviers musicaux (qui sont conçus pour avoir plus d'un élément de la matrice conductrice à la fois) est d'avoir une diode en série avec chaque interrupteur.
Une autre solution serait d'acheter quatre circuits intégrés de décodeur 4 à 16 avec des sorties à collecteur ouvert (ou un drain ouvert si vous utilisez des circuits intégrés MOSFET) tels que celui-ci: http://www.unicornelectronics.com/ftp/Data%20Sheets/74159.pdf Le collecteur ouvert signifie que les sorties du CI ne feront que absorber le courant, pas le source. Ainsi, vous pouvez connecter 16 capteurs à 16 sorties de la puce et mettre en commun les autres extrémités avec une résistance de rappel (vous connecteriez également votre ADC ici). Vous apportez une sortie basse (conductrice) et les 15 autres restent hautes (non conductrices). Cela contraste avec la sortie logique standard, où les 15 autres sorties versent du courant dans le point commun.
L'entrée de ces circuits intégrés est binaire 4 bits pour sélectionner l'une des 16 sorties, mais elles ont également une entrée supplémentaire pour activer / désactiver la puce. Ainsi, vous pourriez potentiellement avoir un ensemble de 64 éviers à collecteur ouvert, connectés à 64 capteurs, les autres extrémités des capteurs étant toutes communes à une seule résistance de rappel et un convertisseur analogique-numérique. Pour cela, vous aurez besoin d'un total de 8 sorties sur votre microcontrôleur: quatre pour prendre les signaux de sélection 4 à 16 (communs aux quatre puces) et quatre pour prendre les signaux d'activation (un pour chaque puce).
EDIT: 3 à 8 décodeurs (également appelés 1 de 8 = 1 ligne sur 8) semblent être plus disponibles que 4 à 16, mais 8 CI sont beaucoup plus compliqués que 4. Un autre type de CI qui pourrait être utile est le compteur octal (et son cousin le plus courant, le compteur de décades , qui peut être configuré comme un compteur octal en connectant sa neuvième sortie à la ligne de réinitialisation.) Ceux-ci nécessitent une impulsion série pour avancer d'une sortie à la suivante, donc il en faudrait moins Broches d'E / S sur le microcontrôleur que les circuits intégrés du décodeur. Ils ont généralement des entrées supplémentaires pour la réinitialisation et l'activation. Il existe également des IC appelés registres à décalage , qui sont disponibles en deux types: l'un pour convertir des séries en parallèle, l'autre pour convertir des séries en parallèle. Enfin, il existetampons , que vous pouvez mettre entre votre Rasberry Pi et votre échiquier afin que le Pi ne soit pas détruit en cas de surintensité. Tous ces éléments peuvent être utiles dans les circuits de multiplexage.