Bonjour à tous,
Cela fait pas mal de temps que mon dernier tutoriel est sorti et je vous en propose aujourd’hui un nouveau qui, je l’espère, saura vous intéresser. Vous remarquerez dans le titre la présence de [Arduino], en effet, je traiterai des CI 74HC595 lors de différents tutos avec le bus pirate, l’Arduino et le Raspberry Pi.
Aujourd’hui, nous allons aborder ensemble l’utilisation des Circuits intégrés (J’écrirai CI tout au long de l’article) de type 74HC595 avec comme seul contrôleur, l’Arduino. Nous découperons notre article selon le plan suivant:
1- Que sont les Circuits de type 74HC595 et quelles sont leurs possibles utilisations
2- Principe théorique du fonctionnement des CI 74HC595
3- Mise en pratique et application des connaissances
A la fin de ce tutoriel, vous devriez être en mesure de comprendre le fonctionnement de ces circuits et de les utiliser. Avant toutes choses, je souhaiterai aborder la liste du matériel nécessaire:
– 1 pile 6V ou un générateur 5V
– 7 Leds de couleurs quelconques
– 7 résistances de 320 ohms
– 1 Arduino
Une plaque de câblage, quelques straps (fils) et de la patience, c’est le « kit » de l’électronicien non ?
Allez, on y va, c’est parti pour la définition et présentation des circuits intégrés 74HC595.
1- Que sont les circuits de type 74HC595 et quelles sont leurs possibles utilisations
Les Circuits Intégrés de type 74HC595 sont appelés « registres à décalage ». Derrière ce nom un peu barbare, se cache en fait l’un des circuits les plus intéressants, notamment pour nous, arduinistes que nous sommes. En effet, il vous est sans doute arrivé, tout comme moi, de manquer de broches sur votre Arduino pour réaliser tel ou tel circuit. Acheter l’Arduino MEGA n’est pas forcément la bonne solution à ce problème, vous allez comprendre pourquoi.
Les 74HC595 permettent, grâce à 3 entrées de contrôler 7 sorties différentes. Enfin… 7, c’est le minimum. En réalité, on peut contrôler 8, 16, 32, 64, 128 etc… Bref, une (presque) infinité de sorties. L’un des projets dans lesquels ces circuits sont les plus utiles est sans doute le cube de led. En effet, il suffit d’un rapide calcul : Un cube de leds de 4 x 4 x 4 leds nécessitera 64 sorties. En réfléchissant un peu, on peut abaisser ce nombre à 32. C’est là que les registres à décalages vont nous aider car, on pourrait supposer en utiliser 4 câblés 2 à 2, c’est-à-dire utilisant un total de 6 sorties de l’Arduino. On passe ainsi de 64 sorties théoriques à utiliser, à 6 ce qui permet d’ajouter des capteurs, etc…
Les utilisations sont donc diverses mais ces Circuits Intégrés restent essentiels dans le domaine de l’électronique sur des platines comme l’Arduino. Sachez pour votre information que les 74HC595 ne permettent pas de « multiplier » le nombre d’entrées disponibles sur l’Arduino, ce sont d’autres circuits qui permettent cela.
2- Fonctionnement des 74HC595
Les Circuits Intégrés de type 74HC595 portent assez bien leur nom de « registre à décalage ». En effet, l’utilisation de ces circuits repose en fait sur l’enregistrement d’un variable puis le décalage d’un cran ensuite. Pour expliquer cela, je vous propose une petite vidéo explicative réalisée grâce à un logiciel de CAO Electronique.
Ici, j’ai utilisé des boutons pour contrôler le 74HC595 mais nous allons apprendre ensemble à contrôler ces mêmes circuits grâce à l’Arduino.
3- Mise en pratique et application des connaissances
Pour la mise en pratique, avec ce que nous avons appris précédemment, rien de bien compliqué. Voici les branchements à effectuer :
Image tiré du blog bildr.org
Et maintenant, le programme commenté en français :
int SER_Pin = 8; //pin 14 sur le 75HC595
int RCLK_Pin = 9; //pin 12 sur le 75HC595
int SRCLK_Pin = 10; //pin 11 sur le 75HC595
//Combien combinez-vous de 74HC595 ? Ne pas toucher si 1 seul
#define number_of_74hc595s 1
//Ne pas toucher
#define numOfRegisterPins number_of_74hc595s * 8
boolean registers[numOfRegisterPins];
void setup(){
pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
//Reset tous les pins du 74HC595
clearRegisters();
writeRegisters();
}
//Place tous les pins du 74HC595 à l'état "OFF"
void clearRegisters(){
for(int i = numOfRegisterPins - 1; i >= 0; i--){
registers[i] = LOW;
}
}
//Enregistrer et afficher les valeurs dans le registre
//Executer uniquement APRES que toutes les valeurs aient été programmées
void writeRegisters(){
digitalWrite(RCLK_Pin, LOW);
for(int i = numOfRegisterPins - 1; i >= 0; i--){
digitalWrite(SRCLK_Pin, LOW);
int val = registers[i];
digitalWrite(SER_Pin, val);
digitalWrite(SRCLK_Pin, HIGH);
}
digitalWrite(RCLK_Pin, HIGH);
}
//Place un pin du 74HC595 à l'état HAUT ou BAS
void setRegisterPin(int index, int value){
registers[index] = value;
}
void loop(){
setRegisterPin(2, HIGH);
setRegisterPin(3, HIGH);
setRegisterPin(4, LOW);
setRegisterPin(5, HIGH);
setRegisterPin(7, HIGH);
writeRegisters(); //Doit être exécuté pour appliquer les changements
//Executer seulement une fois que toutes les valeurs ont été enregistrées comme vous le souhaitiez.
}
Vous pouvez modifier ce programme pour l’adapter à votre utilisation.
Bonne semaine à tous et à bientôt pour un prochain tutoriel sur Simple-Duino.
comment programmer un afficheur 7 segmans sur une carte pic 16f
Bonjour,
La vidéo est sans curseur visible ce qui rend impossible la compréhension.
Tres interessant le tutoriel, merci bien. Cependant les pro arduinistes, Moi je suis un debutant dans ce domaine et travail sur un projet à microntrolleur arduino qui la conception d’un afficheur à persitance rectinienne « POV » j’ai dejà assez bien assimiler le principe de fonctionnement des POV suite aux differents tutoriels suivient sur internet, en effet je comptais y intergré a un registre a décalage pour un effet visuel plus attrayant dans la messure je voudrais le message à affiche soit balayé sur toute la circonference! Mais etand donner que je decouvre encore le 74HC595, j’aimerais a voir un peu d’aide deja sur le cablage et la programation svp.
cordialement votre !
Alors là… bravo !!!
Si vous vouliez faire une synthèse de ce qu’il faudrait éviter dans un tutoriel, je pense que c’est réussi !
1- Erreur dans la présentation théorique :
« Les 74HC595 permettent, grâce à 3 entrées de contrôler 7 sorties différentes. »
De QA à QH, personnellement j’en compte 8.
2- Explication orale incompréhensible :
« .. la LED ici s’allume.., j’appuie sur le bouton là.. » et tout ça sans pointeur visible !
3- Le câblage dans la vidéo n’est pas clair ; les fils se « croisent les bras ».
Du coup on ne voit pas clairement ce que commandent les commutateurs.
4- Le code source n’est pas bien présenté :
– pas de séparation des différents blocs du programme par des lignes vierges
– pas d’indentation
– définition de fonctions en plein milieu du programme
– pas de coloration syntaxique
Je suis d’habitude extrêmement reconnaissant aux personnes qui se donnent
la peine de partager leurs connaissances grâce aux tutoriels, mais là …
yannM a bien résumé mais a oublié un autre point très important … Allumer 8 LED protégées par des résistances de 180 ohms en 5V consomme (se rappeler de U=RI) 5/180=28mA, soit 224mA au total, ce qui excède largement le maximum absolu de 70mA de ce composant tel que décrit dans sa datasheet. Autrement dit, le meilleur moyen de cramer le composant, et dans tous les cas de faire un montage pas fiable sur la durée.
Bonjour , je ne comprenais rien , mon montage ne fonctionnait pas du tout , je pensais avoir acheté des 74hc595 defectueux , mais non , je les cramait tous . je n’ai pu m’en apercevoir sur tinkercad qui explique que je charge trop le composant . Le pire s’est que beaucoup de sites expliquent ce fonctionnement qui crame tout les 74hc595 , en mettant un transistor et un résistance de plus à chaque sortie cela fonctionne mais ca devient lourd . Vive TINKERCAD