28 Mars 2014

Arduino leçon 14 : les afficheurs 7 segments

Ces afficheurs contiennent 7 leds qui forment un chiffre. Sur la plupart, il existe une 8ème led pour le point décimal.
pas FB
afficheur 7 seg les segments

Les deux types d'afficheurs

Ces 8 led sont toutes reliées soit par leur anode, soit par leur cathode.
Voici les 2 schémas de principe

schéma anode commune schéma cathode commune

L'électrode libre peut être reliée à des broches d'Arduino par une résistance mais généralement on utilise un circuit spécialisé (décodeur) qui sélectionne les led en fonction du chiffre souhaité.

décodeur 7 segments

On voit à droite les 16 chifres hexadécimaux qu'on peut obtenir à partir de 4 entrées.

Exercice

On relie les entrées A, B, C, D du décodeur aux sorties 2 à 5 d'Arduino.
On écrit un programme qui compte continuellement de 0 à 9 avec 3 secondes d'arrêt sur chaque chiffre.
Les pattes A, B, C, D correspondent aux valeurs d'entrée 1, 2, 4, 8.
Les entrées /LT, /RBI, /RBO sont à relier à Vcc (+5).
Les sorties a à g correspondent aux segments de l'afficheur.

7447

Voici le schéma de nos afficheurs :

brochage

Les broches 3 et 8 sont reliées et correspondent à l'anode des segments.
Remarque: Je recommande de mettre une résistance entre le décodeur et chaque segment.



Le programme


          /*           Afficheur.ino
                     
                fait défiler les chiffres de 0 à 9 pendant 2 secondes chacun.
          */
          #define poids1 2
          #define poids2 3
          #define poids4 4
          #define poids8 5
          byte chiffre=0;
          long heure;

          void setup() {
                pinMode (poids1, OUTPUT);
                pinMode (poids2, OUTPUT);
                pinMode (poids4, OUTPUT);
                pinMode (poids8, OUTPUT);
                heure = millis();
                Serial.begin(9600);
          }
         
          void loop(){
                if ( millis() > heure) {
                      eteins();
                      affiche();
                      heure += 2000;
                }
          }
         
          void eteins() {
                digitalWrite(poids1, LOW);
                digitalWrite(poids2, LOW);
                digitalWrite(poids4, LOW);
                digitalWrite(poids8, LOW);
          }
         
          void afficher ( byte chip, byte chiffre )      {
                // ce sous-programme reçoit 2 paramètres :
                // - le N° de l'afficheur et
                // - le chiffre à afficher
                byte pin = chip + 10; // pin 11 ou 12 pour afficheur 1 ou 2      
               
                // on éteins les segments
                digitalWrite(poids1, LOW);
                digitalWrite(poids2, LOW);
                digitalWrite(poids4, LOW);
                digitalWrite(poids8, LOW);
               
                digitalWrite(pin, HIGH);
               
                switch (chiffre) {
                    case 0 :
                            break;
                    case 1 :
                            digitalWrite(poids1, HIGH);
                            break;
                    case 2 :
                            digitalWrite(poids2, HIGH);
                            break;
                    case 3 :
                            digitalWrite(poids1, HIGH);
                            digitalWrite(poids2, HIGH);
                            break;
                    case 4 :
                            digitalWrite(poids4, HIGH);
                            break;
                    case 5 :
                            digitalWrite(poids1, HIGH);
                            digitalWrite(poids4, HIGH);
                            break;
                    case 6 :
                            digitalWrite(poids2, HIGH);
                            digitalWrite(poids4, HIGH);
                            break;
                    case 7 :
                            digitalWrite(poids1, HIGH);
                            digitalWrite(poids2, HIGH);
                            digitalWrite(poids4, HIGH);
                            break;
                    case 8 :
                            digitalWrite(poids8, HIGH);
                            break;
                    case 9 :
                            digitalWrite(poids1, HIGH);
                            digitalWrite(poids8, HIGH);
                            break;
                    }
                delay(5);
                digitalWrite(pin, LOW);
              }         //     fin du switch
         
              chiffre = (chiffre + 1) %10;
              Serial.println(chiffre);
          }




Si vous voulez continuer chez vous, je vous suggère un second programme : afficher un chiffre entré par le moniteur série.
Le câblage sera exactement le même.



Décodeur décimal -> 7 segments

Le 7447 décode ses entrées jusqu'à 10 et commande les sorties correspondant aux segments utiles.
Si on lui envoie une valeur supérieure (par exemple 8 et 4), il affiche n'importe quoi.

Il existe d'autres décodeurs qui savent compter en hexadécimal (de 0 à 15).
Pour une valeur d'entrée de 10 à 15, ils affichent les lettres A à F.





haut de la page
flèche gauche Page Précédente : les transceivers           Page Suivante : le multiplexage flèche droite

Valid XHTML 1.0 Transitional