IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Multiplexage d'afficheurs sept segments


Sujet :

Arduino

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2019
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2019
    Messages : 64
    Points : 23
    Points
    23
    Par défaut Multiplexage d'afficheurs sept segments
    Bonjour à tous,

    Mon projet est la mise au point d'un fréquencemètre affichant la valeur de la fréquence sur 5 digits multiplexés.

    Avec votre aide, j'ai terminé la première partie qui est la mesure d'une fréquence que j'affiche pour l'instant sur mon moniteur.

    J'ai attaqué la deuxième partie qui n'est peut être pas la meilleure méthode pour multiplexé des afficheurs, mais j 'apprends...
    Dans cette partie, à partir de la fonction loop(), j'appelle des fonctions : unité, dizaine, centaine ect…

    Par ex. dans la fonction " void unit() " j'ai écrit " variable = variable%10; "pour récupérer le chiffre unité et l'afficher sur le port B en binaire.

    Mon problème est … comment récupérer le résultat de mon modulo ici 5 et l'écrire sur le port B dans la fonction unit.
    j'adapterai ensuite pour les fonctions dizaine, centaine…

    A noter que pour le test, dans chaque fonction j'ai écrit sur les ports B directement (en gras).


    Cordialement


    Pat42


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    int variable= 15325;
      
      const int Affich_A = 4;      //  Cinq afficheurs multiplexés par un 4028 //port D Arduino
      const int Affich_B = 6;   
      const int Affich_C = 7;   
      
      const int Seg_A = 8;        //  Sept segments commandés par un 4513 // Port B  Arduino
      const int Seg_B = 9;
      const int Seg_C = 10;
      const int Seg_D = 11;
    
    void setup() {
       pinMode (Affich_A,OUTPUT); 
       pinMode (Affich_B,OUTPUT);
       pinMode (Affich_C,OUTPUT);
      
       pinMode (Seg_A,OUTPUT);        
       pinMode (Seg_B,OUTPUT); 
       pinMode (Seg_C,OUTPUT); 
       pinMode (Seg_D,OUTPUT);
       
       digitalWrite(Affich_A,0); 
       digitalWrite(Affich_B,0); 
       digitalWrite(Affich_C,0); 
    
       digitalWrite(Seg_A,0);
       digitalWrite(Seg_B,0);
       digitalWrite(Seg_C,0);  
       digitalWrite(Seg_D,0);
    }
    
    void loop() {
    unit();
    dizaine();
    centaine();
    millier();
    diz_millier();
    }
    
    void unit(){ variable = variable % 10;
    PORTD &= B00000000; //  reset afficheur dizaine de millier   equivaut  à l' allumage afficheur unité
    
    PORTB |= B00000001;  //  pour test, afiche 1 sur l'afficheur unité
    delay(6);
    PORTB &= B00000000;  // reset affichage
    }
    
    void dizaine(){        // pas besoin de resetter l'afficheur unité car deja a 0
    PORTD |= B00010000;   //  allumage afficheur dizaine
    PORTB |= B00000010;   //  pour test, affiche 2 sur afficheur dizaine
    delay(6);
    PORTB &= B00000000;      //reset affichage
    
    }
    void centaine(){
    PORTD &= B00000000;   // reset afficheur dizaine
    PORTD |= B01000000;   // allumage afficheur centaine
    PORTB |= B00000011;   // pour test, affiche 3 sur afficheur dizaine
    delay(6);
    PORTB &= B00000000;   // reset affichage
    }
    
    void millier(){
    
    PORTD &= B00000000;   // reset afficheur centaine
    PORTD |= B01010000;   // allumage afficheur millier
    PORTB |= B00000100;   //  pour test, affiche 4 sur afficheur centaine
    delay(6);
    PORTB &= B00000000;   // reset affichage
    }
    
    void diz_millier(){
    PORTD &= B00000000;   //  reset afficheur centaine
    PORTD |= B10000000;   // allumage afficheur dizaine de millier
    PORTB |= B00000101;   //  pour test, affiche 5 sur afficheur centaine
    delay(6);
    PORTB &= B00000000;   // reset affichage
    }

  2. #2
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour Pat42
    Citation Envoyé par Pat42 Voir le message
    Mon problème est … comment récupérer le résultat de mon modulo ici 5 et l'écrire sur le port B dans la fonction unit.
    j'adapterai ensuite pour les fonctions dizaine, centaine…
    Pour écrire une valeur, simplement PORTB = variable;

    Dans ton exemple, tu t'es "créé" un problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void unit(){ variable = variable % 10;
    Aprés ça dans unit(), ta variable globale est "perdue" pour dizaine(), centaine()...

    Fais plutôt ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void unit(){ byte varUnit = variable % 10;
    et
    PORTB = varUnit;
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2019
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2019
    Messages : 64
    Points : 23
    Points
    23
    Par défaut multiplexage
    Super, ça fonctionne.

    Merci pour ton aide.

    Pat42

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. envoi de données vers un afficheur 7 segments
    Par Inaha dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/06/2013, 09h02
  2. Horloge LCD sept segments
    Par Sub0 dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 03/02/2013, 12h09
  3. [68HC11] Horloge numérique avec afficheur 7 segments
    Par Need you dans le forum Autres architectures
    Réponses: 2
    Dernier message: 08/04/2012, 09h31
  4. afficheur 7 segments
    Par Orguevirtuel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/04/2011, 21h17
  5. [PIC 16F84] Afficheur 7 segments
    Par Vipear dans le forum Autres architectures
    Réponses: 5
    Dernier message: 29/05/2009, 09h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo