Programmation arduino - jouer avec des registres à décalage (a.k.a encore plus diodes électroluminescentes)

Aujourd`hui, je vais essayer de vous apprendre un peu plus sur les registres de décalage. Ce sont une partie assez importante de la programmation Arduino, essentiellement parce qu`ils élargissent le nombre de sorties que vous pouvez utiliser, en échange de seulement 3 broches de commande. Vous pouvez également décaler une connexion en chaîne enregistre ensemble afin d`obtenir encore plus de résultats.

Ceci est un saut significatif en difficulté de tutoriels précédente cependant, et je suggère fortement que vous avez une très bonne compréhension de la matière précédente (liens à la fin de cet article), ainsi que la compréhension de la bases de binaire que j`ai écrit la dernière fois.Qu`est-ce que binaire? [Technologie Explained]Qu`est-ce que binaire? [Technologie Explained]Étant donné que binaire est donc absolument fondamental à l`existence d`ordinateurs, il semble étrange que nous ayons jamais abordé le sujet avant - si aujourd`hui j`avais pensé que je donnerais un bref aperçu de ce que binaire ...Lire la suite

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

Un registre à décalage de sortie, techniquement parlant, reçoit des données en série et il émet en sortie en parallèle. En pratique, cela signifie que nous pouvons envoyer rapidement un tas de commandes de sortie à la puce, lui dire d`activer, et les sorties seront envoyées aux broches correspondantes. Au lieu de itérer chaque broche, nous envoyons simplement la puissance requise à toutes les broches à la fois, comme un seul octet ou plus d`informations.

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

Comment ça marche?

Le registre à décalage, nous allons utiliser - le 74HC595N inclus dans le kit de démarrage Oomlout - n`a besoin que de trois broches de commande. La première est une montre - ne vous inquiétez pas trop à ce que le contrôle des bibliothèques série Arduino - mais une horloge est fondamentalement juste une impulsion électrique qui met en marche / le rythme du signal de données.

La goupille de verrouillage est utilisé pour indiquer au registre à décalage quand il doit tourner ses sorties et hors fonction des bits que nous venons d`envoyer ce - à savoir, les verrouiller en place.

Enfin, la broche de données est l`endroit où nous avons envoyé les données série proprement dites avec les bits pour déterminer la marche / arrêt état des sorties du registre à décalage.

L`ensemble du processus peut décrit en 4 étapes:

  1. Réglez la broche de données à haute ou basse pour la première broche de sortie sur le registre à décalage.
  2. Impulsion de l`horloge sur « shift » les données dans le registre.
  3. Continuez à définir les données et pulsant l`horloge jusqu`à ce que vous avez 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:

  • 7HC595N déplacer la puce de registre
  • 8 LEDS et des résistances appropriées, ou tout ce que vous voulez sortie
  • Les habituels connecteurs, planche à pain, et une base Arduino

Si vous avez le kit de démarrage Oomlout, vous pouvez télécharger la mise en page breadboard d`ici.

Voici la vidéo de montage:

La disposition du conseil d`administration:

programmation arduino

Et ma version assemblée:

J`ai modifié le code original fourni par Ooolmout, mais si vous souhaitez essayer la place, il peut être téléchargé en entier ici. Explication du code est inclus, donc copier et coller le tout en bas ou pastebin pour lire une explication du code.

/ * ------------------------------------------------ * --------- | Le registre à décalage Tutorial, basé sur | * | Expérimentation Arduino Kit-05 CRIA | * | .: 8 Plus LED:. (74hc595 Shift Register) | * ------------------------------------------- -------------- * | Modifié par James @ MakeUseOf.com | * ----------------------------------------- * /// ---------------- Pin Définitions de la 7HC595N a trois données pinsint = 2 // où nous envoyons les bits pour contrôler l`horloge outputsint = 3- // Maintient le les données dans la bascule de syncint = 4- // indique au registre à décalage quand activer la configuration de sortie sequencevoid () {// définir les trois broches de commande à outputpinMode (données, OUTPUT) -pinMode (horloge, OUTPUT) -pinMode (verrou, la sortie ) -Serial.begin (9600) - // afin que nous puissions envoyer des messages de débogage moniteur série} void loop () {outputBytes () - // notre sortie de base qui écrit 8 bits pour montrer comment un registre à décalage works.// outputIntegers () - // envoie une valeur entière en tant que données au lieu des octets de comptage en binaire efficacement} outputIntegers void () {for (int i = 0-igt, pour ajuster directiondelay (100) -}}.

Bit-Shifting (OutputBytes Fonction)

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

Bit-déplacement est effectué en utilisant lt; lt; ou gt; gt; suivi par le nombre de bits que vous souhaitez passer par.

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

octet = val val = B00011010val lt; lt; 3 // B11010000val = val lt; lt; 2 // B01000000, nous avons perdu les autres bits! Val = val gt; gt; 5 // B00000010

Envoi Entiers lieu (OutputIntegers Fonction)

Si vous envoyez un nombre entier au registre à décalage au lieu d`un octet, il suffit de convertir le nombre en une séquence d`octets binaire. Dans cette fonction (uncomment dans la boucle et télécharger pour voir l`effet), nous avons une boucle qui compte 0-255 (le plus entier 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 au hasard à moins que vos LED sont disposés en une longue ligne.

Par exemple, si vous lisez l`article binaire expliqué, vous saurez que le numéro 44 sera représenté par 00.101.100, donc LED 3,5,6 vont éclairer à ce moment-là dans la séquence.

Daisy Chaining plus d`un registre à décalage

La chose remarquable à propos de registres à décalage est que si on leur donne plus de 8 bits d`information (ou leur registre mais grande est), ils changeront les autres bits supplémentaires à nouveau. Cela signifie que vous pouvez connecter une série d`entre eux ensemble, pousser dans une longue chaîne de bits, et l`ont distribué à chaque registre séparément, tous sans codage supplémentaire de votre part.

Bien que nous ne serons pas en détail 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 Arduino ici.

D`autres articles de la série:

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

Articles connexes