Comment avoir plus d’entrées/sorties avec Arduino

Sur un projet complexe, il se peut que le nombre d’entrées/sorties dont dispose le Arduino Uno ne soit pas suffisant.

Dans ce cas, il y a 3 solutions :

  • Utiliser un Arduino Mega. [Un peu plus chère et plus encombrant qu’un Arduino Uno]
  • Programmer un microcontrôleur indépendamment d’Arduino et en choisir un qui a plus d’entrées/sorties qu’un ATmega328p (le microcontrôleur de l’Arduino Uno). [Plus complexe à mettre en œuvre]
  • Utiliser un composant qui permet de multiplier les ports d’entrées/sorties.

C’est cette dernière solution que je vais expliquer aujourd’hui.

Pour cela nous allons utiliser un composant nommé 74HC595 qui peut être utilisé comme un convertisseur série => parallèle.

Amazon.com: (Pack of 25 Pieces) MCIGICM 74HC595 74595 SN74HC595N 8-Bit  Shift Register DIP-16 IC 74hc595 Shift registers: Industrial & Scientific
74HC595

Le brochage de mon montage étant complexe, je ne vais pas le détailler point à point. Je vais donc exposer le principe de brochage en me reposant sur la datasheet du composant (https://www.ti.com/lit/ds/scls041i/scls041i.pdf).

Mon montage
Vue du dessus d’un 74HC595

Les fonctions des PINs

Ainsi on va relier les broches Qn (n allant de A à H) du 74HC595 aux résistances de 220 Ohm qui elles même seront reliées aux LEDS.

La broche QH’ elle n’est reliée à rien.

La cathode des LEDS est reliée à la masse.

Bien évidemment les broches GND et VCC du 74HC595 seront respectivement branchées à la masse et à 5V.

La broche OE barre (j’écris barre pour représenter la barre au dessus de OE) est raccordée à la masse.

La broche SRCLR barre est raccordée à 5V.

On en vient aux broches du 74HC595 qui vont être connectés à l’Arduino :

  • La broche SER du 74HC595 se branche à la broche 12 de l’Arduino (DATA_PIN).
  • La broche RCLK du 74HC595 se branche à la broche 11 de l’Arduino (LATCH_PIN).
  • La broche SRCLK du 74HC595 se branche à la broche 9 de l’Arduino (CLOCK_PIN).

Voici un schéma qui résume le fonctionnement du 74HC595 :

fonctionnement du 74HC595

Comme on peut le visualiser, on a une donnée qui entre sur DATA_PIN, et cette donnée est enregistrée dans un registre par un signal d’horloge CLOCK_PIN.

Et lorsque que le LATCH_PIN passe à l’état haut, les données en série du DATA_PIN sont renvoyé sur les sorties Qn (n allant de A à H).

Ainsi on réalise une conversion série => parralèle.

Voici le code que j’ai mis en œuvre pour tester ce composant :

#define CLOCK_PIN 9  // SRCLK sur 74HC595
#define LATCH_PIN 11 // RCLK sur 74HC595
#define DATA_PIN 12  // SER sur 74HC595
#define DELAY_TIME 1500

byte leds = 0;

void setup() {
  pinMode(LATCH_PIN, OUTPUT);
  pinMode(DATA_PIN, OUTPUT);  
  pinMode(CLOCK_PIN, OUTPUT);
}

void updateShiftRegister() {
   digitalWrite(LATCH_PIN, LOW);
   shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, leds);
   digitalWrite(LATCH_PIN, HIGH);
}

void displayOnLeds(byte ledsNumber) {
  leds = ledsNumber;
  updateShiftRegister();
  delay(DELAY_TIME);
}

void loop() {
  leds = 0;
  updateShiftRegister();
  delay(DELAY_TIME);
  displayOnLeds(0b11111111);
  displayOnLeds(0b10101010);
  displayOnLeds(0b00011000);
  displayOnLeds(0b11100000);
  displayOnLeds(0b00000111);
}

Le code n’a pas trop de difficulté, si ce n’est l’utilisation de la fonction shiftOut() (dont voici la doc : https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/).

En gros c’est cette fonction qui envoi la données que nous avons indiqué via leds à la broche DATA_PIN, et cela en tenant compte de l’horloge CLOCK_PIN et du fait qu’on commence par le bit de poids faible ou de poids fort.

On utilisera la constante MSBFIRST pour le bit de poids fort ou LSBFIRST pour le bit de poids faible.

Et voici ce que le montage donne en vidéo :

Pour marque-pages : Permaliens.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *