Concevoir avec la logique d'opérateurs de niveau bit
Exploiter la puissance des signaux numériques et du matériel numérique
Les informations qui suivent visent à présenter la logique de niveau bit AND (&) et à clarifier les concepts présentés dans l'article Plaidoyer pour la manipulation directe des ports. Cet exemple montre le fonctionnement d'un slider de caméra entraîné par un moteur pas-à-pas avec plusieurs boutons et un contrôle par potentiomètre. Le microcontrôleur choisi dispose d'un nombre limité d'E/S réparties sur de nombreux ports, ce qui est géré en assemblant les E/S en valeurs numériques uniques.
Présentation
L'évaluation des entrées de commutation dans le logiciel commence souvent avec des instructions conditionnelles utiles (if/then). Cela peut tout à fait convenir à une seule entrée autonome, mais pas vraiment à plusieurs entrées interactives. La prise en charge de toutes les combinaisons de pressions sur les boutons avec des instructions if/then pourrait générer des centaines de lignes de code et une multitude d'exécutions à chaque cycle. L'implémentation de la logique de niveau bit réduit le code et augmente la vitesse de cycle.
Paramètres du projet
Le projet de slider de caméra implique cinq commutateurs SPST à contact momentané pour sélectionner la direction et la vitesse dans le fonctionnement du moteur d'entraînement du slider. L'entrée est convertie en sortie SPEED/ENABLE/DIRECTION. Les pressions sur les commutateurs sont verrouillées dans le logiciel avec une discrimination des pressions multiples sur les commutateurs.
Opérateur de niveau bit AND
Le principal opérateur de niveau bit utilisé pour le slider de caméra est AND, qui utilise le symbole de l'esperluette (&) en programmation C ainsi que la table de vérité présentée à la Figure 1.
Figure 1 : Table de vérité et exemple de l'opérateur de niveau bit AND. (Source de l'image : Don Johanneck)
Combinaison E/S
Pour créer une valeur unique qui représente tous les commutateurs, les bits sont décalés à l'endroit souhaité, additionnés et comparés à l'aide de l'opérateur AND (voir Figure 2). Une autre valeur représentant l'état actuel des capteurs de limite est comparée à la valeur de la pression sur le commutateur pour annuler la sortie si une limite est atteinte.
Figure 2 : Configuration des commutateurs du slider de caméra, compilation de bits et utilisation de l'opérateur AND. (Source de l'image : Don Johanneck)
Dans ce scénario, si on appuie sur un bouton ou sur une combinaison de boutons, la valeur buttonValues n'est pas égale à zéro et une action est entreprise dans le logiciel avec la valeur limitValue et des tables de correspondance afin de déterminer la sortie exactement de la même manière que celle décrite dans l'article Plaidoyer pour la manipulation directe des ports mentionné précédemment.
Programmation
Le programme utilise une table de valeurs de sortie indexées par la valeur d'entrée traitée. Le programmeur peut déterminer l'action découlant de n'importe quelle combinaison de pressions sur les boutons en modifiant les valeurs de la table, éliminant ainsi la nécessité de modifier la structure du programme (ce qui peut être intimidant). Les valeurs de la table à la Figure 3 pour cet exemple représentent des actions pour un seul bouton, plusieurs boutons et des boutons opposés sans aucune instruction IF (Figure 4).
Figure 3 : Table des valeurs de sortie uniques indexées par la valeur d'entrée.
Figure 4 : Code principal ; lecture des valeurs et détermination de la sortie.
La commande moteur se fait à l'aide d'une routine de service d'interruption de temporisation qui détermine la fréquence des pas ainsi qu'une méthode « d'évitement » qui facilite le contrôle de la vitesse en activant la broche STEP de la carte de commande du moteur uniquement lorsque la variable stepGo est égale ou supérieure à la variable stepFreq (Figure 5). Avec des valeurs de potentiomètre inférieures, cette routine saute plus de pas.
Figure 5 : Routine de service d'interruption de la commande moteur.
Conclusion
L'utilisation d'opérateurs de niveau bit comme AND (&) simplifie le code et réduit considérablement le nombre d'instructions IF nécessaires pour analyser les entrées numériques. L'élaboration de la table de sortie est simple et flexible. L'utilisation d'un plus grand nombre de bits de sortie étend rapidement la table et fournit plus d'options de sortie. Chaque bit de sortie supplémentaire requiert un ou plusieurs gestionnaires supplémentaires dans le code principal. Une fois établie, la table est utilisée une seule fois par cycle, tandis que le code principal se charge des tâches lourdes. La routine de service d'interruption fonctionne en continu en arrière-plan, en mettant à jour la broche STEP du contrôleur moteur, mais aucun mouvement ne se produit tant que le code principal n'a pas activé la broche d'activation (ENN) du contrôleur moteur.

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum