[RESOLU] 74HC595N Shift Register, and 7-Segment LED : Résultat => Rien !

Salut à tous/toutes,

je tente de réduire mes fils sur une carte arduino uno grâce à ce montage
Imgur

issu de ce tutoriel

http://www.sweeting.org/mark/blog/2011/11/27/arduino-74hc595-shift-register-and-a-7-segment-led-display

J'ai un 7-segment LED Cathode commune et un composant "Registre à décalage" SN74HC595N
Note : dans le lien (sweeting.org/...) le registre à décalage utilisé est SN74HC595 sans N au bout ...

Voici mon montage messinmaisoui.org/Arduino/PA270232.JPG

J'ai vu dans le script qu'il fallait inverser LOW et HIGH
dans cette partie pour mon 7-Segment LED cathode commune

void shiftIt (byte data)
{
    // Set latchPin [b]LOW [/b]while clocking these 8 bits in to the register
    digitalWrite(latchPin, [b]LOW[/b]);

    for (int k=0; k <= 7; k++)
    {
      // clockPin [b]LOW [/b]prior to sending a bit
      digitalWrite(clockPin, [b]LOW[/b]); 

      // Note that in our case, we need to set pinState to 0 ([b]LOW[/b]) for
      // “On” as the 74HC595 is sinking current when using a common
      // anode display. If you want to use a common cathode display then
      // switch this around.
      if ( data & (1 << k) )
      {
        digitalWrite(dataPin, [b]LOW[/b]); // turn “On”
      }
      else
      {
        digitalWrite(dataPin, [b]HIGH[/b]); // turn “Off”
      }

      // and clock the bit in
      digitalWrite(clockPin, [b]HIGH[/b]);
    }

    //stop shifting out data
    digitalWrite(clockPin, [b]LOW[/b]); 

    //set latchPin to high to lock and send data
    digitalWrite(latchPin, [b]HIGH[/b]);

    // put delay here if you want to see the multiplexing in action!
    //delay(100);
}

Le soucis c'est que rien ne s'allume ... bref aucune réaction

  1. Pouvez vous m'indiquer déjà si remplacer tous les LOW par HIGH et vice-versa
    est déjà OK ?

  2. Est-ce que l'utilisation du composant SN74HC595N en place de SN74HC595 ne pose pas de soucis ?

  3. Me suggérer, svp, des tests simples à effectuer pour vérifier si le SN74HC595N est opérationnel

  4. Me suggérer, svp, des tests simples pour vérifier le branchement général

  5. Ou m'orienter vers un autre tutoriel si celui-ci vous semble confus

Merci à tous pour vos conseils ou suggestions et rappelez vous que je ne suis pas une
star en électronique ...

Bonjour,

1- non c'est uniquement les data qu'il faut inverser

2- non

3- vérifier et revérifier le cablage

Mets ton code entre balises codes

Bonjour Kamill,
Ok pour les data donc 2 lignes
=>

 if ( data & (1 << k) )
      {
        digitalWrite(dataPin, HIGH); // turn “On”
      }
      else
      {
        digitalWrite(dataPin, LOW); // turn “Off”
      }

Pour les branchements je vérifie et revérifie et rien !? Je vais tester encore un peu puis refaire entièrement le circuit sinon je verrai un autre tuto ...

oui tu inverses low et high pour les datas (mais même si c'est inversé tu devrais voir des segments allumés)
sur ton schéma le 74HC595 est alimenté en 3.3V, il faut l'alimenter en 5V.

Alors comme ça ne marchait pas 3,3v ou 5v, j'ai décablé et recablé
Et puis cela a fonctionné mais certains segments semblaient ne pas s'afficher avec
cette config
=>

et je me suis rendu compte d'une erreur de cablage de ma part
que j'ai corrigé ...
=>

et puis plus rien à nouveau !??

Ce qui me laisse à penser (intuitivement) qu'un cable / resistance ou autres sous le 7-segment

en position 3 manque, ce genre de chose ...

Je pense que sur l'afficheur le 3 et le 8 devrait être relié. De toutes façon dans le doute mets le 3 à la masse

Alors ça semble fonctionner beaucoup mieux avec le 3 à la masse :wink:
Je pensais que chaque led allait s'allumer successivement ...
Mais l'affichage est bizarre, voir le résultat ci-dessous je vais donc revérifier le cablage

=>

...
8
6
E
8
E
F
8
un C inversé
8
8
9
6
un C inversé
8
9
8
6
E
...

Et puis dans l'article je cite apparemment ce montage
pourrait endommager le 74HC595 :frowning: si je traduis bien ? Alors que je voulais m'en servir
par exemple comme compteur ...

Displays a digit by illuminating each individual segment that makes
it up on the display sequentially, rather than illuminating each
segment at once. This is done very quickly (multiplexing) to give
the illusion that all the nesersary segments are illuminated at
once. This is because the 74HC595 can’t source or sink that much
current, and lighting all segments for the digit ‘8′ at once for
example could require too much current and damage the chip.

Effectivement le 74HC595 est un peu juste pour piloter un afficheur 7 segments car il ne peut fournir que 70mA au total.
Tu peux augmenter les résistances à 330Ω voire 470Ω

Ok donc augmenter l'unique résistance de 220 Ohm ...

Sinon il existe d'autres "multiplexeurs" ou composants plus robustes ou adaptés
pour piloter un 7 segments ?

en général les sorties des circuits logiques ne sont pas faites pour piloter directement des leds (bien que ce soit possible), il faut utiliser des circuits de 'puissance' comme des transistors ou réseaux de transistors genre ULN2803.
Edit le ULN2803 ne convient pas pour des afficheurs à cathode commune.

kamill:
Je pense que sur l'afficheur le 3 et le 8 devrait être relié. De toutes façon dans le doute mets le 3 à la masse

Bonjour
Un peu de famille ce WE, là je reprends mes expérimentations :wink:

Pas d'amélioration d'affichage avec nombreux cablage et recablage

Je pense après avoir vérifier le programme qui de mon point de vue est Ok (correspondance affichage des segments) et ... que mon soucis vient quand même du cablage du 7-segment Cathode commune donc je repose la question :
A quoi doit je connecter la broche 3 et la broche 8 ?

Actuellement
Si
Broche 8 : Connexion +3,3V (Rouge) + résistance 220 Ohm (et bientôt 330)
Broche 3 : Masse (Noir)
=> Affichage erroné !?

Si
Broche 8 : Connexion +3,3V (Rouge) + résistance 220 Ohm
Broche 3 : /
=> Aucun affichage

Et puis les broches 3 et 8 ne doivent t'elles pas être reliées ensemble soit à la masse, soit au 3,3V !??

Merci pour vos réponses

Un conseil après toutes ces manip il faut contôler que les composants ne sont pas détruits.
Note aussi que passé 1 heure de dépannage (éventuellement re-vérifier le lendemain après une bonne nuit) la probabilité de trouver visuellement une erreur est proche de zéro. Dans bien des cas la solution la plus rapide est un recâblage complet à partir de zéro.

Afficheur
Connecte les segments 1 par 1 à l'alim, n'oublie pas la résistance série avec chaque segment.

Registre à décalage :
Place des résistances entre 1k et 10 k entre les sorties du registre à décalage et le Vcc.
Envoie des séquences connues et contrôle avec un voltmètre que les sorties sont bien dans l'état qu'il faut.

Une fois que les composants sont vérifiés comme fonctionnels il faut passer à la programmation.
Il faut définir quelle séquence à envoyer par chiffre.
Toujours avec les résistances entre 1k et 10k, tu envoie les différentes séquences et tu contrôle que les sorties du registre à décalage sont bonnes.

Dernière étape : tu recâble les segments de l'afficheur sur le registre à décalage et tu re-contrôle.

Si tu procède ainsi tu ne fera varier qu'une chose à la fois ce qui sera plus facile pour comprendre d'où vient l'erreur.

Actuellement tu as trop de variables simultanées. Il est toujours préférable d'isoler le problème et de le résoudre individuellement que ce soit en réalisation électrique indépendante ou en bout de programme indépendant que de s'acharner sur le montage et le programme définitif.

PS : le suffixe N indique le modèle de boîtier.
Cette information est disponible dans la datasheet du produit que je t'engage à lire car elle contient des conseils de mise en œuvre, elle est en anglais.

Il faut toujours être méfiant avec les schémas trouvés sur internet qui peuvent être faux.
Ceux contenus dans les datasheets sont eux toujours justes.

Pin 3 et 8
Elles ne sont pas obligatoirement reliées dans le boîtier. Elles sont doublées pour diviser la densité de courant dans les bondings de sortie.
Un bonding est un petit fil de quelques microns de diamètre, généralement en aluminium qui relie les connexions sur la puce aux connexions du boîtier.

Bonjour a tous, bonjour messinmaisoui

pourrais-tu nous en dire plus sur ton projet.

  • Tu dis que tu veux reduire les fils (sic), cela veut dire quoi en francais ?
  • de combien d'afficheur as-tu besoin ? (je sens venir le moment ou tu vas nous dire : que dois-je faire pour en avoir 3 ou 4 :wink: )
  • pourquoi as tu choisi ce type d'afficheur (cathode commune) qui est plus complique a utiliser qu'un modele a anode commune.
  • comme l'a dit Kamill, il est beaucoup plus simple d'utiliser un circuit genre ULN2803 qu'un registre a decalage qui n'est pas prevu pour cela
  • comme te l'a dit 68tjs, il faut utiliser une resistance pour chaque segment
  • je viens de verifier sur 2 modeles differents d'afficheur disponibles ici, les pins 3 et 8 sont connectees en interne

Si j'etais a ta place :

  • pour verifier le fonctionnement de l'afficheur : pin 3 et 8 au GND et chaque segment a travers d'une resistance au +5V pour verifier brochage et integrite de l'afficheur

  • je commande 10 pces ULN2803 pour la somme de 1€50 (frais de port compris)
    Aliexpress

  • je commande 10 pces 7 segment display Anode commune pour 1€29 (frais de port compris)
    Aliexpress

  • si tu n'as pas de pins I/O en suffisance, tu utilise ton HC595 (il est fait pour cela)

  • pour infos, mes dernieres commandes sur ce site, livrees en 12-13 jours calendrier

  • si tu es vraiment a la bourre et que tu ne peux pas attendre, fais une petite demande ici pour un depannage. Je suis sur que tu auras une reponse positive.

N.B.: quand, comme toi, tu commences des realisations Arduino tu dois avoir un hardware en beton. Tout doit marcher nickel. Tu auras deja tous les problemes soft a regler.

A+

Jacques

Merci 68tjs,

  1. Je comprends la démarche, maintenant je pense que mon 7-segments est OK
    puisque les 7 segments s'allument (bon pour l'instant n'importe comment) ...

  2. Pour les résistances 1k à mettre sur SN74HC595N il y en a donc 8, c'est bien ça ...
    7 segments et le point

  3. Pour la partie "contrôle que les sorties du registre à décalage sont bonnes." ça je fais comment avec mon voltmètre ? j'ai 7 fils en sortie (Q0 -> Q7) et je détecte l'état 0 et 1 en balançant par exemple 0100000 et en vérifiant qu'il y aura un fil (ici Q1) correspondant où j'aurai une tension à 3,3v c'est ça ?

  4. Pour la partie datasheets (notice fabicant ?), j'ai regardé le schéma du SN74HC595N et du 7-segment et j'ai vérifié /recâblé par moi-même et je suis retombé exactement sur le câblage du tuto, d'où ma question sur la broche 8 et 3 du 7-segment qui seraient selon moi déjà à relier à la masse tous les 2 ? Avec pour chaque une résistance 220 ohm ou 330 ?

Je suis lourd, mais je préfère m'étendre sur cette partie avant de passer à des montages
moins bateaux ...

Merci pour tous ces éléments de réponse Jacques, je compile :wink:

Oui j'ai une idée (pas révolutionnaire) derrière la tête mais comme j'ai commandé un kit chinois,
je fais avec ce que j'ai reçu ... donc un 7 segment Cathode commune.

Je regarde encore un peu aujourd'hui et je bascule dès demain
sur la solution à base d'ULN2803 comme proposé par Kamill.

Eureka ça fonctionne !
Résultat : Affichage dans l'ordre 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,0,1,etc.

messinmaisoui.org/Arduino/_DSC0175.JPG

Bon je vais vite démonter ce fouillis :o ::slight_smile:

Donc au final par rapport au tuto proposé

  1. Je cite Jacques :

... pin 3 et 8 au GND et chaque segment a travers d'une resistance au +5V pour verifier brochage et integrite de l'afficheur

  1. Inversion HIGH/LOW pour dataPin
if ( data & (1 << k) )
      {
        digitalWrite(dataPin, HIGH); // turn “On”
      }
      else
      {
        digitalWrite(dataPin, LOW); // turn “Off”
      }

Encore merci à tout le monde !!!
Je vais pouvoir passer à des montages plus pertinents