Nous avons 50 invités et un membre en ligne

Le phénomène de rebond causé par l’utilisation d’un interrupteur (bouton poussoir) dans un circuit électronique est inévitable. Ce phénomène, qui peut engendrer de mauvaises réponses du microcontrôleur, doit être impérativement éliminé. Il existe plusieurs techniques pour gérer les rebonds qu’elles soient matérielles ou logicielles.

Une des techniques matérielle consiste à mettre tout simplement un petit condensateur de 100 nF en parallèle avec l'interrupteur. Ce condensateur va se charger lorsque le bouton poussoir est au repos et va se décharger lorsque l’on appuie sur le bouton. Le condensateur permet d'absorber les crêtes "peak" indésirables causées par le bouton. Sans condensateur, lorsque l’on appuie sur le bouton, le niveau passe du 1 au 0, mais, peu après, par un phénomène comparable à celui du mouvement d’un ressort, le circuit va connaître une succession d’impulsions néfastes (passages rapides du 0 au 1). Si l’on ajoute un condensateur, celui-ci va se décharger lorsqu'on appuie sur le bouton, et il va absorber les impulsions néfastes qui ne seront plus visibles par le microcontrôleur.

La technique matérielle avec condensateur n'est pas parfaite, mais elle aide beaucoup à l'amélioration du signal. Par contre, en ajoutant une bascule de Schmitt « schmitt trigger » en plus du condensateur, on rend le signal parfait pour une utilisation par un microcontrôleur. La bascule de Schmitt est un dispositif électronique permettant de changer l'état d'un signal à condition qu’il respecte le passage par deux seuils fixes déterminés par l’utilisateur. La bascule reste insensible au signal lorsque celui-ci varie entre les deux seuils.

Une autre technique pour régler le problème des rebonds consiste à le traiter de manière logicielle en introduisant un petit délai entre le moment où l’on appuie sur le bouton et le moment où le circuit prend en considération l’information transmise par le bouton. Ce délai d'environ 5 à 10 ms au maximum va permettre d'attendre que les impulsions néfastes soient passées avant que ne soit réalisée une nouvelle lecture de l'état de l’interrupteur.

A titre d’exemple, voici comment programmer la lecture d'un bouton poussoir par la méthode de détection de front (interrupteur muni d’une résistance de pull-up) :

Interrupteur = RA0;
if(Interrupteur != AncienEtat)
{
   Delai_ms(5);
   AncienEtat = Interrupteur; if(Interrupteur == 0)
   {
      LED = 1;
   }
}