Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arduino inpull_pullup - précision

Sujet résolu
    1 janvier 2019 à 17:47:28

    Bonjour à tous.

    Me voila quelques chapitres plus loin dans l'apprentissage de l'Arduino.
    Je suis arrivé au bouton poussoir et donc aux inputs.
    Concernant les résistances "extérieures" (placées par moi-même) en pull-down et pull-up, je pense avoir compris.

    Par contre, pour la résistance interne de la carte en "input_pullup", ça fonctionne mais ma compréhension n'a pas suivie...

    Sur ce shema, le "+5V", selon moi, ne sert a rien (je peux le déconnecter, mes données sont inchangées dans le moniteur série).

    Donc la question que je ne peux résoudre c'est:

    La pin est en input (input_pullup mais input tout de même...) et l'autre "coté" de mon bouton va au gnd...
    Donc, d'ou vient la source d’énergie ? (le 5V n'est pas connecté, le grd absorbe, et la pin est en input...)

    Est-ce que le INPUT_PULLUP permet à la pin d’être ET du OUT ET du IN ?


    Si oui, pourquoi le courant préfère t-il aller vers le grn plus tôt que vers la pin ?
    Si non, pouvez vous m'expliquer ?

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      Staff 4 janvier 2019 à 10:00:06

      Quand ton bouton est enfoncé, celui-ci fait la liaison entre le GND et la pin de l'arduino, donc il n'y a pas d’ambiguïté, l'arduino ne peut lire que l'état logique '0'.

      Quand ton bouton est relâché et qu'il n'y a pas de résistance, la pin de l'arduino n'est connecté à rien, ce qui pose problème.

      En effet, le fils allant vers le bouton fait office d'antenne radio et capte toutes les perturbations électromagnétique.

      Au final, l'arduino peut tout aussi bien lire un '0' qu'un '1' car il n'y a rien pour définir un état stable.

      Pour contrer ce problème, on ajoute une résistance de pull-up entre le VCC et la pin.

      Ainsi, quand le bouton est relaché, la pin est relié au VCC à travers de cette résistance, ce qui permet à l'arduino de lire un état logique '1' stable.

      Cependant, ajouter une résistance de pull-up sur chaque entrée devient rapidement **chiant**, surtout quand on a un système avec de nombreuses entrées.

      pour éviter d'avoir à rajouter une multitude de résistances, les concepteurs du microprocesseurs ont pensées à tout : le mode INPUT_PULLUP.

      Dans ce mode là, c'est le processeur lui même qui connecte une résistance interne (gravée à l'intérieur de son silicium) entre sa pin VCC et sa pin INPUT.

      Ainsi, il n'y a plus besoin de rajouter cette résistance à l’extérieur, ce qui représente un gain de temps (moins de composants à souder), d'argent (moins de composants à acheter) et un risque de panne en moins (aucun risque que cette résistance soit mal soudée puisqu'elle est dans le processeur).

      • Partager sur Facebook
      • Partager sur Twitter
        4 janvier 2019 à 18:17:49

        Bonjour et merci pour ces précision.

        Cependant, à la lecture de votre réponse, je peux confirmer (j’espère :) ) que la pin fait office de output ET input...

        J'ai tenté de schématiser ceci ici:

         

        En vert, la pin de l'Arduino
        En rouge, le sens du courant et la valeur lue

        Mais j'ai donc bien du courant qui sort de ma pin, qui lit en même temps la valeur... (ce qui, avec le peu de connaissance que j'ai acquise jusqu'ici, me semblait impossible.)

        Pour ma part, je pense que mon schéma et ma compréhension sont ok pour ce point.
        Si un lecteur chevronné pouvait confirmer que c'est ok niveau "visuelle" (p-e pas technique), je marque le sujet résolu.

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          Staff 5 janvier 2019 à 16:32:47

          Quand le bouton est ouvert, il n'y a pas de courant qui circule en dehors de la pin étant donné que le circuit extérieur est ouvert.

          En revanche, quand le bouton est fermé, il y a effectivement du courant qui circule dans cette résistance interne (en provenance du VCC interne) et qui s’échappe de la pin pour traverser le bouton et ainsi retourner au GND.

          Ce courant reste néanmoins très faible car la résistance interne est de quelques dizaines de kilo ohm.

          Si tu connectes une LED à une pin en INPUT_PULLUP, tu la verras s'éclairer très faiblement car un courant très faible peu suffire à éclairer très faiblement une LED ;)

          Par contre, avec un courant aussi faible, on ne peut pas vraiment parler de OUPUT.

          Ton schéma est un peu erroné... à l'intérieur du processeur, on retourne plutôt quelque chose qui ressemble à ça avec plusieurs transistors faisant office d'interrupteur suivant le mode choisit.

          -
          Edité par lorrio 5 janvier 2019 à 16:41:21

          • Partager sur Facebook
          • Partager sur Twitter
            5 janvier 2019 à 17:22:10

            Un grand merci pour ces précisions que je vais etudier a tête reposée !
            • Partager sur Facebook
            • Partager sur Twitter

            Arduino inpull_pullup - précision

            × 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