[TUTORIEL] Afficheur 7 segments + registre à décalage

Informations et questions sur les composants tiers de la boutique (émetteur/récepteur RF, capteurs...)

[TUTORIEL] Afficheur 7 segments + registre à décalage

Message non lude Laetitia » Lun 17 Juin 2013 17:27

Bonjour,

Vous avez déjà essayé de faire quelques montages avec des afficheurs 7 segments, mais vous vous dites que monopoliser 8 pins sur votre Arduino, ou même 7 si vous omettez le point décimal, ça fait quand même beaucoup ? Il est donc temps de se pencher sur les registres à décalage.
Le registre à décalage 74HC595 est un registre 8 bits SIPO (Serial In, Parallel Out), ce qui signifie que l'on peut lui envoyer un octet de données et lire les 8 bits séparément à la sortie. Dans le cas présent, les octets envoyés seront les commandes d'allumage des différents segments de l'afficheur. Ces octets (bytes) seront envoyés via la pin 11 de l'Arduino.
La pin 12 est reliée au latch du registre, qui agit comme un bouton qui fige les sorties du registres lorsqu'on appuie dessus, le temps de finir de séparer les bits de l'octet reçu en entrée. Il s'agit de la pin 13 du registre, OE (Output Enable), actif à l'état bas, qui mise à l'état haut figera les sorties.

- MATÉRIEL -

- Arduino Uno (x1)
- Afficheur 7 segments (x1)
- Bouton poussoir (x1)
- Résistance 10 kOhms (x1)
- Registre à décalage 75HC595N (inclus dans le Starter Kit, bientôt en boutique)

- SCHÉMA DU MONTAGE -

Schéma_7SEG+74HC595.png
Schéma_7SEG+74HC595.png (52.2 Kio) Vu 2839 fois

:!: Le schéma est prévu pour un afficheur à anode commune, si vous en avez un à cathode commune il faut modifier le montage : toutes les broches reliées au +5V doivent être mises à la masse (GND). Le code est à changer également, l'inversion de l'état des bits n'est plus nécessaire (voir ci-dessous).
En cas de doute référez-vous à la documentation disponible sur le forum !

Brochage du registre à décalage
Pinout_74HC595.png
Pinout_74HC595.png (7.46 Kio) Vu 2839 fois

- CODE -

Code: Tout sélectionner
// Déclaration des pins auxquelles sont reliés le registre et le bouton
const int latchPin = 8;
const int clockPin = 12;
const int dataPin = 11;
const int button = 2;

// Déclaration des constantes liées au bouton
int compte = 0;
int buttonState = LOW;
int prevState = LOW;

// Définition des segments à allumer pour l'affichage des chiffres :
// Seuls la barre centrale "G" et le point décimal sont éteints pour afficher 0, etc.
const byte digit[10] =
{
 //ABCDEFG° 
  B11111100, // 0
  B01100000, // 1
  B11011010, // 2
  B11110010, // 3
  B01100110, // 4
  B10110110, // 5
  B10111110, // 6
  B11100000, // 7
  B11111110, // 8
  B11110110, // 9
};

void setup()
{
  pinMode(button, INPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
 
  Serial.begin(9600);
}

void loop()
{
  buttonState = digitalRead(button);
  // si l'état du bouton a changé
  if (buttonState != prevState)
  {
    // et qu'il est haut (= on appuie dessus)
    if (buttonState == HIGH)
    {
      // on incrémente le compteur
      compte++;
      // sauf s'il a dépassé 9...
      if (compte > 9)
      {
        // ...auquel cas on le réinitialise
        compte = 0;
      }
    }
  }
  // inversion des bits pour avoir un 1 qui correspond à un LOW en sortie
  // !! (afficheur à anode commune uniquement)
  byte chiffre = ~digit[compte];
  Serial.println(chiffre);
  // on bloque l'état des LEDs pendant qu'on envoie les bits
  digitalWrite(latchPin, LOW);
  // on envoie les données
  shiftOut(dataPin, clockPin, LSBFIRST, chiffre);
  // et on affiche le nombre souhaité
  digitalWrite(latchPin, HIGH);
  // et on stocke l'état du bouton pour le prochain tour
  prevState = buttonState;
}

L'intérêt de ce tutoriel étant de se concentrer sur le registre à décalage (branchements et fonctionnement), pas de difficulté majeure au niveau du code, qui ressemble volontairement à son homologue sans le registre...

- VIDÉO -



C'est tout pour cette fois ! J'espère que ce tutoriel vous aura plu, et bonne bidouille en attendant le prochain !
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 296
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Retourner vers Composants tiers

Qui est en ligne

Utilisateurs parcourant ce forum: Yahoo [Bot] et 1 invité

cron