Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Projet] De nombreuses questions

plus ou moins bêtes !

    7 mai 2015 à 18:27:36

    Bonjour à tous !

    Alors voilà je me lance dans un nouveau projet sympathique mais j'ai rencontré plusieurs interrogations (parfois fondamentales je l'avoue) :

     - Pour les 7 segments reliés aux 74LS47, mon prof d'elec m'a dit qu'il n'y avait pas besoin de brancher de resistance 330 ohm entre le 7 segments et le microctrl alors que c'est marqué sur tous les schema d'internet, pouvez-vous m'éclairer un peu sur le sujet ? (j'ai essayé de brancher le tout sans resistance, le 7 segment chauffe mais tient (pour combien de temps ?)).

     - Je recherche un composant particulié qui est une RAM 4 bits : en effet je ne trouve nul part mon bonheur. L'idée serait d'avoir 4 INPUT et 4 OUTPUT et que la ram sur coup d'horloge fasse passer le courant des I en O, comme une Bascule D (mais attention pas une bascule D car je veux que tant que la clock est alimentée, le courant en entrée passe en sortie (du coup ce n'est plus trop une clock mais plutot ca ressemble à une porte AND), et bien sur que ce composant soit alimenté en +5V et GND. On aurait théoriquement 11 pins, comptons 12 minimum pour avoir un nombre de pattes égales de chaque côté, eh bien je ne trouve pas ce type de composant. Pouvez-vous m'éclairer à propos de ce sujet ?

     - C'est la première fois que je réalise un montage aussi gros, avez-vous des astuces pour bien placer ses composants ? Car je voudrais que tout soit compacté bien comme il le faut (par exemple bonne idée de mettre sur la plaque du cuivre pour passer un courant et aussi dessus serait un microcontroleur qui est soudé sur dautres pins sur les cotés ?).

     - Dans mon montage, il y aura exactement 81 7 segments, je sais que mon Arduino ne fournira jamais assez d'énergie, mais je n'ai aucune idée combien de V et d'A je dois fournir à mon montage pour savoir quel type de pile acheter. Comment puis-je le savoir/calculer ?

     - Les bandes que l'on colle avec un fer à repasser sur les plaques, pour que du courant passe en fonction de ce que l'on voulait : est-ce une bonne solution durable et de qualité ? Ca n'a pas l'air très fiable mais on me l'a recommandé mais je reste suspicieux.

     - Savez-vous où l'on peut trouver des boites en plastiques sur mesure pour ce genre de montage ? Même question pour ces fameuses lignes de cuivre que l'on peut poser avec un fer à repasser : avez-vous des sites fiables ou des entreprises que vous avez déjà testées ?

    Cordialement, électroniquement votre,

    Martin

    • Partager sur Facebook
    • Partager sur Twitter
      7 mai 2015 à 19:26:47

      Alors, reprenons toutes ces questions une par une :)


      Les résistances servent à adapter les niveaux de courant/tension.

      Prenons un exemple concret d'une LED rouge (ou d'un afficheur à segment rouge) :

      Ces LED ont généralement besoin d'une tension de 2.2V et un courant de 10mA.

      Si tu utilises le 5V de l'arduino, il faut donc une résistance qui encaisse les 2.8V de trop avec les 10mA que consomme la LED.

      Cela nous donne R = U / I = 2.8 / 0.010 = 280 ohm.

      Généralement, on préfère augmenter encore un peu la résistance pour réduire le courant de façon à être sur que la LED ne chauffe pas.

      Si tu ne mets pas de résistance, il est possible que la LED encaisse trop de tension/courant et donc qu'elle chauffe.

      Tu l'as dis toi même : pour le moment, ça tient... mais pour combien de temps ?


      Attention à ne pas confondre :

      - les latch D => actif sur état (pas de clock)

      - les latch D flip flop => actif sur front (clock)

      Le 74HC373 devrait faire ton bonheur : il contient 8 latch D

      Vu que ce circuit a 8 sortie, tu pourrais te passer des 74LS47 et utiliser exclusivement des 74HC373 (1 par afficheur).

      Cela devrait donc grandement diminuer ton nombre de circuit ;)

      Mais a ta place, j'aurais plutôt utilisé des 74HC595 en cascade, ces circuit te permettront d'avoir moins de fils qui vont vers ton arduino.

      Tu peux mettre une infinité de 74HC595 en cascade avec seulement 3 pins qui vont vers l'arduino.

      Pour en savoir plus : http://eskimon.fr/269-arduino-annexe-1-ajouter-des-sorties-a-arduino-74hc595


      Là, je ne comprends pas ce que tu veux dire.


      Il faut regarder la doc de tes afficheur, tu auras le courant par segment.

      A supposer que chaque segment consomme 10mA et que tu les allumes tous en même temps, cela fait donc 81*7*10 = 5670mA

      Il va te falloir une bonne alim pour ça !

      L'idéal sera peut être de baisser un peu le courant de chaque segment ou d'utiliser du multiplexage.


      Les bandes que l'on colle au fer à souder ??? Aurais tu un lien ?


      A mon tours de poser des questions :D

      Que comptes tu faire avec ces 81 afficheurs ?

      -
      Edité par lorrio 7 mai 2015 à 19:41:01

      • Partager sur Facebook
      • Partager sur Twitter
        7 mai 2015 à 19:34:07

        pour ton histoire de chauffe, bah ça va chauffer jusqu'à ce que ça crame. sauf si c'est bien refroidi, auquel cas il ne se passera rien, comme ton prof te le prédit.

        pour ton histoire de ram, ce que tu cherche s'appelle un registre à décalage, shift register pour les anglophones.

        pour le routage de la carte, j'suis pas fort pour ça, donc je vais laisser quelqu'un répondre. néanmoins, tes composants  doivent tous être indépendants dans la carte (jamais 2 broches dans le même trou, ou des choses de ce style)

        80 afficheurs sur des piles, au mieux tu les fais fondre, au pire ça t'explose à la figure et ça fout le feu à ton appart'... pas terrible. non en vrai, regarde combien consomme un afficheur (c'est dans la doc de ton afficheur) et  cherche à adapter une alim secteur plutôt.

        pour les bandes qu'on colle au fer sur les plaques... connais pas. mais je sais que certaines vieilles imprimantes permettent d'utiliser des techniques de ce style et que ça marche plutôt bien.

        pour tes boitiers... je chercherai quand j'aurai mieux de temps et je te dirai.

        • Partager sur Facebook
        • Partager sur Twitter

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

          8 mai 2015 à 20:10:22

          Bonjour à vous 2, merci d'abord de m'avoir répondu !

          @lorrio :

          1) D'accord je ferai en fonction de ce que j'ai car sur le site (chinois) où je veux payer mes 7 segm il n'y a evidemment rien d'indiqué en terme de courant et tension. Mais ça doit être assez conventionnel je pense car ce sont des classiques 0.56" donc je ne me fais pas de soucis.

          2) J'ai compris je dois utiliser des Latch D ! Merci pour ton lien ! J'ai vraiment lu toute la page et ce fût très instructif, et même si je suis amené à ne pas m'en servir ici, je me rappellerai de ce composant fort utile ! Du coup il faudrait que le décodage normalement sur le 74LS47 se fasse dans mon code arduino et que je transfère le tout avec le HC595 avec le verrou et la DATA pour faire allumer les bons segments si j'ai bien compris ! Et les 595 en cascade ont l'air très intéressants en plus ! Merci encore une fois de m'avoir fait découvrir ce composant !

          3) Laisse tomber je pense que je ne le ferai pas dans tout les cas, mais en gros c'est faire passer physiquement sous un micro de l'étain pour un autre branchement, je ne sais pas si ça se fait de superposer les montages comme ça.

          4) Baisser le courant de chaque segment me semble une solution intéressante car si je baisse de très peu mais tout, on gagne beaucoup d'un coup (c'est bien la technique que fait l'Etat sur les impôts non ?), du coup le multiplexage avec le HC595 semble une solution très intéressante car réalisant le rôle de RAM et BCD en même temps !

          5) Je crois que pour ce point, ça s'appelle du "scotch cuivre", en tout cas ça l'air d'être ce que je décris et ce que j'avais vu.

          6) Je compte réaliser un Sudoku d'une taille d'environ 30cm/30cm avec ces afficheurs. Alors oui il y a plus optimal mais c'est un projet qui me semble intéressant et qui me fait plaisir rien que par sa conception ! (J'ai déjà réalisé quelques schémas là même s'ils ne sont plus valides si j'utilise des HC595 !).


          PS: On m'a proposé d'utiliser un ULN2803 dans un autre forum, j'ai trouvé ce schéma sur internet qui ressemble à celui du lien que tu m'as donné mais il rajoute ces ULN entre les micro et les LEDs, tu me confirmes bien que cet ULN sert de resistance ? http://labalec.fr/erwan/wp-content/uploads/2014/06/uln2803a_bb-1024x629.png

          @remace

          Mouais je préfère la méthode des résistances plus conventionnelle et plus sûre.

          Il va me falloir un transfo alors si je veux utiliser la prise secteur ! Le but de mon projet reste quand même d'être portable un minimum, comme dit plus haut la taille de l'objet ferait environ 30x30cm donc ça reste transportable.

          C'est ça, ce sont des imprimantes qui réalisent sur mesure des lignes de cuivre sur des circuits imprimés, mais je suis désolé je ne trouve pas le nom exact du truc.

          --------

          Autre petite question : Si je veux gérer la puissance du courant apportée aux 7seg, je peux utiliser un poten juste à la sortie du générateur (5v pour l'arduino, mais pile si j'ai mes 81 7seg) ?

          -
          Edité par syndrome5 8 mai 2015 à 21:00:57

          • Partager sur Facebook
          • Partager sur Twitter
            8 mai 2015 à 21:04:00

            arf non moi je te parlais d'une astuce avec les imprimantes laser qui font que l'encre qui est dessus conduit, et permet d'imprimer tes circuits intégrés. et si tu le fais sur du papier transfert, tu peux ensuite passer ton truc au fer à repasser sur une plaque, et ça se dépose proprement... enfin j'avais trouvé des trucs de ce style.

            j'avais pas fait le calcul, mais si t'en as pour plus de 5A, c'est même un gros transfo qu'il te faudrait. ou alors faire un système de balayage pour que pas tout soit allumé en même temps.

            pour les impots, j'ai pas trop vu ce que tu insinues, ils me donnent des sous cette année :P. par contre, pour les fonctionnaires, ça marche comme ça. on gèle les grilles de salaires, et comme ça on gagne beaucoup d'argent tous les ans. et comme les fonctionnaires en perdent, bah ils sont pas contents. mais l'état est pas con, il supprime les postes de fonctionnaires, comme ça y'en a de moins en moins qui gueulent. et en plus comme c'est un corps de métiers ou tout le monde est vu comme des tire-aux flancs pétés d'avantages, la jalousie ambiante fait que tout le monde applaudit des deux mains. (ceci dit, moi, la politique, si je pouvais vivre sans, ça m'arrangerait, parce que je passe mon temps à m'engueuler avec mon entourage sur des sujets comme ça :p )

            • Partager sur Facebook
            • Partager sur Twitter

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

              8 mai 2015 à 21:10:06

              remace a écrit:

              arf non moi je te parlais d'une astuce avec les imprimantes laser qui font que l'encre qui est dessus conduit, et permet d'imprimer tes circuits intégrés. et si tu le fais sur du papier transfert, tu peux ensuite passer ton truc au fer à repasser sur une plaque, et ça se dépose proprement... enfin j'avais trouvé des trucs de ce style.

              j'avais pas fait le calcul, mais si t'en as pour plus de 5A, c'est même un gros transfo qu'il te faudrait. ou alors faire un système de balayage pour que pas tout soit allumé en même temps.

              pour les impots, j'ai pas trop vu ce que tu insinues, ils me donnent des sous cette année :P. par contre, pour les fonctionnaires, ça marche comme ça. on gèle les grilles de salaires, et comme ça on gagne beaucoup d'argent tous les ans. et comme les fonctionnaires en perdent, bah ils sont pas contents. mais l'état est pas con, il supprime les postes de fonctionnaires, comme ça y'en a de moins en moins qui gueulent. et en plus comme c'est un corps de métiers ou tout le monde est vu comme des tire-aux flancs pétés d'avantages, la jalousie ambiante fait que tout le monde applaudit des deux mains. (ceci dit, moi, la politique, si je pouvais vivre sans, ça m'arrangerait, parce que je passe mon temps à m'engueuler avec mon entourage sur des sujets comme ça :p )

              Oui bon j'ai pas envie que ça parte en débat non plus sur mon topic :p
              Je t'avoue que je m'en rend pas compte, 5A ça représente quoi exactement ? Je sais que j'avais une batterie Li-ion 3000mAh 14,7v pour mon hélicoptère RC, donc 3A, mais bon avec 2 piles comme ça on pourrait alimenter mon montage, ce qui semble possible quand même. Enfin bon niveau autonomie je dis pas (quelques dizaines de minutes ?) mais c'est possible..... Je t'avoue que ça me fait ch*er de devoir faire ça en secteur.

              EDIT : Je rajoute que je veux utiliser des cd4028be dans mon projet qui me semble intéressant pour router l'information en binaire sur les endroits que je veux.

              -
              Edité par syndrome5 8 mai 2015 à 21:12:20

              • Partager sur Facebook
              • Partager sur Twitter
                8 mai 2015 à 21:30:18

                Faire un codage 7 segments sur l'arduino, c'est tout à fait possible et vraiment pas compliqué ;)

                D'où l’intérêt que tu as à supprimer tes décodeur BCD qui ne servent pas à grand chose à par complexifier ton montage.


                Le HC595 n'a rien à voir avec du multiplexage.

                Le multiplexage, c'est jouer sur l'alternance des allumages extrêmement vite de façon à ce que l'ensemble paraisse normale.

                Par exemple, tu vas allumer ton premier digit pendant une fraction de seconde, puis le suivant, et encore le suivant...

                A instant, il n'y a donc qu'un seul digit allumé (donc consomme peu) mais comme l'alternance est extrêmement rapide, l'oeil humain a l'impression qu'ils sont tous allumés.


                Oui, j'ai déjà vu du scotch de cuivre mais uniquement pour de la CEM (faire une grosse barrière de cuivre pour réduire le rayonnement électromagnétique d'un montage).

                Je n'ai jamais vu quelqu'un utiliser du scotch de cuivre pour faire un circuit (mais ça doit être possible).


                Je ne vois pas trop en quoi l'ULN2803 va t'aider puisque c'est juste un driver de puissance.

                Il ne retient rien du tout (pas de RAM, ni de Latch) et se contente simplement de recopier l'entrée sur la sortie.

                On utilise ce genre de circuit pour contrôler des éléments qui consomment beaucoup (des relais par exemple) et que l'on ne peut pas brancher directement sur la sortie d'un micro-processeur ou d'un autre circuit.

                Une LED, ça ne consomme pas énormément et le HC595 supporte jusqu'à 25mA par sortie donc je doute fort que tu ai besoin d'un ULN2803 (sauf si c'est des énormes LED de puissance mais je doute que ce soit le cas).

                -
                Edité par lorrio 8 mai 2015 à 21:30:39

                • Partager sur Facebook
                • Partager sur Twitter
                  9 mai 2015 à 0:11:35

                  1) En une fonction c'est réglé quoi un BCD numérique avec 4 entrées et 7 sorties, que je retransmet en 3 sorties avec le HC595 !

                  2) La méthode du HC595 est donc une alternative au multiplexage si je comprends bien.

                  3) C'est avec une imprimante spécial, je vais me renseigner pour en savoir plus sur la chose.

                  4) D'accord je ferai donc sans ULN.

                  Bon d'un côté il y a des gens qui me disent que je ne peux pas gérer autant de puissance (entre 3 et 4A) sur batterie et d'autres qui me disent que je peux gérer cela aisément (utilisation de batterie dites torche). Qui croire ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 mai 2015 à 0:24:44

                    Le multiplexage est très utilisé dans les matrice carré car il permet aussi de réduire considérablement le nombre de fils.

                    Par exemple, pour contrôle en carré de 8x8 LED (soit 64 LED), il faut :

                    - 65 fils avec la méthode standards (un pour chaque LED + un fil de masse commun à toutes les LED)

                    - 16 fils avec du multiplexage (8 fils colonne + 8 fils lignes)

                    Explication en vidéo : https://www.youtube.com/watch?v=lZyc6ulpkyM

                    Mais cela demande de rafraichir en permanence ligne/colonne donc le programme est plus complexe.

                    Avec des HC595, le programme est simple : l'arduino envoie une consigne et les HC595 la maintient jusqu'à la prochaine consigne.


                    Tu peux parfaitement utiliser des batteries, il faut juste prendre en compte que 3 ou 4A n'est pas un courant négligeable ;)

                    Petit exemple avec ce genre de pile :

                    Si tu en mets 4 en série, tu obtiendras du 4.8V, ce qui est plutôt pas mal pour alimenter ton arduino et tes LED.

                    Mais ces batteries ne font que 2200mAh ce qui signifie qu'elles ne peuvent délivrer que 2200mA en une heure avant d'être complètement vide.

                    Si tu leur demande 4A (soit 4000mA), elle vont donc se vider presque 2 fois plus vide soit en un peu plus de 30min.

                    Cela ne fait pas beaucoup d'autonomie et c'est assez rapide comme décharge (elle pourrait ne pas trop apprécier).

                    -
                    Edité par lorrio 9 mai 2015 à 0:25:48

                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 mai 2015 à 11:07:29

                      D'accord je comprends bien pourquoi on n'utilise pas de HC595 dans le cube de LED.

                      Bon je vais me remettre à mes schémas sur Proteus et Logisim et on verra bien ce que j'arrive à faire !

                      Oui quand on sait qu'1A peut tuer un humain... On fait gaffe ! J'ai tout compris en ce qui concerne le courant, mais pour la tension je n'ai pas tout pigé quant à ce que je dois utiliser (additionner toutes les tensions demandées par tous les composants ?)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 mai 2015 à 11:14:19

                        Un courant de 1A peut tuer un humain mais encore faut-il pouvoir le faire traverser dans le corps ;)

                        Par exemple, une batterie de voiture peut délivrer sans problème des centaines d'ampères mais si tu la touches, il ne se passera rien car la tension de 12V n'est pas suffisante pour faire passer 1A au travers la résistance du corps.


                        Pour la tension/puissance, tout dépend de comment tu connectes les batteries.

                        Imaginons que tu as 2 batteries de 1.2V 2200mAh,

                        • Si tu les connectes en série, c'est la tension qui s'additionne, tu obtiens alors une batterie de 2.4V 2200mAh
                        • Si tu les connectes en parallèle, c'est la puissance qui s'additionne, tu obtiens alors une batterie de 1.2V 4400mAh

                        Avec un bloc de 4 batteries en série, tu obtiens donc une batterie équivalente à 4.8V 2200mAh

                        Si tu connectes 2 de ces blocs en parallèle (donc 8 batteries au totale), tu obtiens donc une batterie équivalente à 4.8V 4400mAh

                        -
                        Edité par lorrio 9 mai 2015 à 11:15:45

                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 mai 2015 à 11:25:47

                          Ah c'est bon à savoir ça (je viens de comprendre alors pourquoi les industriels nous font mettre un certain nombre d'AAA dans les boitiers).

                          Mais ma question était plus orienté sur la tension que je vais avoir besoin, je dois la calculer comment ? (maintenant que tu m'as appris comment récuperer plus de tension sans utiliser 1 seule pile). Parce que on a bien additionné les courants pour atteindre des chiffres tels que 3-4A mais peut-être que pour la tension il faut multiplier (enfin la logique me dit d’additionner mais je demande confirmation)

                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 mai 2015 à 11:47:16

                            Tout dépend des éléments que tu utilises.

                            Les LED des afficheurs ont généralement besoin de 2.2V donc si tu as une source d'alimentation plus forte, il te faudra mettre une résistance.

                            Quand à l'arduino, il a théoriquement besoin :

                            • de 5V si tu l'alimentes directement par la pin 5V ou le connecteur USB
                            • de 7 à 15V si tu l'alimentes par la prise Jack d'alimentation

                            D'où ma proposition de prendre 4 piles en séries pour avoir du 4.8V qui devrait convenir à l'arduino ainsi qu'à tes LED en prenant la bonne résistance.

                            Cependant, une pile chargée à 100% a une tension plus importante qu'une pile chargée à 20% donc ce n'est pas vraiment optimale comme méthode d'alimentation.

                            Je te conseillerais donc bien d'utiliser un régulateur à découpage de type step down comme celui-ci : http://www.ebay.fr/itm/like/171564440790?hlpv=2&lpid=110

                            Ce régulateur accepte de 4 à 38V en entrée et sort une tension réglable de 1.23 à 36V en sortie, 5A maxi.

                            Tu pourrais alors utiliser 8 piles en série pour du 9.6V et régler ce régulateur sur 5V.


                            Ces régulateurs à découpage convertissent l'énergie par rendement de l'ordre de 80%

                            Par exemple, si tu consommes 5V, 1A en sortie et que tu l'alimentes en 9.6V, alors le courant consommé sur le 9.6V sera :

                            • I = 1A * ( 5V / 9.6V ) * ( 1 /  80% ) = 0.65A

                            Plus tu lui donnes une tension haute en entrée, moins il consommera sur cette tension pour le même courant de sortie.

                            Mais on peut ruser encore plus en abaissant la tension de sortie ;)

                            Par exemple, si tu as 1A, 5V en sortie pour allumer tes LED, tu as forcément des résistances qui abaissent la tension de 5V à une tension de 2.2V acceptable par les LED.

                            Ces résistances vont donc transformer les 2.8V de trop en chaleur, ce qui est dommage.

                            L'idée serait de régler ce régulateur sur 3.0V et d'utiliser une résistance de LED plus faible.

                            Ainsi, pour avoir 3V, 1A en sortie, ce régulateur consommera 1A * ( 3V / 9.6V ) * ( 1 /  80% ) = 0.4A sur la tension d'entrée 9.6V.

                            Je te conseillerais donc bien d'utiliser ce régulateur pour alimenter tes LED (avec une tension de 3V) et connecter la tension 9.6V des batteries sur l'entrée Jack de l'arduino.

                            Par contre, les HC595 étant aussi alimenté en 3V, il te faudra un petit système de level shift pour rabaisser les signaux 5V qu'envoie l'arduino en 3V (ce n'est pas bien compliqué mais il faut le faire).

                            -
                            Edité par lorrio 9 mai 2015 à 11:51:15

                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 mai 2015 à 13:06:11

                              pour la tension, surtout pas. Au mieux, il faudrait que tu aie c'est une alimentation 5V qui soit capable de fournir tout le courant nécessaire à ton montage.

                              as-tu déjà commandé tes afficheurs, et si oui, t'as accès à quoi comme pattes commandables? (en bref c'est des afficheurs à led, ou à cristaux liquides rétroéclairés?)

                              0.1A est considéré comme mortel. 0.075A aussi 0.040A c'est quand ça devient dangereux, et 0.025A c'est les premiers risques mineurs, selon je sais plus quelle norme utilisée par tous les électriciens de france.

                              EDIT: j'ai un gros probleme, quand je commence àç répondre, c'est toujours espacé d'au moins 3h avec le moment ou je clique sur répondre. et donc toujours y'a quelqu'un qui écrit ce que je dis (et même souvent beaucoup plus, dans le cas de lorrio) entre temps.

                              -
                              Edité par remace 9 mai 2015 à 13:09:16

                              • Partager sur Facebook
                              • Partager sur Twitter

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

                                9 mai 2015 à 14:12:31

                                remace a écrit:

                                EDIT: j'ai un gros probleme, quand je commence àç répondre, c'est toujours espacé d'au moins 3h avec le moment ou je clique sur répondre. et donc toujours y'a quelqu'un qui écrit ce que je dis (et même souvent beaucoup plus, dans le cas de lorrio) entre temps.

                                Si tes réponses mettent 3 heures à s'afficher, ce n'est pas normal...

                                Je te conseille d'aller poster un petit rapport expliquant ce bug dans la section "fonctionnement du site" ;)

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 mai 2015 à 14:42:53

                                  Bon ca reste compliqué tout ce que tu mets dis là lorrio je dois relire plusieurs fois pour comprendre à peu près, et encore. J'ai compris pourquoi tu veux utiliser un régulateur mais je ne comprends pas ce qu'est qu'une tension de sortie..

                                  Je vois sur ma simulation, et puis je vous transmets ça pour que vous me disiez si j'ai fais n'importe quoi :D

                                  Et non je n'ai rien commandé, je veux vraiment avoir compris un maximum de choses et avoir tout sur simulation et papier avant de commander quoi que ce soit.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 mai 2015 à 15:22:28

                                    Le but d'un régulateur est de transformer une tension en une autre.

                                    Par exemple, tu lui donnes du 9.6V (donc tension d'entrée = 9.6V) et il te transforme ça en 5V (donc tension de sortie = 5V).

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      9 mai 2015 à 15:54:46

                                      http://puu.sh/hH1BH/9b0f8f25f3.png

                                      J'ai réussi à faire un compteur avec des HC595 en cascade, bon ça reste simple mais il va en falloir 78 autres !!

                                      Je me posais juste une question à propos de ce composant en cascade : Comme tu l'as dit il est cadencé à 170Mhz, peux-tu me confirmer que mettre 81 HC595 en cascade n'est visible à l'oeil nu lors du rafraichissement général des 81 7segm ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        9 mai 2015 à 16:31:17

                                        Je ne sais pas d'où tu sors ce 170MHz...

                                        La doc précise que l'horloge est de maxi 24MHz avec une alimentation 5V et 4.8MHz avec une alimentation 2V.

                                        Mais de toute façon, l'arduino n'est pas capable de sortir des fréquences aussi élevées.

                                        Ce n'est d'ailleurs pas une bonne idée de propager un signal à cette fréquence sur de longs fils avec la cascade de pleins d’éléments.

                                        Je te conseille donc d'utiliser le bus SPI hardware de l'arduino avec un coeff diviseur SPI_CLOCK_DIV128 pour avoir un signal à 125kHz.

                                        Une horloge à 125kHz signifie 125000 bits par secondes et donc 5.2ms pour rafraichir les 648 bits de tes 81 afficheurs.

                                        Une fois que tous les HC595 ont été rafraichi en interne, il te suffit de mettre le signal ST_CP à HIGH pour qu'ils recopient leur données internet sur leur sortie.

                                        Ainsi, toutes les sorties changeront en même temps ;)

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          9 mai 2015 à 16:38:50


                                          Pour le 170Mhz j'ai du confondre avec un autre composant désolé..

                                          Ce n'est pas ce que j'ai fais dans mon code ? :

                                          digitalWrite(verrou, LOW);
                                          shiftOut(data, horloge, MSBFIRST, s1);
                                          shiftOut(data, horloge, MSBFIRST, s2);
                                          shiftOut(data, horloge, MSBFIRST, s3);
                                          digitalWrite(verrou, HIGH);

                                          Là toutes les données sont modifiées en interne et changent toutes en même temps quand le verrou passe à HIGH normalement.

                                          Par contre ton bus SPI Hardware je ne sais pas ce que c'est je vais aller googler ça.

                                          EDIT: Ce que tu veux dire c'est qu'au lieu que je mette 81 HC595 en cascade, il faudrait que j'en mette moins et que j'utilise plus de PIN arduino ? du genre split en 4 par exemple (par groupe de ~20) ?

                                          lorrio a écrit:

                                          Je ne sais pas d'où tu sors ce 170MHz...

                                          La doc précise que l'horloge est de maxi 24MHz avec une alimentation 5V et 4.8MHz avec une alimentation 2V.

                                          Mais de toute façon, l'arduino n'est pas capable de sortir des fréquences aussi élevées.

                                          Ce n'est d'ailleurs pas une bonne idée de propager un signal à cette fréquence sur de longs fils avec la cascade de pleins d’éléments.

                                          Je te conseille donc d'utiliser le bus SPI hardware de l'arduino avec un coeff diviseur SPI_CLOCK_DIV128 pour avoir un signal à 125kHz.

                                          Une horloge à 125kHz signifie 125000 bits par secondes et donc 5.2ms pour rafraichir les 648 bits de tes 81 afficheurs.

                                          Une fois que tous les HC595 ont été rafraichi en interne, il te suffit de mettre le signal ST_CP à HIGH pour qu'ils recopient leur données internet sur leur sortie.

                                          Ainsi, toutes les sorties changeront en même temps ;)



                                          -
                                          Edité par syndrome5 9 mai 2015 à 16:54:46

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            9 mai 2015 à 17:28:46

                                            Non, je ne veux pas te dire de spliter tes HC595, cela ne servirait pas à grand chose.

                                            La fonction shiftout émule un bus SPI de façon logiciel à coup de digitalWrite.

                                            Tu ne maitrise donc pas du tout la vitesse de communication puisque cela dépend de la vitesse d'exécution de la fonction digitalWrite et de tout un tas d'autre paramètres.

                                            D'où l’intérêt d'utiliser le bus SPI hardaware de l'arduino ;)


                                            Tu as la doc du SPI ici : http://www.arduino.cc/en/Reference/SPI

                                            Dans la fonction setup, tu dois l'initialiser le bus avec quelque chose du genre :

                                            SPI.begin();
                                            SPI.setDataMode(SPI_MODE0);
                                            SPI.setBitOrder(MSBFIRST);
                                            SPI.setClockDivider(SPI_CLOCK_DIV128);

                                            Et ensuite, tu utilises la fonction transfert à la place de shiftout :

                                            digitalWrite(verrou, LOW);
                                            SPI.transfert(s1);
                                            SPI.transfert(s2);
                                            SPI.transfert(s3);
                                            digitalWrite(verrou, HIGH);

                                            A noter que le bus SPI hardware possède des pins non interchangeable :

                                            • Le signal Horloge est sur la pin 13
                                            • Le signal Data est sur la pin 11
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              9 mai 2015 à 17:54:36

                                              D'accord merci de ton éclairage ! Mais pourquoi ils ont pas rajouté un paramètre dans ShiftOut pour gérer la vitesse avec un SPI_CLOCK_DIV128 ?? :lol:

                                              Je vais utiliser le SPI alors normalement ca changera rien en résultat simulation mais c'est sur qu'en résultat hardware ça doit être autre chose. Je mets quand même les 81 en cascade du coup puisque grace à ce bus SPI la fréquence d'envoi de bit a été accéléré ?

                                              EDIT: J'ai vu un petit capaciteur 1µF dans le schéma. On en vient à ce composant qui ne m'a jamais été utile, et pourtant je le vois sur tous les schémas élémentaires. Je ne le comprends pas même après avoir essayé le support papier et vidéo. En fait j'ai l'impression de voir le rôle d'une "résistance améliorée", de plus le fait qu'il n'y ait pas de sens + et - me fait perdre confiance en sa logique. Avez-vous un exemple CONCRET d'utilisation utile ? car rajouter un capaciteur par ci par là c'est pas fou...

                                              -
                                              Edité par syndrome5 9 mai 2015 à 18:26:50

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                9 mai 2015 à 19:33:01

                                                Le SPI hardware est comme son nom l'indique : quelque chose de hardware... implanté directement dans le silicium de l'arduino de façon à pouvoir gérer un bus SPI sans que le cœur n'est à se soucier de quoi que ce soit.

                                                Il y a toujours plus ou moins moyen d'émuler des fonctions hardware (la fonction shifout en est la preuve) mais c'est généralement moins performant avec quelques limitation (comme l'impossibilité de régler le débit par exemple).


                                                Comme je te l'ai dis, la fonction shifOut émule un SPI à coup de digitalWrite :

                                                void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
                                                {
                                                        uint8_t i;
                                                
                                                        for (i = 0; i < 8; i++)  {
                                                                if (bitOrder == LSBFIRST)
                                                                        digitalWrite(dataPin, !!(val & (1 << i)));
                                                                else    
                                                                        digitalWrite(dataPin, !!(val & (1 << (7 - i))));
                                                                        
                                                                digitalWrite(clockPin, HIGH);
                                                                digitalWrite(clockPin, LOW);            
                                                        }
                                                }

                                                Il faut savoir que digitalWrite prend environ 5us à s'exécuter et comme il en faut 3 par bit, cela fait un débit maxi de 66.6kb/s.

                                                Mais cela ne tient pas compte du temps exécution des autres calculs tels que !!(val & (1 << i))

                                                Au final, la fonction shifOut est extrêmement lente par rapport au but SPI hardware puisque son débit ne dépasse probablement pas les 50kb/s

                                                Avec le bus SPI hardware, tu peux avoir une vitesse minimale de 125kb/s (avec DIV128) et monter jusqu'à 8192kb/s (avec DIV2).

                                                -
                                                Edité par lorrio 9 mai 2015 à 19:34:32

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  9 mai 2015 à 20:46:57

                                                  Bon après tous ces bons conseils j'en suis arrivé à là :

                                                  http://puu.sh/hHhvI/288465e948.png

                                                  Je fais souffrir mon PC mais au moins j'ai une vue d'ensemble de ce que je voudrais. Malheureusement quand je lance la simulation rien ne s'allume. Je vais tester avec plus de courant mais je ne sais pas si c'est ça qui provoque le non-allumage (ça marchait avec 6).

                                                  EDIT: OK J'AI RIEN DIS j'ai totalement oublié Vcc et Gnd.
                                                  Après rectification il n'y a que les 3 premiers digits qui s'allument

                                                  -
                                                  Edité par syndrome5 9 mai 2015 à 20:57:51

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    9 mai 2015 à 21:10:08

                                                    On ne voit strictement rien sur ton image...

                                                    Pourrais tu en prendre plusieurs avec un zoom permettant de voir correctement les branchement ?

                                                    Au alors, au moins un zoom montrant les 6 premiers afficheurs, cela devrait suffire je pense.

                                                    Il nous faudrait aussi le code complet que tu utilises ;)

                                                    -
                                                    Edité par lorrio 9 mai 2015 à 21:11:30

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      9 mai 2015 à 21:49:04

                                                      http://puu.sh/hHlFd/857f7d8fa1.png

                                                      #include <SPI.h>
                                                      
                                                      const int verrou = 10;
                                                      const int horloge = 13;
                                                      const int data = 11;
                                                      
                                                      int s[81];
                                                      int c[81];
                                                      
                                                      void setup()
                                                      {
                                                          pinMode(verrou, OUTPUT);
                                                          pinMode(horloge, OUTPUT);
                                                          pinMode(data, OUTPUT);
                                                          
                                                          SPI.begin();
                                                          SPI.setDataMode(SPI_MODE0);
                                                          SPI.setBitOrder(MSBFIRST);
                                                          SPI.setClockDivider(SPI_CLOCK_DIV128);
                                                          
                                                          int i;
                                                          for (i=0;i<81;i++)
                                                          {
                                                             s[i] = i%10;
                                                             c[i] = BCD7seg(s[i],0);
                                                          }
                                                          intTo7seg(c);
                                                      }
                                                       
                                                      
                                                      void loop()
                                                      {
                                                          
                                                          
                                                      }
                                                      
                                                      void intTo7seg(int c[81])
                                                      {
                                                          int i;
                                                          digitalWrite(verrou, LOW);
                                                          for (i=0;i<81;i++)
                                                          {
                                                            SPI.transfer(c[i]);
                                                          }
                                                          digitalWrite(verrou, HIGH);
                                                      }
                                                      
                                                      int binToDec(int p0, int p1, int p2, int p3, int p4, int p5, int p6, int d)
                                                      {
                                                          return (p0)+(p1)*2+(p2)*4+(p3)*8+(p4)*16+(p5)*32+(p6)*64+(d)*128;
                                                      }
                                                      
                                                      int BCD7seg(int val, int d)
                                                      {
                                                          switch (val)
                                                          {
                                                             case 0:
                                                                 return binToDec(1,1,1,1,1,1,0,d);
                                                             break;
                                                             case 1:
                                                                 return binToDec(0,1,1,0,0,0,0,d);
                                                             break;
                                                             case 2:
                                                                 return binToDec(1,1,0,1,1,0,1,d);
                                                             break;
                                                             case 3:
                                                                 return binToDec(1,1,1,1,0,0,1,d);
                                                             break;
                                                             case 4:
                                                                 return binToDec(0,1,1,0,0,1,1,d);
                                                             break;
                                                             case 5:
                                                                 return binToDec(1,0,1,1,0,1,1,d);
                                                             break;
                                                             case 6:
                                                                 return binToDec(1,0,1,1,1,1,1,d);
                                                             break;
                                                             case 7:
                                                                 return binToDec(1,1,1,0,0,0,0,d);
                                                             break;
                                                             case 8:
                                                                 return binToDec(1,1,1,1,1,1,1,d);
                                                             break;
                                                             case 9:
                                                                 return binToDec(1,1,1,1,0,1,1,d);
                                                             break;
                                                          }
                                                      }



                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        9 mai 2015 à 22:22:10

                                                        Cela parait tout à fait logique :)

                                                        La pin 10 de l'arduino qui sert à commander les latch ainsi que la pin 13 qui sert à faire passer l'horloge n'est reliée qu'au 3 premiers HC595.

                                                        Il n'y a donc que ces 3 premiers HC595 qui vont afficher des choses ;)

                                                        Je crois que tu as oublié 2 fils :


                                                        Ta fonction binToDec ne sert absolument à rien à part ralentir le programme avec des calculs.

                                                        Pourquoi ne pas mettre directement tout ça sous forme binaire :

                                                        case 0:
                                                            return ( 0b0111111 | ( d << 7 ) );
                                                        case 1:
                                                            return ( 0b0000110 | ( d << 7 ) );

                                                        Pour les autre cases, il te suffit de faire exactement comme j'ai fais :

                                                        • Mettre tes d0, d1, d2, d3... dans l'ordre inverse avec un 0b devant.
                                                        • Ajouter le d avec un << 7

                                                        Mais pourquoi ne pas faire un tableau, tout simplement :

                                                        int BCD7seg(int val, int d)
                                                        {
                                                            static int array[10] = {
                                                                /* 0 */ 0b0111111,
                                                                /* 1 */ 0b0000110,
                                                                /* 2 */ ...
                                                                ...
                                                            }
                                                            return ( array[val] | ( d << 7 ) );
                                                        }
                                                        

                                                        Mais n'oublies pas que la RAM de l'arduino est limitée à 2Ko et qu'un int prend 2 octets.

                                                        Pour stocker les 8 bits de tes digits, je t'encourage donc vivement à utiliser unsigned char qui ne prend qu'un seul octet en RAM ;)


                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          10 mai 2015 à 0:44:01

                                                          Bonsoir !

                                                          Merci beaucoup pour m'avoir fait remarqué ce "petit" oublie qui avait été fait sur tout le montage, tout fonctionne bien à présent :

                                                          http://puu.sh/hHx7p/4646625486.png

                                                          ---

                                                          D'accord merci pour toutes ces petites astuces ! J'avoue que je programme depuis longtemps en C mais le (d << 7) me reste encore en travers de la gorge.

                                                          Bon je vais voir à quoi sert ton static sur le net !

                                                          EDIT: Bon j'ai modifié mon code avec tes conseils et tout marche parfaitement et il calcule moins ca servira pour la suite ! Je vais maintenant me faire des schémas papiers pour voir comment je vais mettre mes composants, je pense déjà utiliser 2 plaques montés l'une sur l'autre avec les resistances qui relient les 2, sur celle du dessus les 7 segm et sur celle du dessous les microcontroleurs (avec les Vcc, Gnd, l'horloge et le verrou)

                                                          -
                                                          Edité par syndrome5 10 mai 2015 à 0:53:09

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            10 mai 2015 à 1:32:39

                                                            Le << correspond à un décalage binaire de 7 bits sur la gauche.

                                                            Cela revient exactement au même que faire une multiplication par 128 mais en plus rapide ;)


                                                            Quand au static, c'est pour dire que ce n'est pas une variable locale mais une sorte de variable globale qui n'est initialisée qu'une seule fois.

                                                            Cela évite que la fonction ré-initialise le tableau pour rien à chaque appel.

                                                            Mais tu peux très bien utiliser une variable globales si tu préfères :

                                                            int array[10] = {
                                                                /* 0 */ 0b0111111,
                                                                /* 1 */ 0b0000110,
                                                                /* 2 */ ...
                                                                ...
                                                            };
                                                            
                                                            
                                                            int BCD7seg(int val, int d)
                                                            {
                                                                return ( array[val] | ( d << 7 ) );
                                                            }



                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              10 mai 2015 à 1:39:22

                                                              Mais il y a quand même un point qui m'échappe :)

                                                              Pourquoi des afficheurs 7 segments ?

                                                              Un petit écran TFT n'aurait-il pas été plus joli, plus petit et beaucoup plus simple à câbler ?

                                                              Exemple : https://www.youtube.com/watch?v=ipvepLgWo6Q

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              [Projet] De nombreuses questions

                                                              × 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