Quelle est la différence entre INPUT et INPUT_PULLUP?

24

Sur les nouveaux Arduinos, on peut mettre pinMode à l' un des trois états: OUTPUT, INPUTet INPUT_PULLUP.

Cette page dit:

La puce Atmega sur l'Arduino possède des résistances de rappel internes (résistances qui se connectent à l'alimentation en interne) auxquelles vous pouvez accéder. Si vous préférez les utiliser au lieu de résistances de rappel externes, vous pouvez utiliser l'argument INPUT_PULLUP dans pinMode (). Cela inverse efficacement le comportement, où HIGH signifie que le capteur est éteint et LOW signifie que le capteur est allumé.

Je suis plutôt sûr qu'inverser le comportement n'est pas la seule chose qu'il fait, cependant.

Que fait INPUT_PULLUP-il? Qu'est-ce qui le différencie INPUTet comment décide-t-on lequel utiliser?

Manishearth
la source
INPUT_PULLUP a été ajouté avec IDE 1.0.1. Peu importe la carte Arduino que vous utilisez, elles prennent toutes en charge les PULLUP.
baldengineer

Réponses:

23

La valeur par défaut est celle INPUTqui configure la broche en tant que INPUT. Si la broche est totalement déconnectée, elle lira au hasard HIGHet LOW. Si vous le liez à + 5V ou 0V, il lira évidemment HIGHou LOW.

À l'intérieur de l'Arduino se trouvent des résistances de rappel d'une valeur d'environ 50k ohms. Ces résistances peuvent être éventuellement connectées en interne en utilisant INPUT_PULLUP. Ceci est fonctionnellement (et électriquement) équivalent à la connexion d'une résistance de 50k ohms entre la broche et + 5V, la seule différence est qu'elle ne nécessite aucun composant externe et vous pouvez l'activer et la désactiver dans le logiciel pendant l'exécution de votre programme.

Alors pourquoi des tractions et non des descentes? Il y a probablement plusieurs raisons à cela, mais lorsque vous câblez des boutons ou des commutateurs ou quoi que ce soit "normalement ouvert", vous n'avez qu'à les relier à la terre, vous n'avez pas besoin de leur faire + 5V. Étant donné que la plupart des cartes vont être conçues avec de grandes coulées de terre pour des raisons de blindage de toute façon, le fait de nouer à la terre est pratiquement une raison.

Certains circuits intégrés plus en vedette comme les puces ARM ont à la fois des tractions et des descentes, mais la ligne AVR 8 bits n'est livrée qu'avec des tractions. Vous devez juste vous rappeler que HIGHc'est "ouvert" et LOW"fermé".


la source
Upvote. Pour info, selon la documentation, les tractions internes sont de 20K, pas que cela fasse beaucoup de différence par rapport à 50K. arduino.cc/en/Tutorial/DigitalPins
SDsolar
9

Notez qu'avant 1.0.1, vous pouviez activer les pullups en utilisant digitalWrite(). Et vous pouvez toujours.

Le code:

pinMode(13, INPUT);
digitalWrite(13, HIGH); // Turns internal pull-up on
digitalWrite(13, LOW);  // Turns internal pull-up off

Il s'agit d'une distinction importante, car elle INPUT_PULLUPactive évidemment la résistance de rappel. Cependant, ce qui est moins évident, c'est qu'à partir de la version 1.0.1, un simple appel INPUTforce à désactiver le pull-up. (Auparavant, l'état du pull-up est resté le même).

Pour voir comment fonctionne une épingle avec et sans tractions, regardez les vidéos suivantes.

Broche flottante sur un oscilloscope: http://www.youtube.com/watch?v=dBIBFLYCjMM

Avec Pull-Up activé: http://www.youtube.com/watch?v=SAIw7LLVl-U

Vidéo tutoriel complète sur les Pull-Ups (notez que j'ai fait cela avant que INPUT_PULLUP soit ajouté à la bibliothèque Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo

baldengineer
la source
Très intelligent. Merci d'avoir écrit ceci. Upvote.
SDsolar