problème de multiplexage

bonsoir cher tous ,
je viens écrire ici car je but sur un code d'afficheur 7 segment de 5 digits; en effet plus mon nombre de digit à activer augmente plus la tension sur la broche de mon arduino diminue ce qui rend l'afficheur sombre; j'aimerais vraiment que quelqu'un m'aide si possible. merci d'avance.

7SEGMENT05DigitsCatCom.ino (9.84 KB)

essaies de changer ton delay d'actualisation de multiplexage:

delay(5);

en par example

delay(20);

Toujours faire confiance au premier post

Il manque le schéma du montage. Plus on met de digits, plus on demande du courant. Mais il faut que l'alimentation suive. Cela à l'air de ne pas être le cas.

vileroi:
Toujours faire confiance au premier post

Il manque le schéma du montage. Plus on met de digits, plus on demande du courant. Mais il faut que l'alimentation suive. Cela à l'air de ne pas être le cas.

Si, il multiplexe, il y a seulement un digit allumé à chaque instant.
Puisque vous avez déclaré un tableau, vous devez savoir vous en servir. Essayez donc de réduire votre code à :

/*         multiplexage.ino

          fonctionnement de 5 afficheurs 7 segments Cathodes communes
*/

const int analogInPin = A1;  // Analog input pin that the potentiometer is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

int i, toto, recu[20];

boolean code7segments [10][7] = {
  {LOW, LOW, LOW, LOW, LOW, LOW, HIGH},     // code 0
  {HIGH, LOW, LOW, HIGH, HIGH, HIGH, HIGH}, // code 1
  {LOW, LOW, HIGH, LOW, LOW, LOW, HIGH}     // code 3
  // Je suis fainéant, je ne code que les digits entre 0 et 3
} ;

int pinsSegments [7] = {8, 2, 3, 4, 5, 6, 7} ;
int pinsDigits [5] = {12, 11, 10, 9, A0} ;

void setup()       {
  for (byte pin = 0 ; pin < 7 ; pin++) pinMode(pin, OUTPUT);
  for (byte digit = 0 ; digit < 5 ; digit++) pinMode(pinsDigits[digit], OUTPUT);
  Serial.begin(9600);
  Serial.println("Bonjour");
}

void loop()       {
  i = 0 ;
  //Serial.write('45');
  do {
    Serial.println("Entrez un nombre de 1 à 5 chiffres.");
    while ( Serial.available() > 0 ) {
      toto = Serial.read();
      if ((toto >= 48) && (toto <= 58)) { // si on a un chiffre
        recu[i] = toto - 48 ;
        Serial.print(recu[i]);
        i++;
      }
    }
    if (i > 5) Serial.println(" 5 chiffres seulement, abruti !");
    else Serial.println () ;
  } while (i > 5) ;
  while (i < 5) recu [i++] = 0 ;
  while (!Serial.available()) { // arrêt en tapant n'importe quoi sur le clavier
    for (i = 0 ; i < 5 ; i++) afficher (pinsDigits[i], recu[i]);
  }
}

void afficher (int quelDigit, int chiffre )      {
  // ce sous-programme reçoit 2 paramètres :
  // - le N° de l'afficheur et
  // - le chiffre à afficher

  // on éteins les segments
  for (int segment = 0 ; segment < 6 ; segment++)
    digitalWrite (pinsSegments [segment], LOW) ;
  digitalWrite(pinsSegments [6], HIGH); // zarbi

  digitalWrite(quelDigit, HIGH);

  for (int segment = 0 ; segment < 7 ; segment++)
    digitalWrite (pinsSegments [segment], code7segments [chiffre][segment]) ;
  delay(5);             //       5 ou 10 ms après la mise au point
  digitalWrite(quelDigit, LOW);
}

Sinon, effectivement vous avez un rapport cyclique d'allumage de chaque digit qui dépend du nombre de digits, et ça fait effectivement varier la luminosité perçue par l'oeil. Par contre si vous affichez 88888 ça consomme bien plus que si vous affichez 11111.

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