8 LEDs de plus - Registre à décalage 74HC595.
Le moment est venu de commencer à s'amuser avec les puces, ou circuits intégrés (CIs) comme ils aiment être appelés. Le packaging interne d'une puce peut être très décevant. Par exemple, la puce sur la carte Arduino (un microcontrôleur) et celle que nous allons utiliser dans ce circuit (un registre à décalage) semblent très similaires mais sont en fait plutôt différents.
Le prix de la puce ATMega sur la carte Arduino est de quelques dollars tandis que le
74HC595 vaut un couple de centimes.
C'est un bon circuit d'introduction, et une fois que vous êtes à l'aise dans sa mise en oeuvre et avec sa fiche (disponible en ligne) vous serez dans le monde des puces comme dans un cocon.
Le registre à décalage (aussi appelé convertisseur série en parallèle), vous offrira 8 sorties de plus (pour contrôler des LEDS ou n'importe quoi) en utilisant seulement trois ports Arduino.
Ils peuvent être reliés ensemble pour vous donner un nombre quasi illimité de sorties en utilisant les quatres mêmes ports (ou 3, NdT). Pour une vision plus approfondie de la façon dont fonctionne un registre à décalage rendez vous sur le wiki en ligne.
COMPOSANTS
- LED 5mm x 8
- Résistance de 330 ohm (orange-orange-brun) x 8
- Registre à décalage 74HC595
- Fils de connextion.
SCHEMA DU CIRCUIT
MONTAGE DU CIRCUIT
CODE
Vous pouvez trouver ce code dans CIRC-05-code-shiftregister.js.
var five = require("johnny-five"),
board, shiftRegister;
board = new five.Board();
board.on("ready", function() {
shiftRegister = new five.ShiftRegister({
pins: {
data: 2,
clock: 3,
latch: 4
}
});
var value = 0;
function next() {
value = value > 0x11 ? value >> 1 : 0x88;
shiftRegister.send( value );
setTimeout(next, 300);
}
this.repl.inject({
sr: shiftRegister
});
next();
});
DEPANNAGE
Le voyant d'alimentation de l'Arduino s'éteint
Cela peut arriver quand la puce est insérée à l'envers. Si vous le corrigez rapidemment, il n'y aura pas de dégâts.
Ne fonctionne pas vraiment
C'est probablement quelque chose d'aussi simple que des fils intervertis ou des LED inversées.
ETENDRE LE CODE
Comprendre ce qui se passe
L'objet Johnny-Five ShiftRegister cache les détails de bas niveau quand à l'envoi d'une valeur au registre à décalage. Pour envoyer des données à la puce, vous "horlogez" les données puis vous les verrouillez. Pour ce fait le code place le port de données soit sur HAUT ou BAS, donne une impulsion à l'horloge, puis de nouveau positionne le port et donne une impulsion, tout cela de façon répétée jusqu'à ce qu'il ait décalé 8 bits de données. Ensuite il donne une impulsion au loquet et les 8 bits sont transférés aux ports du registre à décalage. Cela semble compliqué mais c'est vraiment simple une fois que vous avez pris le coup.
Si vous regardez le code de la méthode send de ShiftRegister, vous pouvez voir comment cela est implémenté dans Johnny-Five:
ShiftRegister.prototype.send = function( value ) {
this.board.digitalWrite( this.pins.latch, this.firmata.LOW );
this.board.shiftOut( this.pins.data, this.pins.clock, true, value );
this.board.digitalWrite( this.pins.latch, this.firmata.HIGH );
return this;
};
Contrôler individuellement des LEDs
Le moment est venu de commencer à contrôler les LEDs avec une méthode similaire à celle utilisée dans l'exercice 2. Comme les états des 8 LEDs sont stockés sur un octet (une valeur de 8 bits) alors le nombre binaire (en base 2) 10000100 montre que les LED un et six sont allumées, tandis que les autres sont éteintes. Pour contrôler quelles LEDs sont allumées, utilisez la méthode send, en fournissant l'équivalent décimal (base 10) ou hexadécimal (base 16) du nombre binaire pour la configuration que vous voulez (comme 0x84 pour la configuration précédente).
Commentez l'appel de fonction next() à la fin et lancez le programme de nouveau. Utilisez le REPL pour essayer d'envoyer différentes valeurs au registre à décalage jusqu'à ce que vous compreniez comment cela fonctionne, ainsi ce qui suit éteint toutes les LEDs et ensuite allume la LED 2.
sr.send(0);
sr.send(0x02);
Quelques configurations à essayer:
Configuration | Valeur binaire | Valeur hexadécimale | Valeur décimale |
---|---|---|---|
LED 8 seule | 00000001 | 0x01 | 1 |
LED 7 seule | 00000010 | 0x02 | 2 |
LED 6 seule | 00000100 | 0x04 | 4 |
LED 5 seule | 00001000 | 0x08 | 8 |
LED 4 seule | 00010000 | 0x10 | 16 |
LED 3 seule | 00100000 | 0x20 | 32 |
LED 2 seule | 01000000 | 0x40 | 64 |
LED 1 seule | 10000000 | 0x80 | 128 |
Pour mieux comprendre comment cela fonctionne, vous devriez vous documenter sur les nombres binaires, il y a de nombreux tutoriels sur le Web. Arduino excelle à manipuler les bits et il y a tout un ensemble d'opérateurs pour vous aider.
Licence Common Creative. Traduction par Scriptol.fr du tutoriel en anglais d'Anna Gerber, sous la même licence. Copie et modification autorisées sous réserve de conserver cette notice y compris le lien sur la page originale.