fbpixel
Étiquettes : ,

Le registre à décalage est un circuit intégré constitué de circuits logique en série permettant de garder en mémoire des états haut ou bas. Il peut permettre de piloter des LED ou encore de récupérer l’état de plusieurs capteurs.

shiftregister-74hc595 Utilisation d'un registre à décalage avec Arduino

Matériel

  • Ordinateur
  • Arduino UNO
  • Câble USB A Mâle/B Mâle
  • Shift Register 74HC595

Principe de fonctionnement

Le registre à décalage (ou shift register) est un composant électronique contenant des bascules synchrones. Ce sont des circuits logiques qui gardent en mémoire un état haut ou bas (comme un bit) relié par une même horloge. Le principe de décalage vient du fait que l’on vient écrire ou lire dans chaque mémoire bit par bit.
Dans le cas du registre à décalage 74HC595, les sorties parallèles délivreront une tension de 5V à l’état haut et 0V à l’état bas.

shiftregister-74hc595-principle Utilisation d'un registre à décalage avec Arduino

Schéma

Le registre à décalage nécessite 3 broches de sortie d’un microcontrôleur. Il est possible de gérer plusieurs registres montés en série.

  • GND masse du circuit intégré
  • Vcc broche d’alimentation. Généralement connecté à 5V
  • SH_CP ou RCLK shift register clock input. Le signal d’horloge du registre qui détermine si on écrit dans la mémoire
  • ST_CP ou SRCLK storage register clock input. Le signal d’horloge de stockage qui définit dans quel mémoire on vient lire ou écrire.
  • DS ou SER serial data input. Signal contenant la données à enregistrer (HAUT ou BAS)
  • Q0-Q7 parallel data output. Broches de sorties du registre à décalage
  • OE Output enable, active LOW. Broche connectée à GND pour activer les sorties
  • MR Master reset, active LOW. Broche de remise à zéro. Connectée au 5V
  • Q7′ serial data output (broche utilisée seulement si plusieurs registres sont montés en série)
shiftregister-74hc595-pinout Utilisation d'un registre à décalage avec Arduino
arduino-shiftregister-74hc595-led_bb Utilisation d'un registre à décalage avec Arduino
arduino-shiftregister-74hc595-x2_bb Utilisation d'un registre à décalage avec Arduino

Code

Pour communiquer avec le registre à décalage, nous allons jongler avec ses broches d’entrée. Afin d’écrire dans le registre, il faut mettre la broche RCLK à bas. Pour écrire dans les bascules, il faut passer l’horloge de stockage à bas. A chaque impulsion d’horloge, on passe à la bascule suivante. Pour simplifier notre code, nous allons définir cette procédure dans la fonction writeRegister().
Pour montrer le principe du registre à décalage, un exemple courant est de brancher des leds à ses sorties que nous allons faire clignoter les unes à la suite des autres.

//Constants
#define number_of_74hc595s 1
#define numOfRegisterPins number_of_74hc595s * 8
#define SER_Pin D1
#define RCLK_Pin D2
#define SRCLK_Pin D3

//Variables
boolean registers [numOfRegisterPins] ={0, 0, 0};

void setup(){
//Init Serial USB
Serial.begin(115200);
Serial.println(F("Initialize System"));
//Init register
 pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
}

void loop(){
writeGrpled();
}

void clearRegisters(){/* function clearRegisters */ 
//// Clear registers variables 
for(int i = numOfRegisterPins-1; i >=  0; i--){
  registers[i] = LOW;
}}

void writeRegisters(){/* function writeRegisters */ 
//// Write register after being set 
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);
}

void setRegisterPin(int index,int value){/* function setRegisterPin */ 
////Set register variable to HIGH or LOW
registers[index] = value;
}

void writeGrpled(){/* function writeGrpled */ 
//// blink leds 
for(int i = numOfRegisterPins-1; i >=  0; i--){
   Serial.print(F("LED "));Serial.print(i);Serial.println(F(" HIGH"));
   setRegisterPin(i, HIGH);
   writeRegisters();
   delay(200); 
   Serial.print(F("LED "));Serial.print(i);Serial.println(F(" LOW"));
   setRegisterPin(i, LOW);
   writeRegisters();

      
}
}

Résultats

arduino-shiftregister-74hc595-result Utilisation d'un registre à décalage avec Arduino

Applications

  • Gérer jusqu’à 8 LEDS ou capteur avec trois broches d’un microcontrôleur
  • Gérer un afficheur 7 segments ou plus

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie