Passer au contenu principal Passer à la recherche Passer à la navigation principale
Menu

Contrôler huit LEDs avec un 74HC595


Dans ce tutoriel, nous vous montrons comment contrôler huit LEDs avec moins de broches Arduino à l'aide du registre à décalage 74HC595.

Vue d'ensemble

Ce guide montre comment contrôler huit LEDs avec moins de broches à l'aide du 74HC595. Bien que les LEDs puissent également être connectées individuellement à l'Arduino UNO, les broches disponibles deviendraient rapidement insuffisantes pour d'autres composants tels que des capteurs ou des moteurs. Pour contourner ce problème, le 74HC595 est utilisé – un convertisseur logique série-parallèle. Cette puce dispose de 8 sorties qui peuvent être commandées bit par bit avec seulement 3 entrées. Le contrôle des LEDs avec le circuit intégré 74HC595 est un peu plus lent, mais avec plus de 500 000 commandes par seconde au lieu de 8 000 000, il reste très rapide – plus rapide que ce que l'œil humain peut percevoir.

Composants nécessaires

  • Carte compatible Arduino UNO R3 
  • Plaque d'essai 
  • 14 câbles de connexion 
  • CI 74HC595 
  • 8x résistance 220 Ohm 
  • 8x LED

Ignorer la galerie de produits
Carte UNO R3 ATMEGA328P ATMEGA16U2 compatible Arduino Carte UNO R3 ATMEGA328P ATMEGA16U2 compatible Arduino – Image 2

Note moyenne de 4.98 sur 5 étoiles

(28)
Carte UNO R3 ATMEGA328P ATMEGA16U2 compatible Arduino
RBS10911

Disponible immédiatement

Prix régulier : A partir de 5,95 €
Plaque d'essai 400 pour Arduino, Raspberry etc

Note moyenne de 4.91 sur 5 étoiles

(17)
Plaque d'essai 400 pour Arduino, Raspberry etc
RBS10405

Disponible immédiatement

Prix régulier : A partir de 0,89 €
Kit de câbles de connexion avec extrémités étamées 130 pièces

Note moyenne de 5 sur 5 étoiles

(5)
Kit de câbles de connexion avec extrémités étamées 130 pièces
RBS11689

Disponible immédiatement

Prix régulier : A partir de 1,55 €
Carte d'essai 400 + adaptateur d'alimentation + 65 câbles jumper Carte d'essai 400 + adaptateur d'alimentation + 65 câbles jumper – Image 2

Note moyenne de 4.86 sur 5 étoiles

(7)
Carte d'essai 400 + adaptateur d'alimentation + 65 câbles jumper
RBS12607

Actuellement non disponible

Prix régulier : A partir de 5,15 €
SYB-120 700 carte breadboard + 65 câbles jumper - 700 contacts

Note moyenne de 4.5 sur 5 étoiles

(6)
SYB-120 700 carte breadboard + 65 câbles jumper - 700 contacts
RBS10089

Disponible immédiatement

Prix régulier : A partir de 4,05 €
10
10x SN74HC595N registre à décalage 8 bits CI DIP-16 pour conversion série-parallèle 10x SN74HC00N – Circuit intégré Quad 2-Input NAND Gate DIP-14, composant logique CMOS 74HC00

Note moyenne de 0 sur 5 étoiles

10x SN74HC595N registre à décalage 8 bits CI DIP-16 pour conversion série-parallèle
RBS18607

Disponible immédiatement

Prix de vente : A partir de 5,99 € Prix régulier : 6,65 €
100 x LED 5 mm - triées blanc, rouge, jaune, bleu, vert 100 x LED 5 mm - triées blanc, rouge, jaune, bleu, vert – Image 2

Note moyenne de 5 sur 5 étoiles

(8)
100 x LED 5 mm - triées blanc, rouge, jaune, bleu, vert
RBS11692

Disponible immédiatement

Prix régulier : A partir de 1,59 €
20
yourDroid UNO R3 carte de développement ATMEGA328P-PU compatible arduino yourDroid UNO R3 carte de développement ATMEGA328P-PU compatible arduino – Image 2

Note moyenne de 5 sur 5 étoiles

(6)
yourDroid UNO R3 carte de développement ATMEGA328P-PU compatible arduino
RBS14165

Disponible immédiatement

Prix de vente : A partir de 10,12 € Prix régulier : 12,65 €
Kit de démarrage pour Arduino UNO R3 RFID Kit de démarrage pour Arduino UNO R3 RFID – Image 2

Note moyenne de 4.83 sur 5 étoiles

(24)
Kit de démarrage pour Arduino UNO R3 RFID
RBS11368

Disponible immédiatement

Prix régulier : A partir de 28,95 €

Fonctionnement

La puce 74HC595 fonctionne avec un registre à décalage (shift register) qui peut remplir 8 emplacements de mémoire avec soit 0 soit 1. Pour activer ou désactiver chacune de ces valeurs, les données sont introduites via les broches "Data" et "Clock" de la puce.

cliquez sur les images pour les agrandir

La broche Clock doit recevoir huit impulsions. À chaque impulsion, si la broche de données est à l'état « high », un 1 est poussé dans le registre à décalage, sinon un 0 (« low »). Une fois les huit impulsions reçues, l'activation de la broche 'Latch' copie ces huit valeurs dans le registre de verrouillage. Cela est nécessaire, sinon les mauvaises LEDs clignoteraient pendant que les données sont chargées dans le registre à décalage.

La puce dispose également d'une broche Output Enable (OE) qui permet d'activer ou de désactiver toutes les sorties en même temps. On pourrait connecter cette broche à une broche UNO compatible PWM et utiliser 'analogWrite' pour contrôler la luminosité des LEDs. Cette broche est active à l'état bas, donc nous la connectons à la masse (GND).


Schéma électronique

Étant donné que huit LEDs et huit résistances doivent être connectées, un nombre correspondant de connexions doit être établi.

La solution la plus simple consiste d'abord à insérer la puce 74HC595, car presque tous les autres composants sont connectés à celle-ci. La puce est placée de telle sorte que la petite encoche en forme de U se trouve en haut sur la plaque d'essai. La broche 1 de la puce est située à gauche de cette encoche.

  • Le Digital 12 de l'Arduino UNO est connecté à la broche 14 du registre à décalage.
  • Le Digital 11 de l'Arduino UNO est connecté à la broche 12 du registre à décalage.
  • Le Digital 9 de l'Arduino UNO est connecté à la broche 11 du registre à décalage.

Toutes les sorties du circuit intégré, à l'exception d'une seule, se trouvent sur le côté gauche de la puce. Pour des raisons de clarté, les LEDs sont donc également placées de ce côté.

Ensuite, les résistances sont insérées. Il faut veiller à ce que leurs fils de connexion ne se touchent pas. Avant de connecter l'alimentation, cela doit être vérifié soigneusement. Si les résistances ne peuvent être disposées sans que les fils ne se touchent, les fils de connexion peuvent être raccourcis. Cela permet aux résistances de reposer plus près de la surface de la plaque d'essai.

Ensuite, les LEDs sont placées sur la plaque d'essai. Les longues pattes de connexion des LEDs (anode/pôle positif) doivent toujours être orientées vers la puce, indépendamment du côté de la plaque d'essai où elles se trouvent.

Ensuite, les câbles jumper sont connectés comme indiqué ci-dessus. Il ne faut pas oublier le pont entre la broche 8 du circuit intégré et la rail GND de la plaque d'essai.

Enfin, le sketch est téléchargé sur l'Arduino UNO. Ensuite, chaque LED devrait s'allumer successivement jusqu'à ce que toutes les LEDs soient allumées. Ensuite, elles s'éteignent toutes ensemble et le cycle recommence.

Code pour Arduino

Afficher / masquer le registre à décalage
int tDelay = 100;
int latchPin = 11;      // (11) ST_CP [RCK] on 74HC595
int clockPin = 9;       // (9) SH_CP [SCK] on 74HC595
int dataPin = 12;       // (12) DS [S1] on 74HC595
byte leds = 0;

void updateShiftRegister() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, leds);
  digitalWrite(latchPin, HIGH);
}

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}

void loop() {
  leds = 0;
  updateShiftRegister();
  delay(tDelay);
  for (int i = 0; i < 8; i++) {
    bitSet(leds, i);
    updateShiftRegister();
    delay(tDelay);
  }
}

Au début, les trois broches utilisées sont définies. Il s'agit des sorties numériques de l'Arduino UNO, qui sont connectées aux broches Latch, Clock et Données du 74HC595.

Afficher/masquer le brochage
int latchPin = 11;
int clockPin = 9;
int dataPin = 12;

Ensuite, une variable nommée "leds" est définie. Celle-ci est utilisée pour stocker le motif des LEDs qui sont actuellement allumées ou éteintes. Les données de type "Byte" représentent des nombres avec huit bits. Chaque bit peut être activé ou désactivé, ce qui rend cette variable parfaitement adaptée pour stocker les valeurs indiquant lesquelles de nos huit LEDs sont allumées ou éteintes.

byte leds = 0;

La fonction setup déclare les trois broches comme sorties numériques.

Afficher / masquer la fonction setup
void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}

La fonction "loop" éteint d'abord toutes les LEDs en attribuant la valeur 0 à la variable "leds". Ensuite, elle appelle 'updateShiftRegister', qui envoie le motif 'leds' au registre à décalage afin que toutes les LEDs soient éteintes. Le fonctionnement de 'updateShiftRegister' sera expliqué par la suite.

La fonction de boucle s'arrête pendant une demi-seconde, puis commence à compter de 0 à 7 à l'aide de la boucle 'for' et de la variable 'i'. À chaque itération, la fonction Arduino 'bitSet' est utilisée pour définir le bit qui contrôle la LED dans la variable 'leds'.

Ensuite, la fonction "updateShiftRegister" est appelée pour mettre à jour les LEDs afin de refléter la valeur dans la variable "leds". Il y a ensuite un délai d'une demi-seconde avant que 'i' ne soit incrémenté et que la LED suivante s'allume.

Afficher / masquer la fonction loop
void loop() {
  leds = 0;
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++) {
    bitSet(leds, i);
    updateShiftRegister();
    delay(500);
  }
}

Erklärung

Die Funktion 'updateShiftRegister' setzt zunächst den latchPin auf low und ruft dann die UNO-Funktion 'shiftOut' auf, bevor sie den 'latchPin' wieder auf high setzt.

Diese Funktion benötigt vier Parameter, die ersten beiden sind die Pins, die für Data bzw. Clock verwendet werden sollen.

Der dritte Parameter gibt an, an welchem Ende der Daten man beginnen möchte. Wir beginnen mit dem rechten Bit, das als 'Least Significant Bit' (LSB) bezeichnet wird.

Der letzte Parameter sind die eigentlichen Daten, die in das Schieberegister geschoben werden sollen, in diesem Fall also 'leds'.

Afficher / masquer la fonction updateShiftRegister
void updateShiftRegister() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, leds);
  digitalWrite(latchPin, HIGH);
}

Si l'une des LED doit être éteinte, la fonction Arduino bitClear peut être utilisée avec la variable leds. Cela permet de mettre le bit correspondant dans leds à 0. Ensuite, un simple appel de la fonction updateShiftRegister suffit pour transmettre le nouvel état aux LED.