Le debouncing pour les curieux
Page 1 sur 1
Les sujets techniques, ça m'intéresse
Le debouncing pour les curieux
Que ce soit en électronique ou dans le monde de l'arcade (ou des consoles, d'ailleurs) qui nous intéresse ici, on nous vend souvent du debouncing (matériel ou logiciel). Je vais vous présenter rapidement la problématique et une solution assez répandue pour y faire face.
Avant de parler de debouncing, commençons par évoquer le problème d'origine: le rebond (on parle français, ici)...
Imaginez un switch (de joystick, ou de bouton): il s'agit de 2 lamelles métalliques qui viennent se mettre en contact ou se séparer en fonction de l'action du joueur.
Le hic, c'est qu'à l'échelle atomique, ces lamettes ne rencontrent pas instantanément. Un courant s'établit, puis se coupe, puis se rétablit... Et tout ça en une fraction (toute petite) de seconde. Et c'est ça, le rebond.
Voilà en gros comment on lit l'état d'un bouton en général:
La lecture se fait sur le point de sortie: c'est le point sur lequel la machine va contrôler l'état du bouton, en lisant un état logique.
L'état logique, vulgairement, c'est 0 si on lit 0V, et 1 si on lit 5V. Vous aurez probablement remarqué, en câblant vos panels, qu'on branche la daisy chain de masse d'un côté du bouton, et la ligne qui part au connecteur JAMMA de l'autre.
Considérez que le point rouge à droite, c'est le connecteur JAMMA.
Voilà, donc quand le bouton est soulevé, la sortie voit une tension de 5V parce qu'elle voit la tension VCC à travers la résistance (vu qu'il ne passe aucun courant, il n'y a pas de chute de tension dans la résistance).
Quand le bouton est enfoncé, la sortie voit une tension de 0V parce qu'elle voit directement la masse qui est tout à gauche. Le VCC et sa résistance ne font pas le poids devant la résistance très faible du fil (d'autant plus qu'il ne passe aucun courant dedans).
La résistance est appelée résistance de pullup, parce qu'elle tire l'état de la sortie vers le haut. Le bouton vient ramener la tension à la masse quand il est pressé. Simple et efficace.
On note du coup que les boutons sont à l'état 1 quand ils sont au repos, et à l'état 0 quand ils sont enfoncés. C'est très souvent dans ce sens que ça marche.
Voilà ce que ça peut donner dans la vraie vie non dessinée...
La résistance est plus bas, on ne la voit pas. Ce qu'on voit, par contre, c'est la sonde d'oscillo branchée sur l'interrupteur.
Amusons-nous un moment à voir ce qui se passe aux bornes de ce bouton...
Quand j'appuie sur le bouton, je vais coller les lames du bouton, et établir un contact fluctuant, qui va tirer tant bien que mal le signal à 0V:
L'échelle est à 5ms par division => ça oscille un sacré bout de temps! La marque en jaune, qui sert de seuil de déclenchement de l'oscilloscope, est réglée sur le seuil de déclenchement (la différence entre un état 0 et un état 1) d'un slot MVS.
Sans dispositif spécifique, on se retrouve donc à appuyer virtuellement 20 fois sur le bouton en une seule pression réelle.
Et quand on relâche, ce n'est pas beaucoup mieux...
Idéal pour jouer à Track&Field (du coup, le PCB est blindé d'anti-rebonds!).
C'est donc ici que l'anti-rebond (ou debouncing) intervient. Le principe est d'ajouter un amortisseur dans la bataille. On va utiliser un condensateur, dans la configuration suivante (si on met 1k au lieu de 10k et 30nF au lieu de 0.1uf, on a précisément le système utilisé sur le MVS):
Il faut voir le condensateur comme un accu méga rapide (et avec une capacité ridicule). Quand on applique une tension dessus (à travers une résistance), il se charge progressivement. Quand on rejoint ses deux pôles (à travers une résistance), il se décharge progressivement. Les temps de charge et de décharge dépendent de la valeur des résistances, et de la capacité du condensateur.
Voilà le circuit anti-rebond ci-dessus, mis en oeuvre sous forme de plaque de test:
Au démarrage, et à chaque fois qu'on relâche le bouton, on a un courant qui arrive du VCC en haut, et qui vient charger le condensateur au travers des deux résistances:
Le condensateur va ainsi amortir les variations de tension en se chargeant simplement plus ou moins vite en fonction des aléas... Voilà un lâcher de bouton:
Quand on appuie sur le bouton, le condensateur va voir la masse tout à gauche, et se vider via la résistance de 220 ohms. Le VCC voudra toujours le charger, mais avec se résistance beaucoup plus grosse, il ne fait pas le poids et le condensateur se vide inexorablement:
Et en vrai, voilà ce que ça donne à la sortie du circuit:
Objectivement, c'est quand même bien plus propre! Ca croise bien moins souvent le seuil de détection (en vrai, ce n'est pas toujours aussi bon, mais pour compenser, j'utilise un bouton Amazon vraiment tout pourri).
Il est également possible de faire du debouncing logiciel, en prenant des mesures avec une période suffisamment longue pour ne pas tomber 2 fois de suite dans la zone de chaos.
J'ai eu l'occasion de travailler sur la réparation du réseau anti-rebond d'un slot MVS, je vous montrerai ça ultérieurement si ça vous intéresse .
Voilà donc la chose:
Avant de parler de debouncing, commençons par évoquer le problème d'origine: le rebond (on parle français, ici)...
Imaginez un switch (de joystick, ou de bouton): il s'agit de 2 lamelles métalliques qui viennent se mettre en contact ou se séparer en fonction de l'action du joueur.
Le hic, c'est qu'à l'échelle atomique, ces lamettes ne rencontrent pas instantanément. Un courant s'établit, puis se coupe, puis se rétablit... Et tout ça en une fraction (toute petite) de seconde. Et c'est ça, le rebond.
Voilà en gros comment on lit l'état d'un bouton en général:
La lecture se fait sur le point de sortie: c'est le point sur lequel la machine va contrôler l'état du bouton, en lisant un état logique.
L'état logique, vulgairement, c'est 0 si on lit 0V, et 1 si on lit 5V. Vous aurez probablement remarqué, en câblant vos panels, qu'on branche la daisy chain de masse d'un côté du bouton, et la ligne qui part au connecteur JAMMA de l'autre.
Considérez que le point rouge à droite, c'est le connecteur JAMMA.
Voilà, donc quand le bouton est soulevé, la sortie voit une tension de 5V parce qu'elle voit la tension VCC à travers la résistance (vu qu'il ne passe aucun courant, il n'y a pas de chute de tension dans la résistance).
Quand le bouton est enfoncé, la sortie voit une tension de 0V parce qu'elle voit directement la masse qui est tout à gauche. Le VCC et sa résistance ne font pas le poids devant la résistance très faible du fil (d'autant plus qu'il ne passe aucun courant dedans).
La résistance est appelée résistance de pullup, parce qu'elle tire l'état de la sortie vers le haut. Le bouton vient ramener la tension à la masse quand il est pressé. Simple et efficace.
On note du coup que les boutons sont à l'état 1 quand ils sont au repos, et à l'état 0 quand ils sont enfoncés. C'est très souvent dans ce sens que ça marche.
Voilà ce que ça peut donner dans la vraie vie non dessinée...
La résistance est plus bas, on ne la voit pas. Ce qu'on voit, par contre, c'est la sonde d'oscillo branchée sur l'interrupteur.
Amusons-nous un moment à voir ce qui se passe aux bornes de ce bouton...
Quand j'appuie sur le bouton, je vais coller les lames du bouton, et établir un contact fluctuant, qui va tirer tant bien que mal le signal à 0V:
L'échelle est à 5ms par division => ça oscille un sacré bout de temps! La marque en jaune, qui sert de seuil de déclenchement de l'oscilloscope, est réglée sur le seuil de déclenchement (la différence entre un état 0 et un état 1) d'un slot MVS.
Sans dispositif spécifique, on se retrouve donc à appuyer virtuellement 20 fois sur le bouton en une seule pression réelle.
Et quand on relâche, ce n'est pas beaucoup mieux...
Idéal pour jouer à Track&Field (du coup, le PCB est blindé d'anti-rebonds!).
C'est donc ici que l'anti-rebond (ou debouncing) intervient. Le principe est d'ajouter un amortisseur dans la bataille. On va utiliser un condensateur, dans la configuration suivante (si on met 1k au lieu de 10k et 30nF au lieu de 0.1uf, on a précisément le système utilisé sur le MVS):
Il faut voir le condensateur comme un accu méga rapide (et avec une capacité ridicule). Quand on applique une tension dessus (à travers une résistance), il se charge progressivement. Quand on rejoint ses deux pôles (à travers une résistance), il se décharge progressivement. Les temps de charge et de décharge dépendent de la valeur des résistances, et de la capacité du condensateur.
Voilà le circuit anti-rebond ci-dessus, mis en oeuvre sous forme de plaque de test:
Au démarrage, et à chaque fois qu'on relâche le bouton, on a un courant qui arrive du VCC en haut, et qui vient charger le condensateur au travers des deux résistances:
Le condensateur va ainsi amortir les variations de tension en se chargeant simplement plus ou moins vite en fonction des aléas... Voilà un lâcher de bouton:
Quand on appuie sur le bouton, le condensateur va voir la masse tout à gauche, et se vider via la résistance de 220 ohms. Le VCC voudra toujours le charger, mais avec se résistance beaucoup plus grosse, il ne fait pas le poids et le condensateur se vide inexorablement:
Et en vrai, voilà ce que ça donne à la sortie du circuit:
Objectivement, c'est quand même bien plus propre! Ca croise bien moins souvent le seuil de détection (en vrai, ce n'est pas toujours aussi bon, mais pour compenser, j'utilise un bouton Amazon vraiment tout pourri).
Il est également possible de faire du debouncing logiciel, en prenant des mesures avec une période suffisamment longue pour ne pas tomber 2 fois de suite dans la zone de chaos.
J'ai eu l'occasion de travailler sur la réparation du réseau anti-rebond d'un slot MVS, je vous montrerai ça ultérieurement si ça vous intéresse .
Voilà donc la chose:
Dernière édition par Bouz le Ven 1 Oct 2021 - 23:22, édité 1 fois
Re: Le debouncing pour les curieux
Intéressant ça me remémore un peu mes cours de lycée .
_________________
"Il est indispensable d'avoir une euro dans un setup arcade" :Raditz 2/02/2018.
John Caffe le 25/09/2018:"Je comprends mieux ta remarque. Toi, t'es au moins ingénieur, et probablement inscrit à Mensa "
Re: Le debouncing pour les curieux
En fait le debouncing c'est de l'anti rebond ??
Du coups sur une console, ce debouncing s'effectue au niveau de la manette ? du jeu ? de la console ??
Du coups sur une console, ce debouncing s'effectue au niveau de la manette ? du jeu ? de la console ??
_________________
Sanjuro a écrit:en Special Guest Star, WRC dans le rôle de theWave
ancien directeur du service de renseignements NGS, il a le bras long comme un anaconda sous stéroïdes, si un gros bonnet doit se coucher, c'est qu'il en a donné l'ordre.
theWave- Pièce unique
- Messages : 10107
Date d'inscription : 25/10/2015
Re: Le debouncing pour les curieux
Oui, c'est la traduction littérale .
Sur les consoles à prise DB9, genre Master System, probablement Megadrive, Atari 2600, XL, ..... c'est comme l'arcade, les boutons arrivent direct sur le PCB.
Pour réduire les coûts, le debouncing est probablement logiciel.
Pour la NES et les modèles suivants, c'est une transmission série entre la manette et la console. Le debouncing est extrêmement probablement logiciel aussi, eu coup.
Pour la NES, c'est un simple registre à décalage de 8 bits qui remonte l'état des boutons en série dans le câble.
Pour les consoles modernes, c'est du deboucing logicuel géré par des puces spécialisées, qui prennent probablement aussi en charge la liaison USB esclave.
Mais ce n'est que mon avis .
Le logiciel, c'est moins cher. L'arcade, c'est cher et efficace. On cherche moins les économies d'échelle.
Sur les consoles à prise DB9, genre Master System, probablement Megadrive, Atari 2600, XL, ..... c'est comme l'arcade, les boutons arrivent direct sur le PCB.
Pour réduire les coûts, le debouncing est probablement logiciel.
Pour la NES et les modèles suivants, c'est une transmission série entre la manette et la console. Le debouncing est extrêmement probablement logiciel aussi, eu coup.
Pour la NES, c'est un simple registre à décalage de 8 bits qui remonte l'état des boutons en série dans le câble.
Pour les consoles modernes, c'est du deboucing logicuel géré par des puces spécialisées, qui prennent probablement aussi en charge la liaison USB esclave.
Mais ce n'est que mon avis .
Le logiciel, c'est moins cher. L'arcade, c'est cher et efficace. On cherche moins les économies d'échelle.
Sujets similaires
» Razoola met en téléchargement libre l'UniBios 4.0 pour AES/ MVS & 3.3 pour NGCD
» Présentation Kreactive
» Copieur pour Neo Geo
» label pour IGS PGM
» Recherche d'un overlay pour NNC
» Présentation Kreactive
» Copieur pour Neo Geo
» label pour IGS PGM
» Recherche d'un overlay pour NNC
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|