contrôler la luminosité de mon affichage led

Bonsoir

J'ai une horloge avec des afficheurs 7 segments, j'aimerais pour cette horloge contrôler la luminosité sur la base de la luminosité capter par un LDR .. le problème c'est que je ne n'allume pas directement mes afficheurs mais les sorties de mon arduino sont connecter a des MOFSET qui contrôle l'allumage des leds de mes afficheurs ..

est ce que c'est possible de contrôler la luminosité de mes afficheurs avec ce genre de configuration ?

Merci

Bonjour,

Pour répondre plus précisément il faudrait avoir des détails sur le circuit et sur le programme.

Si on suppose qu'il s'agit d'un affichage multiplexé commandé par soft, il doit être possible de moduler la luminosité en jouant sur le temps d'allumage de chaque afficheur.

vous avez raison.

j'utilise des 74ch595 et MOFSET dans mon circuit d'affichage

un exemple du code qui contrôle l'affichage :

      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, LSBFIRST, 8);                  //Set DISPLAY 1 (top view from left to right)
      shiftOut(dataPin, clockPin, LSBFIRST, num[dezenaHora]);   //Set the Hour (ten)
      digitalWrite(latchPin, HIGH);

      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no digit
      shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no segment
      digitalWrite(latchPin, HIGH);

      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, LSBFIRST, 4);                  //Set DISPLAY 2
      shiftOut(dataPin, clockPin, LSBFIRST, num[unidadeHora]);  //Set the Hour (unit)
      digitalWrite(latchPin, HIGH);

      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no digit
      shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no segment
      digitalWrite(latchPin, HIGH);
      //-------------------

j'ai testé en ajoutant des delay entre les afficheur ..

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 8);                  //Set DISPLAY 1 (top view from left to right)
  shiftOut(dataPin, clockPin, LSBFIRST, num[dezenaHora]);   //Set the Hour (ten)
  digitalWrite(latchPin, HIGH);

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no digit
  shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no segment
  digitalWrite(latchPin, HIGH);
delayMicroseconds(affpause);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 4);                  //Set DISPLAY 2
  shiftOut(dataPin, clockPin, LSBFIRST, num[unidadeHora]);  //Set the Hour (unit)
  digitalWrite(latchPin, HIGH);

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no digit
  shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no segment
  digitalWrite(latchPin, HIGH);
delayMicroseconds(affpause);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 2);                  //Set DISPLAY 3
  shiftOut(dataPin, clockPin, LSBFIRST, num[dezenaMinuto]); //Set the Minute (ten)
  digitalWrite(latchPin, HIGH);

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no digit
  shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no segment
  digitalWrite(latchPin, HIGH);
delayMicroseconds(affpause);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 1);                   //Set DISPLAY 4
  shiftOut(dataPin, clockPin, LSBFIRST, num[unidadeMinuto]); //Set the Minute (unit)
  digitalWrite(latchPin, HIGH);

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no digit
  shiftOut(dataPin, clockPin, LSBFIRST, 0);                  //Set no segment
  digitalWrite(latchPin, HIGH);
delayMicroseconds(affpause);

mais le résultat c'est que l'affichage clignote .. et c'est pas l'effet demander ..

Donc apparemment ce n'est pas un affichage multiplexé.
Les 74HC595 ont une entrée OE (ouput enable). Il doit être possible de modulé la luminosité en la commandant pas un signel PWM.

non c'est pas un affichage multiplexé

est ce que vous pouvez me donner un début de solution

Merci

est ce que vous pouvez me donner un début de solution

tu l'as eu le début de solution :

Les 74HC595 ont une entrée OE (ouput enable). Il doit être possible de modulé la luminosité en la commandant pas un signel PWM.

=Envoyer un signal rectangulaire sur l'entrée 0E des HC595 , et modifier la luminosité en changeant le rapport cyclique de ce signal rectangulaire. La commande AnaloWrite() sert à ça, elle aurait pu être nommée PwmWrite....

merci .. j'espère réussir dans cette manœuvre

donc je change cette ligne : "digitalWrite(latchPin, HIGH);" avec une autre utilisant analogWrite()

biensure je doit aussi changer les pins que j'utilise pour commander mes HC595 et utiliser des pins analog ..

Non, ce n'est pas le latch, mais output enable.

kamill:
Non, ce n'est pas le latch, mais output enable.

j'ai pas bien compris votre remarque ... :frowning:

j'ai compris votre remarque j'espère réussir cette manœuvre :frowning:

tout est dans ce lien ..

@esloch

-prends le temps d'observer une notice de circuit intégré HC595, tu y découvriras une entrée nommée Output Enable (OE), entrée servvant à activer les sorties du circuit intégré
Dans ton montage actuel OE est reliée à la masse.
Il s'agit maintenant de relier OE non plus à la masse mais à l'une des sorties numériques de ta carte Arduino capable d'être gérée par AnalogWrite()

-le but : faire 'clignoter' les afficheurs tellement rapidement que l'oeil ne distingue plus les allumages et extinctions mait voit une luminosité moyenne qui dépend de la proportion des 0 et des 1 dans le signal rectangulaire appliqué à OE. La commande AnalogWrite() s'en charge , elle n'a aucun rapport avec les entrées dites analogiques

Renseignes toi sur son fonctionnement, par exemple dans un des chapîtres du tutoriel recommandé aux débutants (cf Règles du Forum Francophone) :
https://zestedesavoir.com/tutoriels/686/arduino-premiers-pas-en-informatique-embarquee/745_les-grandeurs-analogiques/3432_et-les-sorties-analogiques-enfin-presque/

Output enable à 1 va mettre les sortie en haute impédance. S'il y a des mosfet en sortie du 74HC595, il faudra des résistances de pull down pour que ça fonctionne correctement.

kamill:
Output enable à 1 va mettre les sortie en haute impédance. S'il y a des mosfet en sortie du 74HC595, il faudra des résistances de pull down pour que ça fonctionne correctement.

c'est à dire :frowning: ...

j'ajoute une résistance à la masse à chaque sortie ??

al1fch:
@esloch

-prends le temps d'observer une notice de circuit intégré HC595, tu y découvriras une entrée nommée Output Enable (OE), entrée servvant à activer les sorties du circuit intégré
Dans ton montage actuel OE est reliée à la masse.
Il s'agit maintenant de relier OE non plus à la masse mais à l'une des sorties numériques de ta carte Arduino capable d'être gérée par AnalogWrite()

-le but : faire 'clignoter' les afficheurs tellement rapidement que l'oeil ne distingue plus les allumages et extinctions mait voit une luminosité moyenne qui dépend de la proportion des 0 et des 1 dans le signal rectangulaire appliqué à OE. La commande AnalogWrite() s'en charge , elle n'a aucun rapport avec les entrées dites analogiques

Renseignes toi sur son fonctionnement, par exemple dans un des chapîtres du tutoriel recommandé aux débutants (cf Règles du Forum Francophone) :
Et les sorties “analogiques”, enfin… presque ! - Arduino : premiers pas en informatique embarquée • Tutoriels • Zeste de Savoir

c'est clair .. juste une question :

Il s'agit maintenant de relier OE non plus à la masse mais à l'une des** sorties numériques** de ta carte Arduino capable d'être gérée par** AnalogWrite()**

j'ai plusieurs HC595 en série .. je relies toutes les OE à la même sorties numérique de ma carte arduino ?

oui si tu veux la même luminosité sur les divers afficheurs
non si tu veux des luminosités differentes !!

Bon

J'ai connecter les OE des HC595 a l'entrer A2 de mon arduino .. déclarer le port A2 au début du programme

int outputEnablePin = A2;

dans le définir comme port de sortie dans setup

pinMode(outputEnablePin, OUTPUT);

crée ce void :

void setBrightness() 
{
  analogWrite(outputEnablePin, 255);
}

que j'appelle au début de ma boucle loop
et je commence par faire quelques test
test 1 :

void setBrightness() 
{
  analogWrite(outputEnablePin, 255);
}

l'affichage est éteint

void setBrightness() 
{
  analogWrite(outputEnablePin, 0);
}

l'affichage fonctionne

void setBrightness() 
{
  analogWrite(outputEnablePin, 100);
}

l'affichage fonctionne aussi et je ne remarque pas de diminution de la luminosité !!

void setBrightness() 
{
  analogWrite(outputEnablePin, 200);
}

l'affichage est éteint

je me balance entre deux états .. éteint ou allumés .. et c'est pas l'effet demander ..

il y a une erreur quelques par c'est sure !! .... mais je ne sais pas ou ?

si vous avez une idée

Merci

Bonjour

si vous avez une idée

un peu de lecture : analogWrite() - Arduino Reference

Pourquoi avoir choisi une ' entrée analogique' pour exécuter AnalogWrite() ?
Ces entrées figurent-elles dans la liste des bornes utilisables pour ta carte s'agissant d'AnalogWrite() ?

La commande AnalogWrite() s'en charge , elle n'a aucun rapport avec les entrées dites analogiques

Renseignes toi sur son fonctionnement, par exemple dans un des chapîtres du tutoriel recommandé aux débutants (cf Règles du Forum Francophone) :
Et les sorties “analogiques”, enfin… presque ! - Arduino : premiers pas en informatique embarquée • Tutoriels • Zeste de Savoir

J'ai visiblement perdu mon temps en rédigeant mon message #9 !! j'en prends note

Je penser bien faire en choisissant une entrée analogique .. a priori c'est pas bon .. :-[ :-[ :-[

bon j'ai deux choix possible la borne 3 ou la 6 .. la 3 à490HZ et la 6 à 980 Hz .. il y a une différence ??

sinon .. j'ai brancher sur la borne 3 .. et ca marche .. j'ai juste un problème sur les leds qui devrais être éteint .. il y a une légère luminosité .. je doit mettre un pull down pour éliminer ce problème ???

Output enable à 1 va mettre les sortie en haute impédance. S'il y a des mosfet en sortie du 74HC595, il faudra des résistances de pull down pour que ça fonctionne correctement.

Note : j'utilise des F4905S .. des MOSFET P-Channel ..

c'est supposé afficher 00 ... :confused:

00.JPG

00.JPG

Note : j'utilise des F4905S .. des MOSFET P-Channel .

Montres dans un schéma ( éventiuellement à main levée) le raccordement des HC595, Mosfets et afficheurs
et abstiens toi de multiplier les fils de discussions sur le même thème !!

Sur cette base il te sera alors probablement proposé d'agir sur la grille des Mosfets pour les aider à commuter suffisemment rapidement. (décharger la grille) .... peut être un pull-up pour faciliter le blocage des Mosfets P.. tout depend de ton montage actuel.

esloch:
Note : j'utilise des F4905S .. des MOSFET P-Channel ..

Mets ton schéma.