Go Down

Topic: Anti rebond pour multiplexeur (Read 1 time) previous topic - next topic

68tjs

Quote
Non vous détectez le premier front et ensuite vous ne tenez compte d'aucun autre signal tant qu'un certain temps  ne s'est pas passé
Faux dans le principe  --> prendre un oscillo et faire la manip


J-M-L

imaginons un bouton + pullup = quand j'appuie sur le bouton je connecte la Pin de l'arduino sur GND, l'arduino reçoit le front descendant, puis ça oscille à cause des rebonds mais mon programme peut les ignorer (il est déjà en train de traiter l'appui du bouton et si je reviens tester c'est uniquement à ce moment que je vérifie qu'un temps suffisamment long s'est écoulé)

Dans le cadre d'un condensateur, il faut le temps de décharge une fois le bouton appuyé pour que le front descendant soit visible sur mon arduino, c'est donc forcément plus lent - même si la décharge est rapide.

pourquoi c'est faux?
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

kamill

#17
Mar 04, 2018, 09:18 pm Last Edit: Mar 04, 2018, 09:20 pm by kamill
Bonjour,

D'accord avec J-M-L.
Avec un filtrage soft (bien conçu) la prise en compte du premier front se fait sans retard (autre que le temps de polling mais qui est aussi valable dans le cas d'un filtrage hard).

68tjs

#18
Mar 04, 2018, 09:55 pm Last Edit: Mar 04, 2018, 10:01 pm by 68tjs
Quote
Dans le cadre d'un condensateur, il faut le temps de décharge une fois le bouton appuyé pour que le front descendant soit visible sur mon arduino, c'est donc forcément plus lent - même si la décharge est rapide.

pourquoi c'est faux?
Fixons les conditions :
Rien d'original boutons entre la masse et une entrée du micro, résistance de tirage entre l'entrée du bouton et l'alim.

Au départ le système est au repos, la résistance impose le potentiel de l'alim sur l'entrée du micro et le condensateur est chargé.

Quand on appuis sur le bouton on décharge le condensateur  quasi instantanément soit en étant court-circuité par les contacts du bouton (quelque milliohms) soit au travers d'une résistance de protection disons de 100 ohms si on est très, très, très prudent. Et  100 ohms c'est du paranoïaque.

Comme il est indiqué dans tous les bons livres d'électronique un paramètre essentiel dans la charge/décharge d'un circuit RC est la constante de temps appelée Tau.
Il existe une propriété remarquable : pour t = Tau le signal a atteint 63 % de sa valeur finale.
Pour t = 5 Tau la charge du condensateur atteint 99,3 % de la valeur finale, qui mathématiquement ne peut être atteinte qu'au bout d'un temps infini.

Cas 1 : Avec le court-circuit franc 100nF/ 10 milliohms la constante de temps Tau = 1ns
Cas 2 : Avec 100 nF et 100 ohms la constante de temps Tau =  10µs.

Appliquons à un micro avr dont le seuil de décision 0 ou 1 est situé vers Vcc/2 soit 2,5V, prenons 2,4V comme pire cas.  63% de 5 V font 3.15V.
Attention point délicat : comme on part d'un point de repos de 5V, pour atteindre 0V on superpose un échelon négatif d'amplitude  -5V à la tension statique de +5 V.
Nous sommes dans le domaine de l'électronique impulsionnelle.

Donc pour t = TAU la tension vaut Vcc - 0,63*Vcc  soit V = 1,85 V et l'avr a déjà basculé dès 2,4V.
Prendre le temps égal à la constante de temps est encore un pire cas supplémentaire.

Avec un court-circuit franc (ce qui au passage est fait dans quasiment toutes les cartes manufacturées que l'on peut trouver) on a une réponse en moins de 1 ns.
Avec la solution ceinture + bretelles + caleçon en zinc (100 ohms en série avec le condensateur) on a une réponse en 10µs soit pour une carte UNO une réponse en 160 périodes horloge.
Et bien sur avec une résistance de sécurité plus raisonnable de 10 ohms réponse en 16 périodes horloge.

Dans l'autre sens au moment du rebond quand les contacts s'ouvrent la résistance de charge est sans commune mesure plus élevée (entre 30k et 70k avec les pull-up internes du micro) donc le condensateur ne peut pas atteindre la valeur fatidique du seuil de décision des entrées du micro.

Combien faut-il de cycles horloge avec la solution logicielle ?
Combien prend rien qu'un seul tour de  boucle while ou for ?

Restons cool 0, 16 ou 400 cycles ne changeront rien en comparaison du temps qu'il faut pour appuyer sur un bouton.

J-M-L

#19
Mar 04, 2018, 10:30 pm Last Edit: Mar 04, 2018, 11:23 pm by J-M-L
On est bien d'accord vous venez de démontrer que C'est donc plus long - pas de beaucoup mais plus long  - en tant que Softeux et mathématicien quel que soit le temps de décharge ce sera plus long que sans... dans un ordi qui tournerait en gigahertz on aurait le temps de faire plein de choses...

Cela dit - Dans nos Arduinos et vu qu'il s'agit d'un bouton opéré par un humain ça n'a que peu d'importance et  c'est pour cela que j'écrivais

---
(hum... OK je grossis un peu le trait... allez allez pas de commentaire sur le temps, tout est relatif :)) )
----

C'etait Juste pour entretenir la guerre entre les hardeux et softeux :)

(Et vous avez raison la solution soft grille plein de cycles d'horloges coûteux pour déterminer si c'est un rebond ou pas - mais vous avez déclenché au plus près possible de l'impulsion c'est une grande satisfaction intellectuelle :)) )
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

icare

Bonjour,
L'éternel bataille, cela fait 40 ans que l'on entend la même chose entre les hardeux et softeux. :)
Bientôt on ne saura plus le pourquoi de la bataille. ;)
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

68tjs

Tu as raison.
Néanmoins avant de stopper définitivement je voudrais bien que l'on réfléchisse à cette question :

Si la programmation était la solution merveilleuse pourquoi dans les microcontroleurs les fondeurs utilisent des bloc d'électronique numérique pure comme pour la liaison série, les timers, le SPI, etc...
Bizare non !
Un peu de raison et moins de mauvaise foi.

icare

Re,
Un peu de raison et moins de mauvaise foi.
Personnellement, j'ai l'intime conviction que les softeux n'ont pas raison.
J'arrête de mettre de la graisse sur les bouteilles d'oxygène.
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

J-M-L

Quote
Si la programmation était la solution merveilleuse pourquoi dans les microcontroleurs les fondeurs utilisent des bloc d'électronique numérique pure comme pour la liaison série, les timers, le SPI, etc...
Ils mettent du soft dans le silicium pour pas que les hardeux le voit :)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Artouste

#24
Mar 04, 2018, 11:27 pm Last Edit: Mar 04, 2018, 11:28 pm by Artouste
Re,Personnellement, j'ai l'intime conviction que les softeux n'ont pas raison.
J'arrête de mettre de la graisse sur les bouteilles d'oxygène.
8)
T'a parfaitement raison Icare
surtout lorsqu'il s'agit de remplir  des blocs
Re,Personnellement, j'ai l'intime conviction que les softeux n'ont pas raison.
J'arrête de mettre de la graisse sur les bouteilles d'oxygène.
8)
Principe basique , surtout  si tu fais la plongée sous "NITROX"

_pepe_

#25
Mar 05, 2018, 02:47 am Last Edit: Aug 19, 2018, 03:14 am by _pepe_
Supprimé

Go Up