Piloter un afficheur SC40-19SURKWA

Bonjour tout le monde !
Je dois piloter 4 afficheurs à 7 segments (il y a aussi un point mais je ne l'utiliserai pas). Ces afficheurs sont tout nus, juste les LEDs et 10 contacts pour les alimenter (2 GND et 8 pour chaque segment). Pour ceux que ça intéresse, voici la datasheet.
Donc 28 broches d'utilisées sur l'Arduino, rien que pour ça...
J'ai écrit 4 Switch (1 par afficheur) de 10 Case (1 pour chaque chiffre) dont chaque Case envoie les 7 digitalWrite low ou high pour allumer ou éteindre chaque segment. C'est très bourrin, on peut surement faire mieux avec des tableaux à n dimensions, mais bon, ça devrait marcher...
C'est destiné à afficher l'heure sous forme "h mm" (pas de 0 non significatif sur les heures).
Plutôt que de mettre un delay(60000) en fin de loop je pense mettre 4 if pour tester si l'un des chiffres a changé et seulement alors enquiller sur le Switch correspondant (pas la peine de rafraichir un affichage qui, pour les dizaines d'heures, ne changera que... toutes les 10 h.. Est-ce une bonne façon de faire ?
Au niveau hard, ces afficheurs sont alimentés en 10 V maxi, j'ai testé le 9V de l'alim de la carte Arduino Mega et c'est propre. Mais me faut un relais ou équivalent entre chaque broche de la carte et chaque segment des afficheurs pour passer du 5V au 9V.
J'ai trouvé des blocs de relais de ce genre mais n'y a-t-il pas moyen de faire autrement, genre circuit intégré plus diodes ou autre ? Ces modèles sont assez onéreux et volumineux à mon goût. C'est surtout sur ce point que je cale.
Merci d'avance.

Piloter un afficheur 7 segments avec des relais ? Est-ce une blague ?

Une petite recherche sur Google ne ferait pas de mal.
Pour des afficheurs à cathode commune, un CD4511, ou un MAX7219.

Bonjour

Un bloc de relais permettrait de 'sonoriser' les changements d'état des segments !!! (tic tac des secondes)

L'affichage 7 segments (éventuellement multiplexé) est avec le chenillard un de sujets les plus traités depuis 40 ans.... un moteur de recherche n'aura pas de mal à proposer de nombreuses solutions...sans relais.
Avec relais ? 'y'en a aussi'....

hbachetti:
Une petite recherche sur Google ne ferait pas de mal.
Pour des afficheurs à cathode commune, un CD4511, ou un MAX7219.

Est ce que tu as bien vu les caractéristiques des afficheurs: tension 7.8 à 10V. Intensité par segment 370mA (max)

Tu peux envisager de les piloter par un mosfet canal P commandé par un petit transistor NPN.

28 commandes ça fait beaucoup, tu peux aussi envisager un multiplexage.

Des afficheurs à LED, ça existe encore ? A l'époque ou je faisais ça (ça ne me rajeunit pas), on tirait parti de la persistance rétinienne, en alimentant ces trucs là en séquence, sur une fréquence de l'ordre de 100 Hz minimum, et sur un intervalle de temps de 10 ms on allumait 1 ms, voire un peu plus si on éclairait en séquence les digits l'un après l'autre : on pouvait aussi combiner ce multiplexage entre les segments / les digits. On arrive ainsi à diviser par dix environ la consommation d'énergie et, ce qui va avec, l'échauffement des portes qui commandent ces trucs là. Cela ne nous serait pas venu à l'idée de commander ces afficheurs avec des relais.

Le multiplexage ne diminue pas la consommation d'énergie. Si on allume l'afficheur 1/10 eme du temps il faudra (en première approximation) multiplier l'intensité par 10 pour avoir la même luminosité.

Il parait possible un CD4511 (ou plusieurs si pas de multiplexage) et des Mosfet P , la sortie des CD4511 est assez polyvalente. Le CD4511 apporterait la fonction décodage 7segments ce qui réduirait le nombre de sorties de microcontrôleur à piloter.

Oui, Avec un multiplexage il faut prendre en considération le courant plus élevé à injecter dans les segments
Pour un multiplexage 1 sur 4 je ne multipliais le courant que par 3, le resenti visuel était bon , léger gain énergétique donc dans ce cas . (le courant maxi instantané suppotrtable par un segment est le facteur limitant, pour 4 afficheurs la contrainte est modérée)

kamill:
Le multiplexage ne diminue pas la consommation d'énergie. Si on allume l'afficheur 1/10 eme du temps il faudra (en première approximation) multiplier l'intensité par 10 pour avoir la même luminosité.

Non monsieur. Le meme courant, en affichant 1 ms sur 10, produit la meme impression lumineuse en sortie de la rétine, sur le nerf optique. Cela parce que la rétine marche en produisant des rafales de signaux sur le dit nerf, et qu'il suffit d'exciter un neurone pour qu'il envoie le signal sur le nerf. On arrivait meme à multiplexer à des fréquences bien plus importantes que cela, car la fréquence de décharge des neurones est de l'ordre du kilohertz.

Mon expérience pragmatique sur le resenti visuel diffère, j'étais (c'est loin tout ça !!) amené à faire circuler en multiplexage en courant plus élevé que sans, (sans devoir multiplier ce courant par le nombre d'afficheurs à multiplexer). Sans cette augmentation les clients n'était pas satisfaits... le client étant roi on ne lui reprochais pas une rétine et un nerf optique atypiques.....

al1fch:
Mon expérience pragmatique sur le resenti visuel diffère, j'étais '(c'est loin tout ça) amené à faire circuler en multiplexage en courant plus élevé que sans, (sans devoir multiplier ce courant par le nombre d'afficheurs à multiplexer)

Plus la fréquence augmente, moins on est obligé de booster le courant. Sur une appli de ce genre, j'avais une routine sur interruption périodique qui faisait juste ça, le multiplexage sur un afficheur, quatre ou cinq digits chacun avec sept segments et un point. Je comptais le cycles du micro pour optimiser cette fréquence de multiplexage, sur un micro 8 bits d'avant le déluge programmé en assembleur. J'arrivais, si je me souviens bien, à plusieurs centaines de Hz. Les afficheurs étaient alimentés en matrice avec un registre 8 bits en NPN sur le 5 volts et un autre en PNP sur le 0 V. Avec deux boitiers de bascules, chacun relié aux 8 bits du bus, chacun son "chip select" on s'en tirait. Si l'affichage n'avait pas été multiplexé, on aurait sans doute cramé les boitiers. Bien sur, pour optimiser la vitesse, on avait des tableaux pour les codes d'affichage. Aujourd'hui avec un Arduino on peut faire la même chose en C++, mais on a du mal à compter les cycles.

Attention :

Pour l'afficheur grand format KingBright envisagé ici 370mA n'est pas le courant à envoyer en continu dans les segments mais le courant à ne pas dépasser pendant un bref instant avec un rapport cyclique maxi défini

Le courant permanent peut aller jusqu'à 60mA (un CD4511 peut donner jusqu'à 25mA)

al1fch:
Attention :

Pour l'afficheur KingBright envisagé 370mA n'est pas le courant à envoyer en continu dans les segments mais le courant à ne pas dépasser pendant un bref instant avec un rapport cyclique maxi défini

Cela veut dire que si on ne multiplexe pas on peut lui envoyer 60 mA, si on multiplexe avec une fréquence suffisante et qu'on lui envoie 60 mA personne ne s'apercevra d'une diminution de luminosité, mais que si on multiplexe on peut lui envoyer six fois plus de courant et donc avoir une sensation de bien plus de luminosité, ou encore le lire de bien plus loin en plein jour. Reste à trouver des portes qui passent 370 mA en impulsionnel...

Si c'était vrai, le PWM ne fonctionnerait pas avec des leds; En PWM le maximum est constant.

vileroi:
Si c'était vrai, le PWM ne fonctionnerait pas avec des leds; En PWM le maximum est constant.

Quand on fait de la sortie analogique en PWM le signal carré qu'on envoie est filtré, en général par une simple capa, laquelle j'imagine est intégrée dans le processeur lorsqu'on configure une pin en sortie analogique. Donc si on alimente une LED sur une sortie analogique (faite par du PWM sur arduino) on l'alimente à tension variable, ce qui évidement fait que la luminosité varie si on modifie le rapport cyclique. Si par contre on câble la LED sur une sortie logique, il n'y a pas de filtrage, donc la LED reçoit du PWM, et là vous pouvez vérifier, en faisant du PWM à 200 Hz (en le programmant), vous ne verrez pas de différence de luminosité notable en mettant le niveau 1 pendant 0.5 ms, 1 ms, 2ms, 4ms. En tous cas ça marchait comme ça lorsque j'ai développé ça, du moins si ma mémoire est bonne... Je m'en étais étonné et un spécialiste m'avait expliqué ça avec le fonctionnement non linéaire (spatialement et dans le temps) des couches de neurones de la rétine. Une bouffée de photons d'une fraction de milliseconde qui tombent sur un batonnet ou un cone de la rétine suffit à déclencher un pulse vers le nerf optique, et l'intensité lumineuse est codée en fréquence de pulses lorsqu'elle est transmise vers le cerveau. C'était d'ailleurs le principe de la télévision, chaque pixel de l'écran émettant un bref signal lumineux lorsque le balayage passait dessus. J'avoue que je ne sais pas comment ça marche avec les écrans plats modernes.

JiPe38:
Quand on fait de la sortie analogique en PWM le signal carré qu'on envoie est filtré, en général par une simple capa, laquelle j'imagine est intégrée dans le processeur lorsqu'on configure une pin en sortie analogique. Donc si on alimente une LED sur une sortie analogique (faite par du PWM sur arduino) on l'alimente à tension variable, ce qui évidement fait que la luminosité varie si on modifie le rapport cyclique. Si par contre on câble la LED sur une sortie logique, il n'y a pas de filtrage, donc la LED reçoit du PWM, et là vous pouvez vérifier, en faisant du PWM à 200 Hz (en le programmant), vous ne verrez pas de différence de luminosité notable en mettant le niveau 1 pendant 0.5 ms, 1 ms, 2ms, 4ms.

Heu! Là ça devient du grand n'importe quoi.
Il suffit de mettre un oscillo sur une sortie PWM pour voir les signaux.

kamill:
Heu! Là ça devient du grand n'importe quoi.
Il suffit de mettre un oscillo sur une sortie PWM pour voir les signaux.

C'est possible, je ne l'ai jamais fait sur un arduino. Mais j'ai fait de la sortie analogique en pwm sur des micros bien avant que les arduino existent. On calculait un simple filtre RC, on mettait ça sur la sortie, et ça faisait un signal analogique presque constant.

Merci beaucoup tout le monde, je vais avoir plein de choses à digérer...
Quand j'ai parlé de relais c'est parce que je n'imaginais pas qu'il puisse exister autre chose, mais je pensais quand mm qu'on devait pouvoir faire qq chose avec des circuits intégrés, et c'est manifestement le cas.
Je peux vous assurer que j'ai cherché sur le web avant de poser ma question, mais j'avoue que je n'ai cherché qu'avec en premier mot-clé "Arduino" et n'ai trouvé que des trucs avec un écran de x par y caractères déjà tout habillé avec de l'électronique qui gère tout, mais de taille trop petite... Et si je n'ai pas cherché
"décodeur 7 segments" c'est parce que je ne pouvais pas imaginer qu'un truc pareil existait et encore moins qu'il porterait un tel nom... Surtout que si j'ai bien compris ce serait plutôt un transcodeur, qui prend un chiffre décimal convertit en binaire et le convertit bit par bit en affichage 7 segments. Reste à trouver (ou écrire) la fonction qui transforme un chiffre décimal en 4 bits, et le code sera plus compact.
Au fait pour les relais j'avais zappé le côté bruyant, merci pour la piqure de rappel :slight_smile:
Pour la persistance rétinienne, je suis perplexe... Mon vendeur de matos électrique (pas électronique) m'a explique qu'effectivement une led tire 10 fois plus quand elle s'allume que sa puissance nominale. Et aussi que sa longévité n'est pas tant liée au nombre d'heures d'allumage mais surtout au nombre d'allumages. Donc entre une led qui change d'état une fois par minute voire toutes les 10 h, au lieu d'une led qui change d'état 20 fois/seconde, on a un facteur qui va à la louche de 1000 à 600000. Donc, hormis la question de surchauffe, que je n'ai pas envisagée, je m'interroge sur l'intérêt de la chose.
Quand au multiplexage, là je vois pas du tout ce que ça peut apporter, mais c'est un truc que je ne connais pas du tout.
En tout cas le CD4511 me semble répondre à mes besoins, reste à trouver un vendeur qui ne soit pas en chine, marre des délais de 5 semaines :frowning:

Mon vendeur de matos électrique (pas électronique) m'a explique qu'effectivement une led tire 10 fois plus quand elle s'allume que sa puissance nominale

Il a probablement confondu avec les lampes à incandescence........ pour les leds présentes dans un afficheur 7 segments c'est un non sens ou alors il confond "led" et les "ampoules à leds" qui comportent un circuit électronique dont le comportement au démarrage peut induire un appel de courant.Les leds elle mêmes n'y sont pour rien.

Le multiplexage permet de réduire le nombre de pins nécessaires pour piloter tes leds, (au prix d'une gestion un peu plus complexe). Au lieu de 28 ports il te faudra 11 ports.
Le CD4511 ne répond pas (complètement) à tes besoins. Tu ne pourras pas piloter tes afficheurs avec ça. Il te faudra toujours une interface de puissance. Il diminuera cependant le nombre de ports nécessaires. Et simplifie (un peu) le programme.