Table des matières:

Comment lire de nombreux commutateurs avec une seule broche MCU : 4 étapes
Comment lire de nombreux commutateurs avec une seule broche MCU : 4 étapes

Vidéo: Comment lire de nombreux commutateurs avec une seule broche MCU : 4 étapes

Vidéo: Comment lire de nombreux commutateurs avec une seule broche MCU : 4 étapes
Vidéo: Initiation aux Microprocesseurs / Microcontrôleurs / FPGA -Architectures, Fonctionnement, Couscous 2024, Novembre
Anonim
Comment lire de nombreux commutateurs avec une seule broche MCU
Comment lire de nombreux commutateurs avec une seule broche MCU

Avez-vous déjà bredouillé un ou plusieurs projets et le projet ne cesse de grandir, tandis que vous y ajoutez plus de choses (nous appelons cela un Feaping Creaturism) ? Sur un projet récent, je construisais un fréquencemètre et ajoutais un générateur de signaux/synthétiseur de fréquence à cinq fonctions. Je me suis vite retrouvé avec plus de commutateurs qu'il ne me restait de broches disponibles, alors qu'est-ce qu'un gars doit faire ?

Cependant, j'ai bientôt eu sept autres commutateurs sur ma Funbox (oui, c'est ce que j'ai appelé mon générateur de fonctions… je sais, je n'ai aucune créativité) et voici un court instructable vous montrant comment vous pouvez faire la même chose. Il ne nécessite aucun registre à décalage ou circuit intégré spécifique. En fait, il ne nécessite pas non plus de microcontrôleur si vous utilisez des semi-conducteurs discrets. Voici une façon de lire/gérer plusieurs commutateurs à l'aide d'une seule broche sur votre AVR (ou un autre microcontrôleur… J'ai entendu dire qu'il existe d'autres microcontrôleurs que celui de l'AVR, mais je ne peux pas imaginer…).:)

Étape 1: L'essentiel (pas vraiment)

Pour ce faire, vous aurez besoin de quelques composants. Il est utile d'avoir une multitude de commutateurs que vous devez gérer. Vous aurez également besoin de résistances et d'un microcontrôleur doté d'un ADC (conversion analogique-numérique) ou d'un autre moyen pour indiquer qu'un interrupteur était activé et de quel interrupteur il s'agissait.

Si vous le souhaitez, vous pouvez utiliser un oscillateur contrôlé en tension pour l'indiquer, peut-être avec des lumières clignotantes, ou alternativement, avec du son. Dans cette 'ible, je vais prétendre que nous utilisons un AVR, mais dans votre monde, vous pouvez prétendre tout ce qui vous rend heureux. Bob Ross me manque.

Étape 2: Le diviseur de tension

Le diviseur de tension
Le diviseur de tension
Le diviseur de tension
Le diviseur de tension

Essentiellement, la façon dont nous allons procéder consiste à utiliser une technique et un circuit appelés diviseur de tension. Comme vous l'avez peut-être deviné, les diviseurs de tension divisent la tension V,, in,, par une valeur que vous déterminez. Vous pouvez diviser la tension avec plusieurs composants, y compris des condensateurs et des inductances, mais ici, je vais le faire avec la bonne résistance. L'idée Ce que nous faisons, c'est mettre deux composants en série qui provoqueront, chacun individuellement, une chute de tension aux bornes du composant. Regardez la première photo si je ne comprends pas. Il y a une différence de potentiel de 9V d'un rail à l'autre. Entre 9V et 0V il y a deux résistances en série. Chacun d'eux subira une chute de tension sur lui-même, en fonction de la résistance, comme vous vous en souvenez probablement de V = IR. Si vous prenez une mesure de tension entre les deux résistances, vous obtiendrez une valeur comprise entre 9V et 0V, en fonction de la chute de tension sur la première résistance et de la chute restante sur la 2ème résistance, avant 0V. Il existe une formule simple pour calculer la chute de tension aux bornes d'une résistance dans cette situation et cela ressemble à ceci. Que la tension sur la résistance 1 (R1) soit V1 et la tension sur la résistance deux (R2) soit V2. Comme je ne peux plus utiliser le formatage, regardez l'image 2 ci-dessous pour la formule… Ainsi, dans notre diviseur résistif, la tension Vout peut être déterminée par notre formule pour V2 (puisque nous ferons référence à GND à 0V). Qu'est-ce que cela a à voir avec la détection d'un tas de commutateurs à partir d'une seule broche ? Eh bien, tournez la page et je vais vous montrer !

Étape 3: Échelle de diviseur de tension

Échelle de diviseur de tension
Échelle de diviseur de tension

Supposons maintenant que nous ayons tous nos commutateurs, peut-être six, huit ou seize, tous connectés via des résistances qui agissent chacune comme un diviseur de tension de sorte que lorsque l'état de la broche du commutateur change, la tension est lue et basée sur le niveau de tension, nous peut savoir quel interrupteur vient d'être activé. Regardez ci-dessous. Dans l'image ci-dessous, j'ai connecté deux blocs de commutateurs. Le bloc le plus haut a deux interrupteurs et le bloc le plus bas a cinq interrupteurs. Vous pouvez connecter vos interrupteurs à bascule, momentanés, tactiles, etc. séparés de la même manière. La chose importante à noter est la résistance à laquelle votre commutateur est connecté. Dans mon exemple, j'ai presque doublé la résistance de la résistance suivante pour créer un écart de tension facile à mesurer et à ne pas confondre avec le commutateur avant ou après. Si vous ne l'avez pas remarqué auparavant, regardez à nouveau et réalisez que nous sommes de retour chez notre vieil ami le diviseur de tension résistif. La première résistance, la 10k ohm, est connectée à 5V et la 2ème résistance -- la résistance qui déterminera Vdehors pour la broche SWITCH_ADC, est connecté à chaque commutateur et, par conséquent, chaque commutateur est associé à une tension Vout particulière qui peut être lue à partir de la broche ADC connectée à SWITCH_ADC. Ensuite, déterminez le Vout attendu de chaque commutateur comme ceci

Vout = Vin * (R2 / (R1 + R2))

pour le commutateur un:

Vout = 5V * (500 / (10000 + 500)) = 5*0.048 = 0.24V ou 240 mV

pour le commutateur deux:

Vout = 5V * (2200 / (10000 + 2200)) = 5 * 0,18 = 0,9V ou ~900mV

et ainsi de suite.. N'hésitez pas à substituer vos propres valeurs à R2 si vous n'avez que certaines résistances à portée de main… L'essentiel ici est de garder un écart de tension suffisamment large entre les commutateurs afin que toute marge d'erreur sur l'ADC ne soit pas ' t vous mettre dans la tension attendue d'un interrupteur voisin. J'ai trouvé que la chose la plus simple à faire est de construire l'échelle de séparation et de mettre un multimètre/voltmètre sur la broche ADC et d'appuyer sur chaque broche et de voir quelles valeurs vous obtenez. Ils devraient être assez précis par rapport à ce que vous calculez. Une fois que vous avez toutes les valeurs de tension attendues de chaque commutateur à l'aide d'une résistance particulière, vous pouvez alors demander à votre MCU de lire la broche ADC et de la comparer à vos valeurs connues pour déterminer quel commutateur a été enfoncé. Par exemple, supposons que vous ayez enregistré une routine de service d'interruption qui sera appelée chaque fois qu'un changement est détecté sur la broche ADC. À l'intérieur de cet ISR, vous pouvez lire l'ADC et comparer cette valeur à votre table de commutation. Si vous utilisez une valeur ADC de 8 bits, votre tension sera convertie en un nombre compris entre 0 et 255 qui correspond à une tension comprise entre 0V et 5V. Cela suppose que votre ADC est configuré de cette façon.

Étape 4: Résumé

Donc, maintenant, vous devez savoir comment être économe en utilisant des broches GPIO pour les commutateurs. Chaque fois que vous manquez de broches GPIO, ou que vous n'en avez pratiquement pas pour commencer, ou si vous réalisez que vous allez utiliser une banque de commutateurs, le diviseur résistif est la solution pour sauvegarder vos broches GPIO tout en fournissant un mécanisme robuste pour détecter l'accès au commutateur.

Conseillé: