Pull_down ou Pull_Up sur Arduino

On ne présente plus l’Arduino construit autour d’un microcontrôleur Atmel AVR (ATmega328 ou ATmega2560 pour les versions récentes, ATmega168 ou ATmega8 pour les plus anciennes)
Des fois nous avons besoin d’une résistance de tirage sur les entrées de nos cartes. Que ca soit des Pull_down ou Pull_Up il est intéressant de se poser la question de la configuration interne de l’Atmega d’Atmel…

arduino Pull_down ou Pull_Up

Car si on y prête pas garde, ca ne risque pas de fonctionner. J’avais pas mal galérer sur ce point sur les cartes Mbed, autant noter la config dans un coin pour arduino. Ca peut servir.

Schéma interne de la doc qui fait référence à la Pull_down ou Pull_Up.

http://www.atmel.com/Images/doc2545.pdf page 72

On trouve ce schéma :

arduino Pull_down ou Pull_Up

Ce schéma est valable pour chacune des broches.
On peut lire, qu’elles peuvent être soit en entrée soit en sortie.

Au dessus, de l’entrée Pxn, on voit une résistance qui peut être connecté au niveau haut par l’intermédiaire d’un transistor. La commande de ce transistor dépend directement de 3 infos (PUD, WDx, WRx).

Afin de simplifier la compréhension du rôle de ces 3 variables, considérons que pour activer le transistor et donc l’utilisation de la résistance interne, il faut respectivement sur PUD, WDx, WRx, les valeurs : 0,0,1

ET dans la doc on peut lire : In addition, the Pull-up Disable – PUD bit in MCUCR disables the pull-up function for all pins in all ports when set.

Donc pour bien faire les choses…

Il ne faudrait pas se contenter de ce qu’on trouve régulièrement pour utiliser ou désactiver la résistance de tirage.

Pour voici ce qu’on trouve régulièrement :

> pinmode (x,input)      // ce qui revient à mettre WDx à 0
> digitalWrite(x, high)   // ce qui revient à mettre WRx à 1

ou en une seule ligne :

> pinMode(x, input_pullup) // mise en entrée avec pull-up interne activée (WDx à 0    et    WRx à 1)

Mais QUID du niveau interne de l’entrée PUD ??
Le programme ou classe que vous utilisez a très bien pu le modifier…

C’est à dire que la plupart des programmes que l’on trouve considère cette valeur à 0, car par défaut à 0…

En fait il faudrait mieux intégrer la mise à 0 de façon volontaire pour être sur de sa valeur et donc de l’état.

> MCUCR = 0b00000000

ou par masquage : >MCUCR = MCUCR & 0b11101111

Voila, si ca peut servir….

Où acheter une carte Arduino : http://fr.farnell.com/arduino
Toute la gamme Atmel : http://fr.farnell.com/atmel

 

 

Add a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

AlphaOmega Captcha Classica  –  Enter Security Code