Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Arduino] Commutation simultanée plusieures pin

    13 février 2014 à 8:31:31

    Bonjour :)

    Pour mon projet à base d'Arduino Mega j'aurais besoin de définir l'état de plusieurs sorties digitales de façon simultanées.

    En faisant des recherches, je suis tombé sur cet article. (hardcoding)

    Savez vous s'il existe d'autres solutions? Ou si celle-ci est applicable sur une Mega? Si oui, de quelle façon?

    Le gain de réactivité m'intéresse également.

    Tout avis et conseils sont les bienvenus ;)

    Merci,

    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2014 à 8:36:26

      Question bonus:

      Le mapping de la mega est-il le même pour la version 1280 et 2560?

      • Partager sur Facebook
      • Partager sur Twitter
        13 février 2014 à 8:55:25

        Tous les micro-processeur utilisent ce principe pour changer la valeur des ports.

        C'est d'ailleurs l'unique façon d'y accéder.

        Sur arduino, il y a en plus les fonctions digitalWrite et digitalRead pour accéder à une pin précise mais elles utilisent quand même les registres PORTA, PORTB ... ce qui est 100 fois plus lent car elles doivent analyser les paramètres afin d’effectuer la bonne opération sur les ports.

        La preuve : digitalWrite comprend 5 appels de fonctions, 3 if, pas mal d'instructions ...

        void digitalWrite(uint8_t pin, uint8_t val)
        {
                uint8_t timer = digitalPinToTimer(pin);
                uint8_t bit = digitalPinToBitMask(pin);
                uint8_t port = digitalPinToPort(pin);
                volatile uint8_t *out;
        
                if (port == NOT_A_PIN) return;
        
                // If the pin that support PWM output, we need to turn it off
                // before doing a digital write.
                if (timer != NOT_ON_TIMER) turnOffPWM(timer);
        
                out = portOutputRegister(port);
        
                uint8_t oldSREG = SREG;
                cli();
        
                if (val == LOW) {
                        *out &= ~bit;
                } else {
                        *out |= bit;
                }
        
                SREG = oldSREG;
        }

        Donc arrange toi pour mettre tes sorties sur le même port afin de pouvoir en changer 8 d'un coup ;)

        • Partager sur Facebook
        • Partager sur Twitter
          13 février 2014 à 9:37:59

          Ok merci donc si j’analyse le mapping:

          Pin analog IN: port F et port K

          Pin digital : port A, port C, port D, port G, port L et port B?

          problème il y-a des PIN PWM en port B également...?

          les différents ports n'ont pas le même nombre de pin?

          • Partager sur Facebook
          • Partager sur Twitter
            13 février 2014 à 10:56:47

            C'est tout à fait possible qu'il n'y ai pas 8 pin par port.

            Concernant le PWM, il y a forcément des pin PWM sur des I/O mais ce n'est pas gênant car si tu n'utilises pas la fonction PWM, c'est la fonction I/O qui est active.

            Je devrais lire la doc, c'est une vrai mine d'information ;)

            • Partager sur Facebook
            • Partager sur Twitter
              13 février 2014 à 11:46:29

              Merci beaucoup pour tes précisions0

              Donc si je résume j'ai 6 ports en pin digital. ça devrait aller.

              As tu un lien vers une doc "complète"? Pour que JE (:p) puisse lire.

              -
              Edité par bluelazer 13 février 2014 à 11:46:47

              • Partager sur Facebook
              • Partager sur Twitter
                13 février 2014 à 12:13:33

                Petit problème:

                sur ce lien

                on trouve:

                Si je prend par exemple la PIN 22 elle est en "A7" nous somme d'accord?

                En revanche sur ce tableau (trouvé sur le net en tapant mapping arduino mega) la 22 est en A0...???

                lequel est le bon?

                -
                Edité par bluelazer 13 février 2014 à 12:14:09

                • Partager sur Facebook
                • Partager sur Twitter
                  13 février 2014 à 12:43:29

                  Fais un programme de test tout con et tu seras fixé...

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Retrouvez moi sur mon blog et ma chaine Youtube !

                  [Arduino] Commutation simultanée plusieures pin

                  × 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