Programmation Arduino - Jouer avec des registres à décalage (a.k.a Encore plus de voyants)

Programmation Arduino - Jouer avec des registres à décalage (a.k.a Encore plus de voyants) / DIY

Aujourd'hui, je vais essayer de vous apprendre un peu plus sur les registres à décalage. C’est une partie assez importante de la programmation Arduino, principalement 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 en série des registres à décalage pour obtenir encore plus de sorties.

Cependant, ceci est un saut de difficulté significatif par rapport aux tutoriels précédents, et je vous suggère fortement de bien comprendre le matériel précédent (liens à la fin de cet article), ainsi que de comprendre les bases du binaire What Is Binary? [Technologie expliquée] Qu'est-ce que le binaire? [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. Je pensais donc aujourd'hui que je vous donnerais un bref aperçu de ce que… Read More which J'ai écrit la dernière fois.

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

Techniquement, un registre à décalage à la sortie reçoit des données en série et les sort en parallèle. Concrètement, cela signifie que nous pouvons rapidement envoyer un paquet de commandes de sortie à la puce, lui dire d'activer, et les sorties seront envoyées aux broches appropriées. Au lieu de parcourir chaque broche, nous envoyons simplement la sortie requise à toutes les broches à la fois, sous la forme d'un octet ou de plusieurs informations..

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

Comment ça marche?

Le registre à décalage que nous allons utiliser - le 74HC595N inclus dans le kit de démarrage Oomlout - ne nécessite que 3 broches de contrôle. La première est une horloge - vous n’avez pas à vous en inquiéter car les bibliothèques série Arduino la contrôlent - mais une horloge est en réalité une simple impulsion électrique marche / arrêt qui donne le ton pour le signal de données..

La broche 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.-à-d. 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. Définissez la broche de données sur haute ou basse pour la première broche de sortie du registre à décalage.
  2. Pulse l'horloge pour «décaler» les données dans le registre.
  3. Continuez à régler les données et à pulser l'horloge jusqu'à ce que vous ayez défini l'état requis pour toutes les broches de sortie.
  4. Pulse 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 envoyer à
  • La planche à pain habituelle, des connecteurs et un Arduino de base

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

Voici la vidéo de montage:

La mise en page du conseil:

Et ma version assemblée:

J'ai modifié le code original fourni par Ooolmout, mais si vous préférez essayer cela, vous pouvez le télécharger intégralement ici. L'explication du code est incluse, donc copiez et collez le tout par-dessous ou utilisez la commande pastebin pour lire l'explication du code..

/ * ---------------------------------------------------- --------- * | Registre de décalage, basé sur | * | Kit d'expérimentation Arduino CIRC-05 | * | .: 8 Plus de LED:. (Registre à décalage 74HC595) | * ----------------------------------------------------- -------- * | Modifié par James @ MakeUseOf.com | * ----------------------------------------------------- -------- * / // Définitions des broches // 7HC595N a trois broches int data = 2; // où nous envoyons les bits pour contrôler les sorties int clock = 3; // maintient les données synchronisées int latch = 4; // indique au registre à décalage le moment d'activer la séquence de sortie void setup () // initialise les trois broches de contrôle à la sortie pinMode (data, OUTPUT); pinMode (horloge, OUTPUT); pinMode (latch, OUTPUT); 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 le fonctionnement d'un registre à décalage. // outputIntegers (); // envoie une valeur entière sous forme de données au lieu d'octets, comptant effectivement en binaire.  void outputIntegers () for (int i = 0; i<256;i++) digitalWrite(latch, LOW); Serial.println(i); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, i); digitalWrite(latch, HIGH); delay(100);   void outputBytes() /* Bytes, or 8-bits, are represented by a B followed by 8 0 or 1s. In this instance, consider this to be like an array that we'll use to control the 8 LEDs. Here I've started the byte value as 00000001 */ byte dataValues = B00000001; // change this to adjust the starting pattern /* In the for loop, we begin by pulling the latch low, using the shiftOut Arduino function to talk to the shift register, sending it our byte of dataValues representing the state of the LEDs then pull the latch high to lock those into place. Finally, we shift the bits one place to the left, meaning the next iteration will turn on the next LED in the series. To see the exact binary value being sent, check the serial monitor. */ for (int i=0;i<8;i++) digitalWrite(latch, LOW); Serial.println(dataValues, BIN); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, dataValues); digitalWrite(latch, HIGH); dataValues = dataValues << 1; // Shift the bits one place to the left - change to >> régler le retard de direction (100);  

Décalage binaire (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 à gauche à chaque itération de la boucle for. Il est important de noter que si vous vous déplacez plus loin que possible, le bit est tout simplement perdu..

Le transfert de bits est fait en utilisant << or >> suivi du nombre de bits que vous souhaitez déplacer par.

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, we lost those other 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 binaire. Dans cette fonction (décommenter 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. Cela compte essentiellement en binaire, donc la séquence peut sembler un peu aléatoire à moins que vos voyants ne soient disposés dans une longue ligne.

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

Daisy enchaînant plus d'un registre à décalage

La chose remarquable à propos des registres à décalage est que si on leur donne 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 connecter une série de ces éléments ensemble, insérer une longue chaîne de bits et le distribuer séparément dans chaque registre, sans aucun codage supplémentaire de votre part..

Bien que nous ne détaillerons pas le processus ni les schémas ici, si vous avez plusieurs registres à décalage, vous pouvez essayer le projet depuis le site officiel Arduino ici..

Autres articles de la série:

  • Qu'est-ce qu'Arduino et que pouvez-vous en faire Qu'est-ce qu'Arduino et que pouvez-vous en faire? Qu'est-ce qu'Arduino et que pouvez-vous en faire? L'Arduino est un petit appareil électronique remarquable, mais si vous n'en avez jamais utilisé, que 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] 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 avez besoin de plus que de l'Arduino lui-même pour en créer quelque chose et pour commencer réellement. Les «kits de démarrage» Arduino sont… En savoir plus
  • Des composants plus sympas à acheter avec votre kit de démarrage 8 Des composants plus cools pour vos projets Arduino 8 Des composants plus cools pour vos projets Arduino Vous envisagez donc de vous procurer un kit de démarrage Arduino, mais vous vous demandez si certaines DEL et résistances de base vont être utilisées? assez pour vous tenir occupé pour le week-end? Probablement pas. Voici encore 8… Lire la suite
  • Débuter avec votre kit de démarrage Arduino? Installation des pilotes et configuration de la carte et du port Mise en route 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 port Vous vous êtes donc acheté un kit de démarrage Arduino et éventuellement d'autres composants sympas au hasard - et maintenant? Comment commencez-vous réellement à programmer cette chose Arduino? Comment le configurez-vous… Read More
  • Fritzing, un outil gratuit pour dessiner des schémas de circuits Fritzing - L'ultime outil pour esquisser des projets électroniques [plateforme croisée] Fritzing - L'ultime outil pour esquisser des projets électroniques [plate-forme] Malgré son allure d'alcopop, Fritzing est en réalité un morceau incroyable de logiciel gratuit que vous pouvez utiliser pour créer des schémas de circuits et de composants à utiliser avec des cartes électroniques à prototypage rapide telles que le fantastique… Lire plus
  • Un examen plus approfondi de la structure d'une application Arduino et du programme exemple Blink
  • Projet Arduino Xmas Tree Lights Un projet Arduino: Comment créer des ornements de lumières de Noël flashy Un projet Arduino: Comment créer des ornements de lumières de Noël Flashy Ceci est la partie suivante de notre série d’apprentissage Arduino. Cette fois, nous allons en apprendre davantage sur les tableaux et les utiliser. faire un petit ornement d’arbre de Noël avec diverses séquences clignotantes. Ce serait un… Lire la suite (AKA en apprendre davantage sur les tableaux)
  • Qu'est ce que le binaire? Qu'est-ce que binaire? [Technologie expliquée] Qu'est-ce que le binaire? [La technologie expliquée] Etant donné que le binaire est si fondamental pour l'existence des ordinateurs, il semble étrange que nous n'ayons jamais abordé le sujet auparavant. Je pensais donc aujourd'hui que je donnerais un bref aperçu de ce que… Read More

C'est tout ce que nous allons faire avec les registres à décalage aujourd'hui, car je pense que nous en avons couvert beaucoup. 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 superbe projet basé sur un registre à décalage.

En savoir plus sur: Arduino.