Photo de 'Les résistances de tirage (Pull-up et Pull-down)'

Les résistances de tirage (Pull-up et Pull-down)

Par Victor SUEUR le 02/05/2019

Câbler un interrupteur ou un bouton poussoir directement sur l'entrée d'un microcontrôleur sans un programme adapté pourrait vous poser problème. En effet, lorsque l'interrupteur/bouton sera en position ouvert serait, en quelque sorte, comme relier une antenne. Or, une antenne accumule des charge électrostatiques, qui vont créer une tension variable à l'entrée du microcontrôleur, qui ont toutes les chances de se retrouver dans la zone d'état logique non définie, ce qui peut entraîner des bugs (voir fin de l'article).

Niveau logique TTL

Pour éviter ça, la solution est simple. Il suffit de mettre des résistances avec des valeurs élevés, afin d'éviter les cours circuit, et d'imposer une tension, qui correspondra soit à la tension d'alimentation (on parlera dans ce cas de montage pull-up), ou le 0V (Dans ce cas, il s’agira d'une résistance de pull-down)(cf image de couverture). Ces deux cas ne peuvent pas être traités de la même manière dans le code, car l'entrée sera active à l'état haut avec un montage pull-down, et à l'état bas avec un montage pull-up. Donc, avec arduino, pour détecter quand le bouton sera appuyé, on aura:

Cas: pull-up

void setup(){
    pinMode(pin, INPUT);
}
void loop(){
    if(digitalRead(pin)==LOW){
        //actions 
    }
}

Cas: pull-down

void setup(){
    pinMode(pin, INPUT);
}
void loop(){
    if(digitalRead(pin)==HIGH){
        //actions 
    }
}

Cependant, ce montage nécessite une résistance par entrée. Mais les concepteurs des microcontrôleurs ont eu une idée: ils ont intégrés ces résistances dans le MCU. Pour les arduino, ce sont des résistances de pull-up qui sont intégrées. Cependant, comment on les actives? C'est très simple!

void setup(){
    pinMode(pin, INPUT_PULLUP); //Activation des résistances de pull-up intégrées
}
void loop(){
    if(digitalRead(pin)==LOW){
        //actions 
    }
}

donc maintenat, votre shéma sera le suivant:
Shéma de cablage d'un bouton poussoir

Et voilà, maintenat vous savez tout de résistances de tirage.

Détail des niveaux logiques:

Niveau logique TTL

    • VCC est la tension d'entrée/sortie à l'état haut maximum,

    • VOh est la tension de sortie à l'état haut minimum,

    • VIh est la tension d'entrée à l'état haut minimum,

    • VIl est la tension d'entrée à l'état bas maximum,

    • VOl est la tension de sortie à l'état bas maximum,

    • GND est la tension d'entrée/sortie minimum.

Concrètement:

En sortie: un etat haut sera compris entre VOh et VCC, soit entre 2.7V et 5V en TTL, un état bas sera compris entre GND et VOL, soit entre 0V et 0.4V en TTL et une entrée devra être comprise entre VIh et VCC pour un etat logique haut, soit entre 2V et 5V en TTL et GND et VIl pour un etat logique bas, soit entre 0V et 0.8V en TTL. On constate qu'entre 0.8V et 2V, ça n'est pas un état logique. Le microcontrôleur considèrera alors un état logique aléatoire.

Le TTL (Transistor to Transistor logic) est une norme très utilisée pour les microcontrôleurs, mais il en existe d'autres tel que le CMOS, le LVTTL, etc...

Rédaction: V.S.


Commentaires

Les commmentaires ne sont pas actifs