Publicité

programmation ArduinoAujourd'hui, je vais essayer de vous en dire un peu plus sur les registres à décalage. Ce sont des éléments assez importants de la programmation Arduino, essentiellement parce qu'ils augmentent le nombre de sorties que vous pouvez utiliser, en échange de seulement 3 broches de contrôle. Vous pouvez également connecter des registres à décalage en guirlande afin d'obtenir encore plus de sorties.

Cependant, il s'agit d'un saut de difficulté considérable par rapport aux didacticiels précédents, et je vous suggère fortement très bonne compréhension du matériel précédent (liens à la fin de cet article), ainsi que compréhension la bases du binaire Qu'est-ce que le binaire? [La technologie expliquée]Étant donné que le binaire est si fondamental pour l'existence des ordinateurs, il semble étrange que nous n'ayons jamais abordé le sujet auparavant - alors aujourd'hui, je pensais que je donnerais un bref aperçu de ce que le binaire ... Lire la suite que j'ai écrit la dernière fois.

Qu'est-ce qu'un registre à décalage?

instagram viewer

Un registre à décalage de sortie, techniquement parlant, reçoit les données en série et les sort en parallèle. En termes pratiques, cela signifie que nous pouvons envoyer rapidement un tas de commandes de sortie à la puce, lui dire de s'activer, et les sorties seront envoyées aux broches pertinentes. Au lieu d'itérer sur chaque broche, nous envoyons simplement la sortie requise à toutes les broches à la fois, sous la forme d'un seul octet ou plus d'informations.

Si cela vous aide à comprendre, vous pouvez considérer un registre à décalage comme un «réseau» de sorties numériques, mais nous pouvons ignorer les commandes digitalWrite habituelles et simplement envoyer une série de bits pour les activer ou de.

Comment ça marche?

Le registre à décalage que nous utiliserons - le 74HC595N inclus dans le kit de démarrage Oomlout - n'a besoin que de 3 broches de contrôle. La première est une horloge - vous n'avez pas à vous en soucier trop car le contrôle des bibliothèques série Arduino - mais une horloge est fondamentalement juste une impulsion électrique marche / arrêt qui définit le rythme du signal de données.

La goupille de verrouillage est utilisée pour indiquer au registre à décalage quand il doit activer et désactiver ses sorties en fonction des bits que nous venons de lui envoyer - c'est-à-dire les verrouiller en place.

Enfin, la broche de données est l'endroit où nous avons envoyé les données série réelles avec les bits pour déterminer l'état d'activation / désactivation des sorties du registre à décalage.

L'ensemble du processus peut être décrit en 4 étapes:

  1. Réglez la broche de données sur haut ou bas pour la première broche de sortie sur le registre à décalage.
  2. Pulse l'horloge pour «décaler» les données dans le registre.
  3. Continuez à définir les données et à pulser l'horloge jusqu'à ce que vous ayez défini l'état requis pour toutes les broches de sortie.
  4. Appuyez sur la goupille de verrouillage pour activer la séquence de sortie.

la mise en oeuvre

Vous avez besoin des composants suivants pour ce projet:

  • Puce de registre à décalage 7HC595N
  • 8 LED et résistances appropriées, ou tout ce que vous voulez sortir
  • La planche à pain habituelle, les connecteurs et un Arduino de base

Si vous avez le kit de démarrage Oomlout, vous pouvez télécharger la disposition de la maquette ici.

Voici la vidéo d'assemblage:

La disposition du tableau:

programmation Arduino

Et ma version assemblée:

Programmation Arduino - Jouer avec les registres à décalage (alias encore plus de LED) tutoriel sur le registre à décalage assemblé

J'ai modifié le code d'origine fourni par Ooolmout, mais si vous souhaitez l'essayer à la place, il peut être téléchargé dans son intégralité ici. Une explication du code est incluse, alors copiez et collez le tout par le bas ou coller pour lire une explication du code.

/ * * | Tutoriel sur le registre à décalage, basé sur | * | Kit d'expérimentation Arduino CIRC-05 | * |.: 8 autres LED:. (Registre à décalage 74HC595) | * * | Modifié par James @ MakeUseOf.com | * * / // Définitions des broches. // 7HC595N a trois broches. données int = 2; // où nous envoyons les bits pour contrôler les sorties int horloge = 3; // garde les données synchronisées. int latch = 4; // indique au registre à décalage quand activer la séquence de sortie void setup () {// définit les trois broches de contrôle pour sortir pinMode (data, OUTPUT); pinMode (horloge, SORTIE); pinMode (verrou, SORTIE); Serial.begin (9600); // afin que nous puissions envoyer des messages de débogage au moniteur série. } void loop () {outputBytes (); // notre sortie de base qui écrit 8 bits pour montrer comment fonctionne un registre à décalage. //outputIntegers(); // envoie une valeur entière sous forme de données au lieu d'octets, comptant efficacement en binaire. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (latch, LOW); Serial.println (i); // Débogage, envoi de la sortie au moniteur série shiftOut (données, horloge, MSBFIRST, i); digitalWrite (loquet, HIGH); retard (100); }} void outputBytes () {/ * Les octets, ou 8 bits, sont représentés par un B suivi de 8 0 ou 1s. Dans ce cas, considérez cela comme un tableau que nous utiliserons pour contrôler les 8 LED. Ici, j'ai commencé la valeur d'octet comme 00000001 * / byte dataValues ​​= B00000001; // change cela pour ajuster le motif de départ / * Dans la boucle for, nous commençons par tirer le loquet bas, en utilisant la fonction shiftOut Arduino pour parler au registre à décalage, en lui envoyant notre octet de dataValues ​​représentant l'état des LED puis tirez le loquet haut pour les verrouiller endroit. Enfin, nous décalons les bits d'un endroit vers la gauche, ce qui signifie que la prochaine itération allumera la prochaine LED de la série. Pour voir la valeur binaire exacte envoyée, vérifiez le moniteur série. * / pour (int i = 0; i <8; i ++) {digitalWrite (latch, LOW); Serial.println (dataValues, BIN); // Débogage, envoi de la sortie au moniteur série shiftOut (data, clock, MSBFIRST, dataValues); digitalWrite (loquet, HIGH); dataValues ​​= dataValues ​​<< 1; // Déplacez les bits d'une place vers la gauche - changez en >> pour ajuster le retard de direction (100); } }

Décalage de bits (fonction OutputBytes)

Dans le premier exemple de boucle - outputBytes () - le code utilise une séquence de 8 bits (un octet) qu'il décale ensuite à chaque itération de la boucle for. Il est important de noter que si vous déplacez plus loin que possible, le bit est simplement perdu.

Le décalage binaire se fait en utilisant << ou >> suivi du nombre de bits que vous souhaitez décaler.

Consultez l'exemple suivant et assurez-vous de bien comprendre ce qui se passe:

octet val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, nous avons perdu ces autres bits! val = val >> 5 // B00000010. 

Envoi de nombres entiers à la place (fonction OutputIntegers)

Si vous envoyez un nombre entier au registre à décalage au lieu d'un octet, il convertira simplement le nombre en une séquence d'octets binaires. Dans cette fonction (décommenter dans la boucle et télécharger pour voir l'effet), nous avons une boucle for qui compte de 0 à 255 (l'entier le plus élevé que nous pouvons représenter avec un octet), et l'envoie à la place. Il compte essentiellement en binaire, de sorte que la séquence peut sembler un peu aléatoire à moins que vos LED soient disposées sur une longue ligne.

Par exemple, si vous lisez l'article expliqué en binaire, vous saurez que le nombre 44 sera représenté par 00101100, donc les LED 3,5,6 vont s'allumer à ce point de la séquence.

Programmation Arduino - Jouer avec les registres à décalage (encore plus de LED) binaire 44

Connexion en guirlande de plusieurs registres à décalage

La chose remarquable à propos des registres à décalage est que s'ils reçoivent plus de 8 bits d'informations (ou quelle que soit la taille de leur registre), ils déplacent à nouveau les autres bits supplémentaires. Cela signifie que vous pouvez en connecter une série ensemble, insérer une longue chaîne de bits et la distribuer séparément à chaque registre, le tout sans codage supplémentaire de votre part.

Bien que nous ne détaillerons pas le processus ou les schémas ici, si vous avez plus d'un registre à décalage, vous pouvez essayer le projet sur le site officiel d'Arduino ici.

Autres articles de la série:

  • Qu'est-ce que l'Arduino et que pouvez-vous faire avec Qu'est-ce que l'Arduino et que pouvez-vous en faire?L'Arduino est un remarquable petit appareil électronique, mais si vous n'en avez jamais utilisé auparavant, quels sont-ils exactement et que pouvez-vous en faire? Lire la suite ?
  • Qu'est-ce qu'un kit de démarrage Arduino et que contient-il? Qu'est-ce qui est inclus dans un kit de démarrage Arduino? [MakeUseOf explique]J'ai déjà présenté le matériel open-source Arduino ici sur MakeUseOf, mais vous allez avoir besoin de plus que le véritable Arduino pour en construire quelque chose et commencer réellement. Les "kits de démarrage" Arduino sont ... Lire la suite
  • Plus de composants sympas à acheter avec votre kit de démarrage 8 composants plus cool pour vos projets ArduinoDonc, vous songez à obtenir un kit de démarrage Arduino, mais vous vous demandez si certaines LED et résistances de base suffiront à vous tenir occupé pour le week-end? Probablement pas. Voici encore 8 ... Lire la suite
  • Prise en main de votre kit de démarrage Arduino? Installation des pilotes et configuration de la carte et du port Prise en main de votre kit de démarrage Arduino - Installation des pilotes et configuration de la carte et du portDonc, vous vous êtes acheté un kit de démarrage Arduino et peut-être d'autres composants sympas au hasard - et maintenant? Comment commencez-vous réellement à programmer cette chose Arduino? Comment le configurez-vous... Lire la suite
  • Fritzing, un outil gratuit pour dessiner des schémas de circuits Fritzing - L'outil ultime pour esquisser des projets électroniques [Cross Platform]Bien qu'il ressemble à un alcopop, Fritzing est en fait un incroyable logiciel gratuit que vous pouvez utiliser pour créer schémas de circuits et de composants à utiliser avec des cartes électroniques à prototypage rapide telles que le fantastique open-source Arduino ... Lire la suite
  • Un examen plus approfondi de la structure d'une application Arduino et de l'exemple de programme Blink Premiers pas avec l'Arduino: un examen plus approfondi du circuit imprimé et de la structure d'un programmeLa dernière fois, je vous ai laissé avoir configuré votre Arduino pour fonctionner avec Mac ou Windows et avoir téléchargé une application de test simple qui a fait clignoter la LED intégrée. Aujourd'hui, je vais expliquer le code ... Lire la suite
  • Projet de lumières d'arbre de Noël Arduino Un projet Arduino: comment faire des ornements de lumières de Noël flashyCeci est la prochaine partie de notre série d'apprentissage Arduino, et cette fois, nous allons découvrir et utiliser des tableaux pour créer une petite décoration d'arbre de Noël avec diverses séquences clignotantes. Ce serait un ... Lire la suite (AKA en apprenant sur les tableaux)
  • Qu'est-ce que le binaire? Qu'est-ce que le binaire? [La technologie expliquée]Étant donné que le binaire est si fondamental pour l'existence des ordinateurs, il semble étrange que nous n'ayons jamais abordé le sujet auparavant - alors aujourd'hui, je pensais que je donnerais un bref aperçu de ce que le binaire ... Lire la suite

C'est aussi loin que nous irons avec les registres à décalage aujourd'hui, car je pense que nous avons beaucoup couvert. Comme toujours, je vous encourage à jouer avec et à ajuster le code, et n'hésitez pas à poser toutes les questions que vous pourriez avoir dans les commentaires, ou même à partager un lien vers votre projet génial basé sur le registre à décalage.

James est titulaire d'un BSc en intelligence artificielle et est certifié CompTIA A + et Network +. Il est le développeur principal de MakeUseOf et passe son temps libre à jouer au paintball VR et aux jeux de société. Il construit des PC depuis qu'il est enfant.