INPUT_PULLUP

Bonjour à toutes et tous, (je dis aussi TOUTES mais la gente féminine est-elle aussi présente sur le forum ?)

Je cherche une explication théorique sur le fonctionnement exact d'un montage avec un bouton poussoir et une résistance interne de pullup.

Je maîtrise le montage et le fonctionnement global... mais concrètement :

le courant est délivré par le pin 2 (par ex, avec fonction pinMode(2, INPUT_PULLUP) à travers une résistance. Dans ce cas, le pin délivre du courant et lit l'intensité en entrée... Je trouve bizarre car si on est en mode INPUT, comment on peut délivrer une tension (OUTPUT).

Pouvez-vous éclairer ma lanterne ?

Et petite dernière question pour la route, peut-on utiliser INPUT_PULLUP en analogique, si oui est-ce utile ? (normalement on ne déclare pas les pin analogiques, si je ne m'abuse [donc on a besoin d’écrire pinMode(2, INPUT) mais pas pinMode(A0, INPUT)].

Merci d'avance pour vos réponses.

inputPullupButton.jpg

inputPullupButton.jpg

Tu éclairera ta lanterne en regardant les schémas synoptique dans la datasheet du microcontrôleur.
Tu pourra y voir que la mise en route de la résistance de tirage à l’alimentation (ce que vous appellez en anglais pull-up) est indépendant du mode de fonctionnement.

Le courant est délivré par le pin 2 (par ex, avec fonction pinMode(2, INPUT_PULLUP) à travers une résistance.

Oui ou Non je ne comprend pas bien ce que tu désigne par pin et courant.
Si le bouton est fermé (court-circuit) un courant circule uniquement par l’intermédiaire de la résistance de PullUp. Si le bouton est ouvert aucun courant ne circule.

Dans ce cas, le pin délivre du courant et lit l’intensité en entrée.

Erreur de langage courante chez les débutants entre courant et tension.
Une entrée lit une tension, c’est un voltmètre.
Si le bouton est ouvert la résistance de PU ne fourni pas du courant, la résistance de PU fixe un potentiel électrique (une tension).
S’il n’y avait pas de résistance pour fixer une tension quand le bouton est ouvert, le fil de liaison entre le bouton et l’entrée micro serait en l’air et se comporterait comme une antenne. L’entrée n’arrèterait pas de bagoter entre le 0 et le 1.

Et petite dernière question pour la route, peut-on utiliser INPUT_PULLUP en analogique, si oui est-ce utile ?

Pas vraiment utile sauf dans des cas très particulier mais c’est possible puisque comme je l’ai précisé au début l’activation de la résistance de tirage à l’alim est indépendante du reste des fonctions digitale entrée ou sortie et analogique.
Je pense que c’est possible avec les fonctions arduino, cela avait été contrôlé il y a 3 ou 4 ans et il semble me rappeler que le résultat était positif.
Cela est parfaitement possible en utilisant les registres du micro.

micro_etage_E_S.png

Dernier point :
Les résistances de pull_up interne au micro font entre 30k et 70k selon le lot de fabrication.

Ce qui n'est pas clair pour moi (c'est lié à mon manque de connaissances) ce qu'il me semblait qu'une broche (pin) est soit en lecture ou en écriture mais pas les deux en même temps. Dans le cas d'un INPUT_PULLUP, j'ai l'impression que c'est les deux en même temps puisque l'on fixe une tension et en même temps on lit une tension "à travers" une même broche...

Un grand merci pour ces précisions complètes et désolé pour ces erreurs de langage... j'apprends ! :wink:

Bonjour,

En input_pullup, la broche (pin) du microcontroleur est bien en entrée, donc en lecture (pour simplifier ici).

La résistance de tirage au +vcc (pullup) est activé pour définir un état logic connu sur cette entré.

En électronique, une entrée dois toujours avoir un état connu.

Ainsi: bouton non appuyé, l’Arduino lira un état logique Haut sur cette entrée

bouton appuyé, vet entré est mis à la masse. l’Arduino lira donc un état Bas sur cette entrée.

Les broches “Analogiques” A0 etc sont des entrés à double fonction.

Utilisé en broche logique, elle se comporte comme une autre broche de l’Arduino … 2,3 7 etc. donc le pullup pourra être activé selon les besoins.

En entré analogique, une tension variable entre 0 et + vcc pourra être appliqué.

Dans ce cas , impossible d’activer le Pullup ( compréhensible).

Bonne bidouille.

Si la résistance de pull-up peut être ectivée en mode analogique.

J'ai rappellé qu'il y a eu une assez grosse discussion sur le sujet il y a 3 ou 4 ans ici même.
Je faisais partie de ceux qui pensaient que ce n'était pas possible parce que je raisonnais logiquement et que cela me parraissait idiot en mode analogique mais les arguments présentés m'ont convaincu que c'était parfaitement possible, même si l'utilitilité est discutable.
AMHA ce n'est pas une fonctionalité voulue, c'est la conséquence du choix de l'architecture des entrées/sorties.

@Krayon
Ce n'est pas parce que la rèsistance de PU est activé que l'accès est en mode sortie.
Une résistance n'est pas un générateur de tension. Dans le cas d'une PU si un courant est délivré il ne provient pas de l'E/S mais de l'alim Vcc. Exactement comme si tu câblais la résistance à l'extérieur du micro sur la breadboard.

La résistance de PU a été implantée dans le micro pour servir à fixer un potentiel pour qu'une entrée ne soit pas "en l'air".
Elle n'a jamais été conçue pour remplacer la résistance en série avec un bouton poussoir même si c'est bien pratique.

La résistance de PU est totalement indépendante du reste de l'E/S.
Une entrée n'est pas obligatoirement à impédance élevée : l'antenne de ton poste de télévision ne fait que 75 ohms et celle de ton téléphone fixe ou de ta box ADSL fait 600 ohms pour ne citer que ces deux cas hyper répandus.

68tjs:
Si la résistance de pull-up peut être ectivée en mode analogique.

@Krayon
Ce n'est pas parce que la rèsistance de PU est activé que l'accès est en mode sortie.
Une résistance n'est pas un générateur de tension. Dans le cas d'une PU si un courant est délivré il ne provient pas de l'E/S mais de l'alim Vcc. Exactement comme si tu câblais la résistance à l'extérieur du micro sur la breadboard.

Merci pour ce complément, c'est clair maintenant.

@Leptro Merci pour ces précisions.