Aide problème afficheur 4 digits 7 segments

Hello all,

Voila j'ai un petit soucie de compréhension concernant le tuto 6 de U=RI sur les afficheurs 7 segments, j'ai réussi la première partie sauf que je bloque a l'endroit ou il attaque les 4x1digit de 7 segments.
Je refais le meme câblage qu'il fait a 2.41 et essaye de faire le meme code que lui.
Resultat rien ne s'affiche :open_mouth:
Je cromprend pas il paramètre les pin 10 11 12 et 13 comment parce que les sorties de chaque digit ne vont a aucune terre (GND) donc le courant ne passe pas ...
Je suis débutant dans le monde de l'électronique et le je comprend pas comment il boucle les digits pour les alterner ensuite ...

Voici mon code que j'ai fais, ne vous occuper pas des 1 2 et autre j'affiche juste un trait pour tester et ensuite j'essayerai avec des chiffres différents :

long ledPinA = 2;
long ledPinB = 3;
long ledPinC = 4;
long ledPinD = 5;
long ledPinE = 6;
long ledPinF = 7;
long ledPinG = 8;
long ledPinDP = 9;
long digit1 = 10;
long digit2 = 11;
long digit3 = 12;
long digit4 = 13;

void afficher0()
{
digitalWrite(ledPinA, HIGH); // Je veux juste afficher ce caractère la pour tester d'abord
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void afficher1()
{
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void afficher2()
{
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void afficher3()
{
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void afficher4()
{
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void afficher5()
{
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void afficher6()
{
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void afficher7()
{
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void afficher8()
{
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void afficher9()
{
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}

void setup()
{
pinMode(ledPinA, OUTPUT);
pinMode(ledPinB, OUTPUT);
pinMode(ledPinC, OUTPUT);
pinMode(ledPinD, OUTPUT);
pinMode(ledPinE, OUTPUT);
pinMode(ledPinF, OUTPUT);
pinMode(ledPinG, OUTPUT);
pinMode(ledPinDP, OUTPUT);
}

void afficherdigit1()
{
digitalWrite(digit1, LOW); // C'est ici je comprend pas comment ça peut retourner au GND
digitalWrite(digit2, HIGH); // moi ça "bug" et l'afficheur 4X7segments m'affiche rien
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
}

void afficherdigit2()
{
digitalWrite(digit1, HIGH);
digitalWrite(digit2, LOW);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
}

void afficherdigit3()
{
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, LOW);
digitalWrite(digit4, HIGH);
}

void afficherdigit4()
{
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, LOW);
}

void loop()
{
afficherdigit1();
afficher0();
delay(50);
afficherdigit2();
afficher0();
delay(50);
afficherdigit3();
afficher0();
delay(50);
afficherdigit4();
afficher0();
delay(50);
}

Merci beaucoup d'avance !!

Bonjour,

Mets ton code entre balises -> voir ici.

Il y a visiblement un problème dans ton programme. Pour afficher les segments tu mets le digit à LOW et les segments à LOW, ça ne va pas fonctionner.

Il y a deux types d'afficheurs multiplexés:

  • anode commune -> pour afficher il faut mettre la commande du digit à HIGH et la commande des segments à LOW
  • cathode commune -> pour afficher il faut mettre la commande du digit à LOW et la commande des segments à HIGH

Salut,

merci de mettre ton code entre balise 'code' c'est le bouton en haut à gauche voir ici. D'aprés ce que j'ai compris du tuto, les broches 10 à 13 servent à sélectionner un des 4 afficheurs dans le cas d'un composant comprenant 4 afficheurs 7 segments. Le courant de retour va passer par le connecteur GND commun à tous les segments (leds).

Pour les fils d'alimentation +5v et GND ( 0v on ne parle pas de "terre" ici ) Il faut te baser sur les spécifications techniques du composant pour réaliser le câblage correct. J'ai trouvé ici quelque chose qui y ressemble. Comme expliqué par Kamill le courant de retour passe par les ports 10 à 13 selon l'état que tu affectes par programme. Par contre j'ai bien compris que tu ne veux afficher qu'un tiret sur le digit 1 et là il y a bien un LOW sur le port 10 et un HIGH sur le port 2.

Il est possible que le délai de 50 ms soit trop court pour rendre visible le segment. Pour ma part je tenterais déjà de simplifier le code pour vérifier les circuits sur chaque afficheur. Ensuite je passerais à la partie multiplexage en faisant 'tourner' sur les afficheurs.

il est possible que tu allumes bien ton segment, mais ta boucle est faite pour plusieurs, ce qui signifie que tu allumes le segment A pour 50ms puis tu l'éteinds pour 150ms, puisque tu n'as rien initialisé par ailleurs.
modifies ta loop pour tester

void loop()
{
  afficherdigit1();
  afficher0();
  
}

Bonjour a tous,

je suis un fana de Youtube mais ici, son utilisation me laisse songeur. Pas possible de copier le code, pour le cablage, il faut arreter la video, faire une copie d'ecran ... bof bof.

En plus, il n'insiste pas sur les 2 modeles diponibles, cathode ou anode commune et il ne place pas de transistor dans le fil commun de chaque digit. Or, quand il affiche le chiffre 8 avec le point, il passe 8 x 20mA soit 160mA dans l'etage de sortie du micro. Soit BEAUCOUP trop et si son montage fonctionne c'est parce que les developpeurs du circuit ont prevu des securites. Ce n'est pas une bonne maniere de travailler.

Je te conseille plutot un peu de lecture que tu trouveras ici :

Parallax

electronicsblog.net

Bonne lecture.

Jacques