Programmation d'un circuit intégré 74 HC 595 avec Arduino
Published: 2020-10-13 17:46:22

Ce tutoriel vient vous en apprendre plus sur le circuit intégré 74HC595 qui permet de commander huit sorties digitales juste avec trois pins d’Arduino.

Tous les appareils électroniques sont composés particulièrement de circuit intégrés. Un circuit intégré, est un circuit qui intègre plusieurs composants électroniques, principalement les transistors et les portes logiques. Ainsi ils permettent la réalisation de systèmes électroniques vraiment performants et miniature. Dans ce tutoriel nous ferons la lumière sur le circuit intégré 74HC595.

<b>1.	Description </b>
Le circuit intégré 74HC595 est un petit composant qui dispose de 16 pins. Il permet tout simplement d’étendre le nombre de sorties digitales d’un microcontrôleur c’est-à-dire de sauvegarder des pins sur ce dernier, car chaque microcontrôleur a un nombre limité de pins. Prenons l’exemple de la carte Arduino, il est donc possible de commander indépendamment huit sorties digitales à partir de trois pins de la carte. Ainsi il est possible de contrôler beaucoup de LED, des boutons, des capteurs en même temps.

<b>2. Fonctionnement</b>

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xhk359bvswvu9btoer60.JPG)

Le CI 74HC595 communément appelé 595 contrôle essentiellement huit pins de sorties distinctes, en utilisant seulement trois pins d’entrée. Le plus intéressant est que si vous avez besoin de plus de huit pins d’entrée ou de sortie, vous pouvez facilement connecter en série autant de 595 que vous le désirez. Tout ceci est possible grâce au décalage de bits.
Tout d’abord il faut comprendre que la commande des appareils électroniques se fait par l’envoie des états HIGH (1) et LOW (0) qui sont des bits. Tout dépend de l’instruction que vous voulez exécuter. L’instruction peut se faire alors en une combinaison de 0 et 1 c’est-à-dire sur plusieurs bits.

•	STAGE SHIFT REGISTER
La première partie tout en haut est celle qui reçoit les informations envoyées par Arduino. Une information reçue par le 595 se fait sur huit bits, donc 1 bit pour chaque donnée. Le rôle du stage shift register est de déplacer la valeur de chaque bit vers la gauche en sa mémoire suivant un procédé bien précis. L’information est envoyée sur l’un des pins ‘’le DATA’’. Ainsi dès l’activation du ‘’CLOCK’’, les bits sont décalés vers la gauche.

•	STORAGE REGISTER
Le registre de stockage est la deuxième partie du 595. Son rôle est de copier le contenu du stage shift register. Ici le troisième pin, le ‘’LATCH’’ mémorise les informations du shift register et qui les copie dans le storage register. Le storage register dispose aussi de huit bits qui sont chacun connecté à l’une des huit sorties du 595.

•	STATE OUTPUTS
Cette dernière partie permet de commander l’activation et la désactivation de toutes les sorties en une seule opération. Dans certaines situations, il peut être nécessaire de désactiver les sorties pour laisser le contrôle des pins Q0 à Q7 à un autre circuit.

L’envoi de chaque bit correspond à l’activation ou à la désactivation des sorties. L’envoi  de l’octet 10101010 correspond à l’activation des sorties Q0, Q2, Q4, Q6 et la désactivation des sorties Q1, Q3, Q5, Q7.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xg14i6myp4d9eva9hsll.JPG)

- GND doit être connecté à la terre ;
- VCC est l’alimentation du 595 connecté au 5V ;
- DS c’est le pin DATA, il utilisé pour faire entrer des 
  données dans le registre à décalage ;
-	SHCP c’est l’horloge du registre à décalage. Pour décaler les bits l’horloge doit être mise sur l’état HIGH ;
-	STCP active la copie du contenu du registre de décalage  dans celui du stockage
-	MR est le pin qui permet de réinitialiser tout le registre. Pour l’activer il faut la mettre sur LOW sinon il faut la laisser sur HIGH ;
-	OE, lorsqu’elle  est sur LOW les sorties sont activées mais désactivées dans le cas contraire ;
-	Q0 à Q7 représentent les broches de sorties ;
-	Q7’ permet de monter deux 595 en série. Il faut le connecter  au pin DATA du second 595. Dans ce cas connecter SHCP du second à son STCP.

<b>3.	Utilisation avec Arduino</b>
Ici nous allons contrôler l’allumage de huit LEDs avec le CI 74HC595.
•	Matériels 
- Huit<a href="https://youpilab.com/components/product/resistance-220-ohms/">résistances 220 Ω</a>
- <a href="https://youpilab.com/components/product/arduino-uno-r3/">Carte Arduino</a>
-	<a href="https://youpilab.com/components/product/connecteurs-male-femelle-jumper-linite/">Fils de connexion</a>
- <a href= "https://youpilab.com/components/product/protoboard-400-points/">Breadboard</a>

- Huit <a href="https://youpilab.com/components/product/led-rouge-tete-ronde-water-clear-lunite/">LED</a>
-	<a href="https://youpilab.com/components/product/sn74hc595/">Circuit intégré 74HC595</a>

•	Câblage

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/eqmlmm3tv6j6mxt19r29.JPG)


-	L’entrée DS est branchée au pin 2 de l’Arduino
-	L’entrée SHCP est branchée au pin 3 de l’Arduino
-	L’entrée STCP est branchée au pin 4 de l’Arduino
-	Le pin MR est branché au VCC
-	Le pin OE est branché au GND
-	Les huit LEDs (anodes) sont connectées aux sorties Q0, Q1, Q2, Q3, Q4, Q5, Q6, et Q7 et les cathodes au GND.

•	Code
<pre>// définition des pins de commande du 74HC595 
int DATA_pin = 2;   //  définition du pin DATA 
int LATCH_pin = 4; // définition du CLOCK
int CLOCK_pin = 3;// définition du LATCH
boolean etats[8]; //c'est un tableau de 8 bits correspondant 
                  //aux sorties du 74HC595 à l'état voulu
void setup()
{
    //configuration des pins de commande comme sorties
    pinMode(DATA_pin,OUTPUT);
pinMode(LATCH_pin,OUTPUT);
    pinMode(CLOCK_pin,OUTPUT);
}
//La fonction appliqueEtat() enregistre l'état des leds  dans le CI 74HC595
//pour chaque état, le LATCH est d'abord désactivé
//ensuite après que le CLOCK est mis à l'état LOW 
//on place le DATA à l'état voulu et l'activation  du CLOCK opère le décalage
//à la fin on valide le tout en activant le LATCH
void appliqueEtat()
{
  digitalWrite(LATCH_pin, LOW);
  for (int i = 7; i>=0; i--)
  {
    digitalWrite(CLOCK_pin, LOW);
digitalWrite(CLOCK_pin, LOW);
    digitalWrite(DATA_pin, etats[i] );
    digitalWrite(CLOCK_pin, HIGH);
  }
  
  digitalWrite(LATCH_pin, HIGH);
}
void loop()
{
   //Allume successivement les leds de Q0 à Q7
for(int i = 0; i<8; i++)
   {
    etats[i] = HIGH;
delay(300);
   appliqueEtat();
   }
   //éteint successivement les leds de Q7 à Q0
   for(int i = 7; i>=0; i--)
   {
    etats[i] = LOW;
    delay(300);
    appliqueEtat();
   }
//remise à zéro de toutes les leds
    for(int j = 0; j<8; j++)
    {
      etats[j] = 0;
appliqueEtat();
    }

    //remise à zéro de toutes les leds
    for(int j = 0; j<8; j++)
    {
      etats[j] = 0;
    }
    appliqueEtat();
}

</pre>
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/twrsxvzzevoy34cf6hnt.jpg)

Tous ces matériels sont disponibles chez <a href="https://youpilab.com/components/shop-2/">YoupiLab<a/>, nous vous prions de vous rapprochez de bous pour vous en procurez afin de réaliser ce montage.

Nous sommes donc à la fin de ce tutoriel, nous espérons avoir comblé vos attentes.
 A très bientôt pour d’autres aventures.

Je vous propose une vidéo de test sur:<a href="https://www.youtube.com/watch?v=MDQ-TKUeV6k&t=25s">CI_74_HC_595_Arduino</a>