entrés digitales

au contraire d'une entrée analogique on se servira d'une entrée digitale pour lire une valeur qui ne devra posséder que 2 états.
Sur une carte arduino le microcontroleur est alimenté en 5v. du coup un état haut (1) aura une tension de 5v, un état bas(0) une tension de 0v.
Si le microcontroleur est alimenté en 3,3v l'état haut aura une tension de 3,3V.
toutes les entrées de l'arduino peuvent être utilisées en tant qu'entrée digitale.

attention: une broche configurée en entrée qui se trouve en l'air (connectée à rien) n'est pas forcément à 0v. comme les entrées d'un microcontroleur sont très sensibles, l'entrée agit comme un petite antenne et peut détecter un courant infime dans l'air et l'interpréter comme un état haut (5v). Pour éviter ce problème (l'exemple classique serait un bouton poussoir ou un interrupteur). Il faut que l'entrée soit reliée à une résistance de rappel (interne ou externe).


Dans cet exemple lorsque le bouton poussoir est fermé la broche de l'Arduino reçoit un état haut (5v)
par contre lorsque le bouton poussoir est ouvert l'entrée reçoit un état incertain.

Bouton poussoir avec résistance de rappel (pull-up) externe


une petite explication rapide:
quand le bouton poussoir est ouvert, l'entrée de l'Arduino reçoit un état haut (5v) au travers de la résistance.
quand le bouton poussoir est fermé, l'entrée de l'Arduino reçoit une masse qui est plus “forte” que le 5v. L'entrée reçoit donc un état bas (0v)

un lien vers différentes mise en œuvre d'un bouton poussoir dans un programme: prog: entrées digitales

bouton poussoir avec résistance de rappel (pull-up) interne


La série de microcontroleur AVR d'Atmel (et donc tous les Arduino) ont la possibilité d'activer une résistance de rappel (pull-up) interne sur chaque entrée.
Le principe est exactement le même qu'avec une résistance externe mais ça fait moins de soudure ;-)

Activer cette pull-up interne ne demande qu'une ligne de code (cf partie programmation) !

Personnellement je trouve bien plus rapide d'entrer une ligne de code que de souder une résistance ;-) mais parfois on est quand obligé de passer par une résistance de pull-up externe.

Anti-rebond

Lorsque l'on appui sur un bouton poussoir ou que l'on actionne un interrupteur il y a des parasites pendant une certaine durée. Pour mieux comprendre ce problème il faut se mettre à l’échelle de temps du microcontroleur.
avec une horloge à 16Mhz un cycle d'horloge prend 1/16 de microseconde. une instruction ne prenant que quelques cycles imaginez tout ce qu'il peut se passer en 1ms… voici quelques dessins pour vous aider à imaginer…

revenons à notre bouton poussoir:

sur le joli dessin ci-dessus on peut voir que le doigt va appuyer sur le bouton-poussoir la lamelle située sous le bouton va descendre pour faire contact avec les 2 plots en bas. Mais d'un point de vue mécanique il va y avoir de petits rebonds.

en regardant à l'oscilloscope ça donnerait quelque chose comme ça (l'appui du bp met à la masse):

en gros il y a des parasites pendant ~1ms avant que la tension se stabilise sur 0v.
Pour éviter ça il existe 2 solutions:

  • un anti-rebond logiciel: le microcontroleur va bloquer entrée pendant un certain temps (en général je mets 50ms pour être tranquille) dès qu'il détecte un appui sur le bp. (cf partie prog). À noter qu'il y a des cas dans lesquels on ne peut pas utiliser un anti-rebond logiciel, en particulier lorsque l'on utilise les interruptions avec certaines cartes arduino (ça dépend du microcontroleur qu'elles embarquent) (cf interruptions dans la partie prog)
  • un anti-rebond matériel: c'est ce que l'on va voir ici…

Ce circuit RC (c'est le nom que l'on donne lorsque l'on adjoint un résistance et un condensateur) va jouer le rôle d'une temporisation.
Quand on appui sur le bp le circuit RC se décharge pendant une certaine durée avant que la tension arrive à 0v.
Quand on relâche le bp le circuit RC se recharge pendant une certaine durée avant que la tension revienne à 5v.

Voici une formule (simplifiée) pour aider à calculer le temps de décharge et de recharge.
t(en sec)= Résistance (en Ohm) * Capacité (en farad) * 2
avec les valeurs du shéma ci dessus ça donne
t=10k*10uF*2 soit t=10000*0,00001*2=0,2 sec soit 200ms
*j'utilise ici un calcul simplifié (avec une bonne marge d'erreur) car disons que le but de ce site est plutôt d'avoir la solution pratique et rapide à un problème concret mais vous trouverez la bonne formule avec toutes les explications qui vont bien dans le lien ci-dessous.

Les explications qui m'ont aidé à écrire de cette section sont tirées d'un article très bien fait que vous pouvez visiter pour approfondir le sujet. http://arduino103.blogspot.fr/2011/12/boutons-contacts-et-deparatisage.html sur cette page l'auteur met un trigger inverseur aprés le circuit RC. Personnellement je ne le fait pas et je n'ai jamais eu de soucis. à voir…

choisir un bouton poussoir ou un interrupteur

Tous les boutons-poussoir ne se valent pas, idem pour les inters. Pour preuve les écarts de prix allant de quelques dizaines de centimes à plusieurs dizaines d'euros…
voici donc ici quelques conseils et retours d'expérience pour trouver de bons inters mais pas trop chers.
n'hésitez pas à en rajouter…

des bp pas cher et de qualité

Je trouve qu'il vaut mieux éviter les bp d'entrée de gammes car très vite il y a des dysfonctionnements et on peut vite perdre du temps à chercher un bug dans le code alors que le bp à cessé de fonctionné d'un coup sans avertir son propriétaire.
Voici par exemple un bp d'entrée de gamme qui peut poser des soucis: un bp pas trop fiable
par contre comme bp fiable et très peu cher il y a toute la famille des boutons-poussoirs miniatures. Ils n'acceptent que très peu de courant (ce qui n'est pas vraiment un problème dans l'utilisation des microcontroleurs) mais ils sont assez fiables. On les trouve souvent dans les panneaux de contrôle de pas mal d'appareils (photocopieuse, hifi, vidéo, etc). La gamme des boutons-poussoirs miniatures est très variée, voici par ex unbouton-poussoir Mini Long 6.0 mm
à rajouter ici des interrupteurs fiables à prix corrects…

Entrées multiplexées

en construction


elec/digital_in.txt · Dernière modification: 2016/05/22 09:16 par admin_memo