{{tag>dev port arduino}}
====== Configuration des entrées-sorties numériques ======
Les broches digitales du port parallèle de l'Arduino peuvent être indépendamment configurées comme des entrées ou des sorties. C'est la fonction **pinMode()** qui va permettre de configurer chaque ligne du port.
La majorité des microcontrôleurs Atmega permettent de configurer de la même manière leurs broches analogiques.
===== Les constantes =====
Pour la configuration des entrées sorties deux constantes sont définies **INPUT** et **OUTPUT**. L'une d'entre elles sera fournie en paramètre effectif à la fonction **pinMode()** après le numéro du port. Les constantes **HIGH** et **LOW** seront également utilisées pour la configuration des ports.
===== Configuration en sortie =====
Lorsqu'une ligne du port parallèle est configurée en sortie, le fait de lui attribuer une valeur HIGH lui fait générer une tension proche de la tension d'alimentation du microcontrôleur (5V) sauf si la charge consomme davantage de 40mA.
void setup()
{
pinMode(broche2, OUTPUT);
digitalWrite(broche2, HIGH);
}
Si le port est configuré en sortie et qu'il est placé a l’état LOW, il génère une tension proche de la masse. Comme pour l’état HIGH, il ne faut pas que la ligne soit surchargée, c-a-d contrainte d'absorber plus de 40mA.Les broches configurées en sortie sont dans un état dit de basse impédance. Cela veut dire qu'elles sont en mesure de fournir un courant conséquent à d'autres circuits. Les broches de l'Atmega peuvent fournir ou absorber un courant de 40mA en provenance du circuit ou du composant connecté. C'est suffisant pour faire briller une LED ou faire fonctionner des capteurs mais c'est insuffisant pour actionner des relais, des solénoïdes ou des moteurs.
Des courts circuits entre les broches de l'Arduino ou tenter de faire circuler des courants élevés peuvent détruire le transistor de sortie de la broche ou détruire le microcontrôleur. C'est pourquoi il est recommandé d'insérer des résistances (470 Ohm ou 1 KOhm) entre la broche et le circuit/composant afin de limiter le courant a moins que le courant maximum soit requis pour une utilisation particulière.
===== Configuration en entrée =====
**Par défaut** les lignes du port parallèle de l'Atmega sont déclarées en **entrées**. Il n'est donc pas nécessaire d'explicitement les déclarer en entrées via l'appel de la fonction **pinMode()**. Sur un broche en entrée le microcontrôleur lira un niveau logique LOW pour toute tension inférieure à 2V et un niveau HIGH pour toute tension supérieure à 3V (la bande entre 2V et 3V étant indéterminée en TTL, le circuit ne doit pas présenter de tension dans cette zone).
Les broches en entrées sont dites en état d'**haute impédance**. Une façon d'expliquer ça est de dire que dans cet état, les broches ne consomme qu'une très faible partie du courant de la charge qu'elles échantillonnent. La haute impédance équivaut à une résistance de 100 Méga ohm devant la broche. En haute impédance, un très faible arrivée de courant peut faire basculer l’état de la broche. Cela peut être intéressant pour mettre ne œuvre un senseur capacitif ou lire une photodiode.
Cela veut dire toutefois que des broches configurées en entrées et n'étant reliées à aucun circuit changeront d'état de façon apparemment aléatoire en fonction du bruit électrique de l'environnement ou en se comportant comme des condensateurs avec les broches les plus proches. Pour éviter cela il est possible d'activer la résistance interne de rappel au plus.
===== Résistance de rappel =====
Il est souvent utile de forcer une broche en entrée dans un état connu lorsque aucune entrée ne se produit. On ajoute alors une résistance de rappel au plus dite de **pullup** ou de rappel au moins **pulldown**. Une résistance de valeur de 10Kohm est habituellement utilisée.
Il est également possible d'activer les résistances de pullup (de 20 Kohm) intégrées à l'Atmega par configuration:
pinMode(pin, INPUT); // définit la broche numéro pin en entrée
digitalWrite(pin, HIGH); // active la résistance de pullup
==== Remarques ====
Lorsque elle est activée, la résistance de pullup peut fournir un faible courant à une LED connectée sur une broche configurée en entrée. Si dans un projet, une LED semble fonctionner mais très faiblement, c'est que le programmeur a oublié de configurer la broche en sortie via l'appel a la fonction **pinMode()**.
Les résistances de pullup sont contrôlées par le même registre que celui qui détermine si les broches sont à l’état HAUT ou BAS. Par conséquent une broche configurée pour avoir la résistance de pullup lorsqu'elle est en entrée sera configurée a l'état HAUT si elle est basculée en sortie via la fonction **pinMode()**. Inversement une broche configurée en sortie et sur laquelle un état HAUT est écrit se retrouvera en entrée avec la résistance de pullup active si **pinMode()** est appelée et que la broche et reconfigurée en entrée.
La broche 13 est souvent plus difficile à utiliser directement en entrée. Cela est du au fait que sur la majorité des cartes Arduino une LED et une résistance ont été ajoutés directement derrière la broche 13. Si la résistance de pullup est activée sur cette broche, la tension plafonne à 1,7V au lieu de 5V attendus. La LED et la résistance ont pour effet d'abaisser la tension à l'entrée de la broche 13, elle retourne systématiquement un état BAS. Pour utiliser la broche 13 en tant qu'entrée il faudra ajouter une résistance de pulldown.
===== Références =====
* http://arduino.cc/en/Tutorial/DigitalPins