Partage
  • Partager sur Facebook
  • Partager sur Twitter

74HC595 - Perte de luminositée des leds

Question sur l'utilisation de condensateurs

Sujet résolu
    12 octobre 2013 à 10:57:40

    Bonjour la communauté !

    Après avoir lu le cours sur Arduino je me suis lancer dans le montage d'un cube 3x3x3.

    Toute les anodes sont reliées par colonne et les cathodes par étages. J'utilise deux 74Hc595 en série pour disposé de 9 + 3 sorties, les 3 sorties sont reliées a des transistors pour décidé de l'étage à allumer.

    Jusque là je n'est pas eu de problèmes, j'ai crée une fonction affichagePixel(x,y,z); me permettant d'afficher un pixel voulus à la fois pour utilisé la persistance rétinienne et évité de surconsommé.

    Quand il y as un délais > 5ms l'éclairement des led est optimum, seulement cette fréquence est insuffisante pour avoir l'illusion que toutes sont allumées en même temps. J'ai donc essayer de supprimer tout bonnement le delay et c'est là que ça coince... Toutes les leds s'allument bel et bien en même temps pour l'oeil cependant leurs brillance chute drastiquement...

    Je ne comprend pas ce phénomène car malgré que la fréquence sois élevé , physiquement une seule led consomme du courant à la fois non?

    J'ai donc fait quelques recherches et le problème viendrais apparemment du fait que je n'utilise pas de condensateur, j'aimerais votre avis sur la question et connaitre aussi la raison de ce comportement? Serait-il du a des déperdissions d’énergie du à la haute fréquence?

    Je vous remercie et je vous donne aussi des photos (désolé si le montage est un peu fouillis :() et le code !

    int SER_Pin = 8;   //pin 14 on the 75HC595
    int RCLK_Pin = 9;  //pin 12 on the 75HC595
    int SRCLK_Pin = 10; //pin 11 on the 75HC595
     
    //How many of the shift registers - change this
    #define number_of_74hc595s 2 
     
    //do not touch
    #define numOfRegisterPins number_of_74hc595s * 8
     
    boolean registers[numOfRegisterPins];
     
    void setup(){
      pinMode(SER_Pin, OUTPUT);
      pinMode(RCLK_Pin, OUTPUT);
      pinMode(SRCLK_Pin, OUTPUT);
     
      //reset all register pins
      clearRegisters();
      writeRegisters();
    }               
     
    //set all register pins to LOW
    void clearRegisters(){
      for(int i = numOfRegisterPins - 1; i >=  0; i--){
         registers[i] = LOW;
      }
    } 
     
    //Set and display registers
    //Only call AFTER all values are set how you would like (slow otherwise)
    void writeRegisters(){
     
      digitalWrite(RCLK_Pin, LOW);
     
      for(int i = numOfRegisterPins - 1; i >=  0; i--){
        digitalWrite(SRCLK_Pin, LOW);
     
        int val = registers[i];
     
        digitalWrite(SER_Pin, val);
        digitalWrite(SRCLK_Pin, HIGH);
     
      }
      digitalWrite(RCLK_Pin, HIGH);
     
    }
     
    //set an individual pin HIGH or LOW
    void setRegisterPin(int index, int value){
      registers[index] = value;
    }
     
    void loop(){
      
    for(int k=0; k<3; k++)
    {
      for(int j=0; j<3; j++)
      {
        for(int i=0; i<3; i++)
        {
           affichagePixel(i,j,k);
        delay(100);
        }
       
      }
       
    }
    
    }
    
    void affichagePixel(int x, int y, int z)
    {
      if(z == 0)
      {
      setRegisterPin(9, HIGH);
      setRegisterPin(10, LOW);
      setRegisterPin(11, LOW);
      }
      else if(z == 1)
      {
      setRegisterPin(9, LOW);
      setRegisterPin(10, HIGH);
      setRegisterPin(11, LOW);
      }
      else if(z ==2)
      {
      setRegisterPin(9, LOW);
      setRegisterPin(10, LOW);
      setRegisterPin(11, HIGH);
      }
      
      
      if((x==0) & (y==0))
      {
      setRegisterPin(0, HIGH);
      setRegisterPin(1, LOW);
      setRegisterPin(2, LOW);
      setRegisterPin(3, LOW);
      setRegisterPin(4, LOW);
      setRegisterPin(5, LOW);
      setRegisterPin(6, LOW);
      setRegisterPin(7, LOW);
      setRegisterPin(8, LOW);
    
      }
      else if((x==1) & (y==0))
      {
      setRegisterPin(0, LOW);
      setRegisterPin(1, HIGH);
      setRegisterPin(2, LOW);
      setRegisterPin(3, LOW);
      setRegisterPin(4, LOW);
      setRegisterPin(5, LOW);
      setRegisterPin(6, LOW);
      setRegisterPin(7, LOW);
      setRegisterPin(8, LOW);
    
      }
      else if((x==2) & (y==0))
      {
      setRegisterPin(0, LOW);
      setRegisterPin(1, LOW);
      setRegisterPin(2, HIGH);
      setRegisterPin(3, LOW);
      setRegisterPin(4, LOW);
      setRegisterPin(5, LOW);
      setRegisterPin(6, LOW);
      setRegisterPin(7, LOW);
      setRegisterPin(8, LOW);
    
      }
        else if((x==0) & (y==1))
      {
      setRegisterPin(0, LOW);
      setRegisterPin(1, LOW);
      setRegisterPin(2, LOW);
      setRegisterPin(3, HIGH);
      setRegisterPin(4, LOW);
      setRegisterPin(5, LOW);
      setRegisterPin(6, LOW);
      setRegisterPin(7, LOW);
      setRegisterPin(8, LOW);
    
      }
        else if((x==1) & (y==1))
      {
      setRegisterPin(0, LOW);
      setRegisterPin(1, LOW);
      setRegisterPin(2, LOW);
      setRegisterPin(3, LOW);
      setRegisterPin(4, HIGH);
      setRegisterPin(5, LOW);
      setRegisterPin(6, LOW);
      setRegisterPin(7, LOW);
      setRegisterPin(8, LOW);
    
      }
      
       else if((x==2) & (y==1))
      {
      setRegisterPin(0, LOW);
      setRegisterPin(1, LOW);
      setRegisterPin(2, LOW);
      setRegisterPin(3, LOW);
      setRegisterPin(4, LOW);
      setRegisterPin(5, HIGH);
      setRegisterPin(6, LOW);
      setRegisterPin(7, LOW);
      setRegisterPin(8, LOW);
    
      }
          else if((x==0) & (y==2))
      {
      setRegisterPin(0, LOW);
      setRegisterPin(1, LOW);
      setRegisterPin(2, LOW);
      setRegisterPin(3, LOW);
      setRegisterPin(4, LOW);
      setRegisterPin(5, LOW);
      setRegisterPin(6, HIGH);
      setRegisterPin(7, LOW);
      setRegisterPin(8, LOW);
    
      }
        else if((x==1) & (y==2))
      {
      setRegisterPin(0, LOW);
      setRegisterPin(1, LOW);
      setRegisterPin(2, LOW);
      setRegisterPin(3, LOW);
      setRegisterPin(4, LOW);
      setRegisterPin(5, LOW);
      setRegisterPin(6, LOW);
      setRegisterPin(7, HIGH);
      setRegisterPin(8, LOW);
    
      }
      
       else if((x==2) & (y==2))
      {
      setRegisterPin(0, LOW);
      setRegisterPin(1, LOW);
      setRegisterPin(2, LOW);
      setRegisterPin(3, LOW);
      setRegisterPin(4, LOW);
      setRegisterPin(5, LOW);
      setRegisterPin(6, LOW);
      setRegisterPin(7, LOW);
      setRegisterPin(8, HIGH);
    
      }
            writeRegisters();  //MUST BE CALLED TO DISPLAY CHANGES
      //Only call once after the values are set how you need.
      
    }

    Encore merci de l'attention que vous porterez à mon soucis de débutant ! :)

    -
    Edité par CactusTribe 12 octobre 2013 à 14:56:21

    • Partager sur Facebook
    • Partager sur Twitter
      12 octobre 2013 à 17:11:20

      J'ai pas regardé le code mais voici quand même quelques pistes :

      • Mais un condensateur de découplage sur tes 74HC595 au près de ses bornes d'alimentation. Un 100nF plastique fera l'affaire pour commencer
      • Peut-être que ta fréquence est vraiment trop élevée. Du coup ta LED s'allume et s'éteint aussitôt, ce qui fait que tu as l'impression qu'elle ne s'allume pratiquement pas (persistence retinienne oblige, si tu es plus éteint que allumé tu as l'impression que l'éclairage est plus faible)
      • Partager sur Facebook
      • Partager sur Twitter

      Retrouvez moi sur mon blog et ma chaine Youtube !

        12 octobre 2013 à 17:21:29

        Merci de ta réponse ! Donc je place un condo de l'alim du 595 à la masse? J'ai essayer avec des 10nF et 10uF évidement je n'ai pas la valeur qu'il faut.. Je vais essayer d'en trouver 2 et essayer ça !

        Pour la fréquence je ne saurais dire, car j'ai tout simplement enlever le delay ce qui veux dire que c'est la fréquence à la quelle la fonction "loop" fait un tour et je ne sais pas à quoi correspond elle ? La fréquence de l'arduino, 16Mhz?

        Sinon est-il possible de fractionné les valeurs que l'ont met dans delay() ? Du genre delay(0.001) histoire d'aller plus vite qu'une milliseconde mais pas trop non plus ?

        • Partager sur Facebook
        • Partager sur Twitter
          12 octobre 2013 à 17:23:26

          Tu peux faire des pauses en µs avec DelayMicroseconds.

          Pour le découplage, tu peux déjà essayer avec les 10nF

          • Partager sur Facebook
          • Partager sur Twitter

          Retrouvez moi sur mon blog et ma chaine Youtube !

            12 octobre 2013 à 17:25:27

            Merci ! J'ai essayer avec des 10nF et aucun résultats :(
            • Partager sur Facebook
            • Partager sur Twitter
              12 octobre 2013 à 17:26:28

              Pause un peu le temps alors...

              • Partager sur Facebook
              • Partager sur Twitter

              Retrouvez moi sur mon blog et ma chaine Youtube !

                12 octobre 2013 à 18:06:58

                Bon j'ai essayé avec des 100nF mais toujours pas de changement...

                Je les places peut-être pas comme il faut?

                Sa me parait vraiment bizzard qu'il n'y est pas de solutions pour ce soucis, car réduire le temps ne m'arrange pas car du coup plus possibilité d'utilisé la persistance rétinienne pour afficher toute les leds... :(

                Sachant que j'ai trouvé ça dans mes recherches : le mec arrive bien à tout allumer avec une intensité lumineuse au top une trentaine de leds malgrès l'alim USB...

                -
                Edité par CactusTribe 12 octobre 2013 à 18:08:08

                • Partager sur Facebook
                • Partager sur Twitter
                  12 octobre 2013 à 18:08:52

                  Ta essayé en mettant quelques microsecondes de pause ?

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Retrouvez moi sur mon blog et ma chaine Youtube !

                    12 octobre 2013 à 18:15:19

                    Ouais, et aucun changements, j'ai essayer aussi d'enlever une résistance sur une des colonnes de leds, et cette colonne éclairais plus fort, mais je comprend pas pourquoi? La fréquence ne devrais pas jouer la dessus non?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 octobre 2013 à 13:59:37

                      eskimon me corrigera surement si je dis une connerie, je vais émettre une HYPOTHESE: il y a un effet capacitif sur les diodes. il y a un "temps de montée" qui peut être vu comme un effet capacitif, et les résistances auraient tendance à allonger les durées de ces effets (augmenter l'impédance de la branche et donc diminuer le courant, et donc diminuer l'afflux d'énergie à la montée).

                      du coup peut-être que le temps que l'arduino laisse la led allumée est trop court. résultat, essaie de rajouter un délai, uniquement sur le temps "allumé".

                      je te mets un lien d'un mec qui a fait un cube 8x8x8 et qui poste son programme, on voit qu'il a mis une opération d'attente (il l'a appelée aspetta, comme il est italien,ça colle... et il y accorde 70 000 cycles d'horloge dans la "boucle du milieu". le probleme c'est que je sais pas quelle est son horloge... et comme il a écrit son programme en Visual Basic, ça aide pas.)

                      http://www.instructables.com/id/How-to-build-a-8x8x8-led-cube-English-version/step6/The-software/

                      essaie aussi de mesurer le courant qui sort de ton alim pour les leds, ça peut te donner un indice sur le probleme rencontré.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      oui. non. enfin je regarde et je te dis.

                        13 octobre 2013 à 14:14:58

                        C'est vrai que j'avais pas pensé au transitoire de la LED (ah c'est beau de vivre dans le monde merveilleux des modèles théoriques parfait), et du coup ca colle sur le phénomène je pense... Du coup je réitère, as tu essayé de mettre un delay de quelques microsecondes et de jouer avec en l'augmentant/diminuant pour voir les conséquences ?

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Retrouvez moi sur mon blog et ma chaine Youtube !

                          13 octobre 2013 à 14:45:47

                          Hello !

                          Remace : "il y a un effet capacitif sur les diodes. il y a un "temps de montée" qui peut être vu comme un effet capacitif, et les résistances auraient tendance à allonger les durées de ces effets (augmenter l'impédance de la branche et donc diminuer le courant, et donc diminuer l'afflux d'énergie à la montée)."

                          J'ai bien le sentiment que c'est ce qui se passe vu que si j'enlève les résistances sur les colonnes de leds, à fréquence égale elles éclaires plus forts, ce qui m'amène à pensé qu'il fraudais compensé cette perte avec un condo?

                          Et pour le delay() sur l'allumage de la led, celà ne change rien (j'ai essayer quand même :p), car si la led est allumée 1sec forcément la boucle ne peut pas allumer celle d'après avant les 1sec, donc que ce sois l'allumage de la led qui dure 1sec ou le changement de led ne change rien.

                          Eskimon : Oui j'ai essayer, au dessus de 5ms elles retrouves bel et bien la brillance de base, sauf que adieux la persistance rétinienne, en dessous de 5ms, quelque sois le temps de pause même avec 500uS la brillance reste très basse.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 octobre 2013 à 15:15:04

                            CactusTribe a écrit:

                            Hello !

                            Remace : "il y a un effet capacitif sur les diodes. il y a un "temps de montée" qui peut être vu comme un effet capacitif, et les résistances auraient tendance à allonger les durées de ces effets (augmenter l'impédance de la branche et donc diminuer le courant, et donc diminuer l'afflux d'énergie à la montée)."

                            J'ai bien le sentiment que c'est ce qui se passe vu que si j'enlève les résistances sur les colonnes de leds, à fréquence égale elles éclaires plus forts, ce qui m'amène à pensé qu'il fraudais compensé cette perte avec un condo?

                            non. (enfin selon moi, eskimon me corrigera encore si je me trompe) ajouter un condensateur reviendrait à ajouter un effet capacitif à un circuit qui retarde déjà, ça ralentirait encore ton systeme

                            CactusTribe a écrit:

                            Et pour le delay() sur l'allumage de la led, celà ne change rien (j'ai essayer quand même :p), car si la led est allumée 1sec forcément la boucle ne peut pas allumer celle d'après avant les 1sec, donc que ce sois l'allumage de la led qui dure 1sec ou le changement de led ne change rien.

                            ha. est-ce que tu as la doc de tes leds?

                            et est-ce que tu as essayé avec la fonction que t'a donné eskimon, qui permet d'avoir des subdivisions de delay() en microsecondes

                            • Partager sur Facebook
                            • Partager sur Twitter

                            oui. non. enfin je regarde et je te dis.

                              13 octobre 2013 à 15:23:07

                              Oui j'ai essayé avec delayMicroseconds(), de 100 à 5000, et pas de changement.

                              Pour la doc des leds j'ai rien d'autres que ça : http://www.reboul.fr/catalogue/actifs-optoelectronique-led-leds/descriptif_1009903.html

                              Elles ont besoin de 10mA, sachant que j'ai mis des résistances de 220 Ohms, je devrais donc simplement retiré toute les résistances? En faisant ça j'ai un peu peur de leurs réactions quand à l'inverse peu de leds serons allumées....

                              J'ai également fait un autre test en modifiant la boucle d'affichage :

                              void loop(){
                                
                              for(int k=0; k<3; k++)
                              {
                                for(int j=0; j<3; j++)
                                {
                                  for(int i=0; i<3; i++)
                                  {
                                     affichagePixel(i,j,k);
                                     
                                  }
                                 
                                }
                                 delay(500);
                              }
                              
                              }

                              Le but est d'allumé un étage à la fois avec un delay entre chaque, sauf que voilà le comportement est très étrange et vous aideras peut-être pour trouver une piste :(

                              Video illustrant : https://www.youtube.com/watch?v=arplmDviRlc

                              -
                              Edité par CactusTribe 13 octobre 2013 à 15:34:01

                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 octobre 2013 à 16:32:57

                                non il ne faut pas retirer tes résistances, c'est un coup à griller des composants.  (court circuit entre la tension d'alim et la masse, c'est en général pas cool comme solution, même à relativement court terme)

                                sinon si tu veux gagner du temps d'allumage, pour faire des pauses plus courtes, tu peux essayer de faire un code "plus intelligent" (une boucle while avec une quantité aussi importante de "else if" c'est pas très beau. je sais pas comment arduino le compile ce code mais ça m'étonnerait pas qu'il fasse un programme beaucoup plus lent d'exécution que le même avec un switch-case unique. (là encore eskimon en sait plus que moi, arduino je connais pas trop moi.)

                                je ne vois pas de transistor dans ton montage (à part ceux du shift register, mais ça a pas l'air d'être des transistors "de puissance" mais plutôt des transistors "de signal") dans le lien que je t'ai envoyé (le cube 8x8x8 de l'italien) il utilise un transistor pour chaque étage du cube (layer...), ce qui permet d'alimenter directement tes diodes depuis l'alim, et pas au travers de la sortie de ton shift register. il se peut que ce genre d'idée solutionne ton problème. (à adapter bien sûr à ton montage à toi)

                                EDIT: ton code de test fonctionne et fait exactement ce que tu lui demande. je m'explique: tu balaye une fois tout l'étage, et ensuite tu laisse allumé la led en cours pendant 500ms avant de changer d'étage. je pense que ce n'est pas ça que tu voulais faire :-°

                                -
                                Edité par remace 13 octobre 2013 à 16:47:39

                                • Partager sur Facebook
                                • Partager sur Twitter

                                oui. non. enfin je regarde et je te dis.

                                  13 octobre 2013 à 16:39:50

                                  remace a écrit:

                                  sinon si tu veux gagner du temps d'allumage, pour faire des pauses plus courtes, tu peux essayer de faire un code "plus intelligent" (une boucle while avec une quantité aussi importante de "else if" c'est pas très beau. je sais pas comment arduino le compile ce code mais ça m'étonnerait pas qu'il fasse un programme beaucoup plus lent d'exécution que le même avec un switch-case unique. (là encore eskimon en sait plus que moi, arduino je connais pas trop moi.)

                                  Je suis pas non plus spécialiste optimisation low-level (mais oui, préconiser des structures comme le switch est une bonne idée).

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Retrouvez moi sur mon blog et ma chaine Youtube !

                                    13 octobre 2013 à 16:44:56

                                    Pour le code je vais essayer de réfléchir à une autre méthode, pour les transistors les 3 que j'ai mis contrôles justement les étages du cube. Je doit quand même pas en mettre un par colonne de leds? Car les anodes composent les colonnes, et les cathodes les layers, donc si je veux alimenté les leds sans passé par le shift je doit placer 9 transistors suplémentaire? C'est quand même étrange...car dans une de mes réponses plus haut j'ai mis une photo d'un mec qui arrive bien à alimenté 32Led avec 4x 74hc595 directement...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      13 octobre 2013 à 16:48:38

                                      Bah l'hypothèse de l'effet capacitif de la LED reste toujours en suspens.... J'ai du mal à comprendre pourquoi une pause en microsecondes à pas vraiment d'effet

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Retrouvez moi sur mon blog et ma chaine Youtube !

                                        13 octobre 2013 à 17:03:48

                                        CactusTribe a écrit:

                                        Pour le code je vais essayer de réfléchir à une autre méthode, pour les transistors les 3 que j'ai mis contrôles justement les étages du cube. Je doit quand même pas en mettre un par colonne de leds? Car les anodes composent les colonnes, et les cathodes les layers, donc si je veux alimenté les leds sans passé par le shift je doit placer 9 transistors suplémentaire? C'est quand même étrange...car dans une de mes réponses plus haut j'ai mis une photo d'un mec qui arrive bien à alimenté 32Led avec 4x 74hc595 directement...

                                        ha pardon je les avais pas vu les transistors des étages, mille excuses.

                                        en revanche ton code de test ou tu voulais allumer un étage après l'autre, essaye ça, ça marchera (sauf si a sert en variable globale ailleurs, mais dans ce cas il suffit par remplacer a par un nom de variable inutilisé)

                                        void loop(){
                                           
                                        for(int k=0; k<3; k++)
                                        {
                                          for(int a=0; a<50; a++
                                            for(int j=0; j<3; j++)
                                            {
                                            for(int i=0; i<3; i++)
                                              {
                                              affichagePixel(i,j,k);  
                                              }
                                            }
                                          }
                                        }
                                         
                                        }

                                        Eskimon a écrit:

                                        Je suis pas non plus spécialiste optimisation low-level (mais oui, préconiser des structures comme le switch est une bonne idée).

                                        oui, mais toi tu as rédigé un tuto sur arduino, moi j'ai jamais ne serait-ce que vu une vraie carte arduino ailleurs que sur internet. du coup, je pars du principe que tu y connais mieux que moi, normal :p



                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        oui. non. enfin je regarde et je te dis.

                                          13 octobre 2013 à 17:08:01

                                          @remace : joli la tempo à l'ancienne :D

                                          Pour faire plus propre que ce que remace propose, je te suggère de mettre un delayMicrosecondes dans ta boucle j.

                                          void loop(){
                                              for(int k=0; k<3; k++)
                                              {
                                                  for(int j=0; j<3; j++)
                                                  {
                                                      for(int i=0; i<3; i++)
                                                      {
                                                          affichagePixel(i,j,k);
                                                      }
                                                      delayMicroseconds(500);
                                                  }
                                              }
                                          }
                                          
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Retrouvez moi sur mon blog et ma chaine Youtube !

                                            13 octobre 2013 à 17:19:38

                                            Ah oui exacte pour le code, je sais pas pourquoi j'ai omis ce détails !

                                            Sa marche, mais le problème de luminosité persiste x) Quelle est la solutions la plus simple pour diminué ou contourner la perte d’énergie du coup?

                                            Déjà je pourrais remplacer les résistance de 220 par des 100 sans prendre trop de risques. Et je me dit aussi que ce sont des leds éco, et de nature elles éclaires pas très fort, donc avec des leds plus lumineuse cette baisse d'intensité serais moins visible. Par contre si je rencontre une baisse visible déjà avec 27led, moi qui comptais reproduire ce shéma avec un cube 8x8 c'est carrément exclus si je comprend bien?

                                            Eskimon : nan avec le delay dans j le comportement est différent, tout s'allume d'un coup sauf que toute les coordonnées x = 2 s'allument légèrement plus oO.. Je deviens fou avec cette histoire

                                            -
                                            Edité par CactusTribe 13 octobre 2013 à 17:23:29

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              13 octobre 2013 à 17:29:56

                                              Oui tout a fait... le delay doit bien être après la fonction d'affichage

                                              D'ailleurs voici un cadeau, gros refactoring de ta boucle pour l'affichage d'une LED (moins de 10 lignes contre plus de 140 pour toi :D ) :

                                              void affichagePixel(int x, int y, int z)
                                              {
                                              
                                              clearRegisters(); //on commence par mettre tout le monde à 0
                                              setRegisterPin(9 + z, HIGH); //le choix de la couche
                                              setRegisterPin(x+y*3, HIGH); //la led à allumer
                                              writeRegisters();  //met à jour les registres à décalages
                                              

                                              }

                                              </pre>

                                              -
                                              Edité par Eskimon 13 octobre 2013 à 17:31:27

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Retrouvez moi sur mon blog et ma chaine Youtube !

                                                13 octobre 2013 à 17:36:58

                                                @eskimon: oui, mais j'avais pas envie d'aller regarder ton tuto pour savoir comment générer une interruption sur un timer, petit côté ras le bol de mettre des delay partout (les collegues en école d'ingé qui juraient que par ça, moi ça me filait des boutons). et non là c'était pas au mauvais endroit, c'était pour bine différencier les étages d'une seconde à l'autre.

                                                pis tant qu'à faire un code de test, autant qu'il soit moche, comme ça ça donne de quoi dire aux autres:D.

                                                par contre, doucement les simplifications, le setregisterpin(x+y*3, high) là c'est pas trivial pour tout le monde hein (tout le monde ne compte pas en base 3 non plus^^)

                                                -
                                                Edité par remace 13 octobre 2013 à 17:45:46

                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                oui. non. enfin je regarde et je te dis.

                                                  13 octobre 2013 à 17:40:46

                                                  Ah oui effectivement merci ! J'ai pas encore les bon reflex à ce niveau, ça me permet d'apprendre je te remercie ! :D

                                                  J'ai essayer sur une colonne de passé par un transistor pour l'alim, et effectivement plus lumineuse, le changement d'états du shift doit bien consommer, mais du coup pas très pratique de devoir mettre autant de transistors...

                                                  -
                                                  Edité par CactusTribe 13 octobre 2013 à 17:43:28

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    13 octobre 2013 à 17:40:56

                                                    Perso j'aime pas les delays(), c'est bloquant et donc ca me donne des boutons :D mais c'est bien pratique quand ton programme est monotâche :D (mais sinon je plussoie les timers, quand j'étais à l'école Arduino existait pas, on codais en tapant dans des registres pour tout paramétrer :D )

                                                    Et comme le tuto est axé débutant, on ne parle pas interruptions sur timer :( (on évoque juste les interruptions externe). Pas le temps de rentrer en profondeur dans tout et de quand même couvrir plein de thêmes différents comme les LCD, les moteurs etc...

                                                    Ta essayer de découpler plus tes registres ?

                                                    -
                                                    Edité par Eskimon 13 octobre 2013 à 17:42:57

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Retrouvez moi sur mon blog et ma chaine Youtube !

                                                      13 octobre 2013 à 17:59:52

                                                      Tu entend quoi par découpler plus les registres?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        13 octobre 2013 à 18:08:13

                                                        découpler c'est "rendre indépendant électriquement" en pratique dans ton cas, c'est "mettre des transistors partout où tu sors d'un circuit TTL (comme tes 74hc595)" pour éviter les problemes de résistances internes de sortie et autre. (enfin c'est un peu plus compliqué que ça, on peut découpler avec plein d'autres méthodes suivant ce qu'on veut découpler mais... c'est long à expliquer)

                                                        à tout hasard, as-tu fait une alimentation séparée pour l'arduino et le circuit "led + shift register"? parce que je vois pas de régulateur ni d'alimentation de labo ni de pile, ni rien (ceci dit je vois rien moi...), et ça m'étonnerait pas que les sorties de l'arduino aient du mal à alimenter le reste du circuit^^.

                                                        à moins que son alimentation soit totalement insuffisante. il faudrait mesurer le courant dans "l'alim côté puissance" (alors là pour être honnête, sur les photos spaghettis, je suis incapable de te dire mieux où peut-être dans le fil rouge qui part de l'arduino pour aller dans la colonne rouge de la plaque d'essais).

                                                        avant de t'acheter une boite de 100 transistors pour le 8x8x8 (d'accord, 72 suffiraient, on est d'accord, mais c'est pour l'idée). essaie de faire un bloc d'alimentation (même pas propre, genre l'équivalent de 5V ou plus de piles en série) pour faire une alimentation "led + shift register indépendante de l'arduino, si tu sens que ça te va pas comme modèle, tu peux ajouter un régulateur 7805, 2 capacités, et 2 résistances, à utiliser selon le modèle qu'il y a dans la documentation. t'en as pour moins de 5€, le plus cher étant les piles...)

                                                        -
                                                        Edité par remace 13 octobre 2013 à 18:26:11

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        oui. non. enfin je regarde et je te dis.

                                                          13 octobre 2013 à 18:16:15

                                                          Absolument pas haha ! Tout l'alim viens de l'usb justement, donc du 5V 500mA :)

                                                          Je devrais peut être alimenter l'Arduino avec une source externe du coup? ça limiterais ce genre de soucis j'imagine?

                                                          Avec transfo 9V ou une pile? Une pile de mémoire débite plus d'Ampère non?

                                                          -
                                                          Edité par CactusTribe 13 octobre 2013 à 18:18:03

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            13 octobre 2013 à 18:19:29

                                                            Met un gros condo polarisé sur la ligne d'alimentation, ca sera un début

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            Retrouvez moi sur mon blog et ma chaine Youtube !

                                                              13 octobre 2013 à 18:27:38

                                                              J'ai un 1000uF à dispo, mais quand tu dit ligne d'alim, tu parle de la général où des pins Vcc et ground du premier shift?

                                                              Car en sortie direct de l'arduino ça procure 0 changements visuels.

                                                              -
                                                              Edité par CactusTribe 13 octobre 2013 à 18:28:20

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              74HC595 - Perte de luminositée des leds

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown