(Résolu) - Afficheur 7 segments mauvais affichage

bonjour à tous
j'ai tenté de réaliser le tuto de cette page pour l'afficheur 7 segments de Eskimon mais mon afficheur n'affiche pas les bons chiffres.
J'ai refait 3 fois le câblage, revérifié les transistor, décodeurs, résistances et tout semble ok.
Mais mauvais affichage sur : 1, 3,4,5,6,7,9.
Le 2, le 8 et le 0 s'affichent correctement.

l'afficheur 7 segments est : 5011BS
le décodeur : CD4543BE
les transistors : 2N2222A
7 résistances de 330 ohms
2 réistances de 2,2k

Je ne sais pas si c'est les composants qui ne sont pas adaptés, le code... :upside_down_face: :roll_eyes:

le programme :

// définition des broches du décodeur 7 segments
// (vous pouvez changer les numéros si vous voulez)
const int bit_A = 2;
const int bit_B = 3;
const int bit_C = 4;
const int bit_D = 5;

// définitions des broches des transistors pour chaque afficheur
const int alim_dizaine = 6; // les dizaines
const int alim_unite = 7;   // les unites

void setup()
{
    // Les broches sont toutes des sorties
    pinMode(bit_A, OUTPUT);
    pinMode(bit_B, OUTPUT);
    pinMode(bit_C, OUTPUT);
    pinMode(bit_D, OUTPUT);
    pinMode(alim_dizaine, OUTPUT);
    pinMode(alim_unite, OUTPUT);

    // Les broches sont toutes mises à l'état bas
    digitalWrite(bit_A, LOW);
    digitalWrite(bit_B, LOW);
    digitalWrite(bit_C, LOW);
    digitalWrite(bit_D, LOW);
    digitalWrite(alim_dizaine, LOW);
    digitalWrite(alim_unite, LOW);
}

void loop() // fonction principale
{
    // boucle qui permet de compter de 0 à 99 (= 100 valeurs)
    for(char i = 0; i<100; i++)
    {
        // appel de la fonction affichage avec envoi du nombre à afficher
        afficher_nombre(i);
    }
}

// fonction permettant d'afficher un nombre sur deux afficheurs
void afficher_nombre(char nombre)
{
    long temps; // variable utilisée pour savoir le temps écoulé...
    char unite = 0, dizaine = 0; // variable pour chaque afficheur

    if(nombre > 9) // si le nombre reçu dépasse 9
    {
        dizaine = nombre / 10; // on récupère les dizaines
    }

    unite = nombre - (dizaine*10); // on récupère les unités

    temps = millis(); // on récupère le temps courant

    // tant qu'on a pas affiché ce chiffre pendant au moins 500 millisecondes
    // permet donc de pouvoir lire le nombre affiché
    while((millis()-temps) < 500)
    {
        // on affiche le nombre

        // d'abord les dizaines pendant 10 ms

        // le transistor de l'afficheur des dizaines est saturé,
        // donc l'afficheur est allumé
        digitalWrite(alim_dizaine, HIGH);
        // on appel la fonction qui permet d'afficher le chiffre dizaine
        afficher(dizaine);
        // l'autre transistor est bloqué et l'afficheur éteint
        digitalWrite(alim_unite, LOW);
        delay(10);

        // puis les unités pendant 10 ms

        // on éteint le transistor allumé
        digitalWrite(alim_dizaine, LOW);
        // on appel la fonction qui permet d'afficher le chiffre unité
        afficher(unite);
        // et on allume l'autre
        digitalWrite(alim_unite, HIGH);
        delay(10);
    }
}

// fonction écrivant sur un seul afficheur
// on utilise le même principe que vu plus haut
void afficher(char chiffre)
{
    digitalWrite(bit_A, LOW);
    digitalWrite(bit_B, LOW);
    digitalWrite(bit_C, LOW);
    digitalWrite(bit_D, LOW);

    if(chiffre >= 8)
    {
        digitalWrite(bit_D, HIGH);
        chiffre = chiffre - 8;
    }
    if(chiffre >= 4)
    {
        digitalWrite(bit_C, HIGH);
        chiffre = chiffre - 4;
    }
    if(chiffre >= 2)
    {
        digitalWrite(bit_B, HIGH);
        chiffre = chiffre - 2;
    }
    if(chiffre >= 1)
    {
        digitalWrite(bit_A, HIGH);
        chiffre = chiffre - 1;
    }
}

sur ce code, il m'affiche A (a,b,c, ,e,f,g)

// définition des broches du décodeur 7 segments
// (vous pouvez changer les numéros si vous voulez)
const int bit_A = 2;
const int bit_B = 3;
const int bit_C = 4;
const int bit_D = 5;

// définitions des broches des transistors pour chaque afficheur
const int alim_dizaine = 6; // les dizaines
const int alim_unite = 7;   // les unites

void setup()
{
    // Les broches sont toutes des sorties
    pinMode(bit_A, OUTPUT);
    pinMode(bit_B, OUTPUT);
    pinMode(bit_C, OUTPUT);
    pinMode(bit_D, OUTPUT);
    pinMode(alim_dizaine, OUTPUT);
    pinMode(alim_unite, OUTPUT);

    // Les broches sont toutes mises à l'état bas
    digitalWrite(bit_A, LOW);
    digitalWrite(bit_B, LOW);
    digitalWrite(bit_C, LOW);
    digitalWrite(bit_D, LOW);
    digitalWrite(alim_dizaine, LOW);
    digitalWrite(alim_unite, LOW);
}

void loop()
{
  digitalWrite(alim_dizaine, HIGH);
    digitalWrite(bit_A, LOW);
    digitalWrite(bit_B, HIGH);
    digitalWrite(bit_C, HIGH);
    digitalWrite(bit_D, LOW);

}

Salut
Si tu consultais la datasheet : CD4543BE
Avec les entrées à LOW HIGH HIGH LOW tu devrais afficher 6.
Donc je dirais que tu as permuté les segments B et D.

si j'inverse B et D : plus rien ne s'allume.

Remarque bien que je n'ai pas parlé des entrées B et D.
Je parle des segments, donc des liaisons entre CD4543BE et afficheur, je ne parle pas de code.

ok...je vais checker cela.
Les broches 6 et 2 donc ?

résolu pour le chiffre 0, 1, 2, 4, 6, 8

les chiffres 3, 5 7, 9 mauvais affichage

Adopte le même raisonnement.

je viens de comprendre.....
je vais donc regarder ce qu'il fait sur le chiffre 3 par exemple et en deduire le mauvais affichage de quel led...

kool, je teste

Quelle est la différence entre A et 6 ?
Les segments B (allumé pour le A) et D (allumé pour le 6).

1 Like

affaire résolue...
merci à toi @hbachetti ...
vraiment au top ce forum...
affichage impeccable, je vais pouvoir continuer mon projet...

mais une question, est-ce que le branchage de eskimon est faux ?
j'ai vraiment suivi à la lettre le branchement
merci encore

L'afficheur qu'il a utilisé n'a pas forcément le même brochage.

Attention quand même pour l’instant c’ est l’hiver mais au printemps bourgeons et feuilles…… :rofl:

1 Like

Hé hé.... :rofl: pis un eskimon dans les branches... attention.... Si à part pour faire des bâtonnets...

Voici la carte en préparation.

Je mettrai le projet entier une fois fini.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.