@philippe86220 non, tu ne fais pas n'importe quoi, ton raisonnement doit ce faire sur un changement d'état pour avoir le temps d'un changement d'état, soit d'un appuis ou un relâchement.
dans le chronogramme du post #56 on veut déclencher l'action sur le quatrième ISR et ignorer les 3 premiers.
J'y regarderais plus tard, ça fait trois jours non stop que je fais de l'arduino jusqu'à tard le soir.
J'ai emmagasiné trop d'informations pour ma vieille cervelle qui n'est plus capable de faire preuve de clairvoyance. J'ai vraiment écrit n'importe quoi, il faut parfois savoir reconnaître ses erreurs (je parle pour moi uniquement).
Bonne journée.
pas de soucis, de toute façon c'est en se reposant, que le cerveaux, enregistre dans sa mémoire à long termes
Bonjour !
Je suis ravi que mon post attire tant d'experts ( @kamill, @jpbbricole , @al1fch, @J-M-L, @philippe86220, @ProfesseurMephisto, @68tjs, @terwal - et tous le autres que j'ai oubliés ) Je ne sortirai pas de celui-ci avant d'avoir parfaitement compris les interruptions et les rebonds ainsi que leur gestion. Je vous remercie pour vos réponses
Je vais de ce pas relire l'article de locoduino
Bah dit donc vous êtes un passionné !
Cordialement
Pandaroux007
Confus de me retrouver dans cette liste d'experts... c'est totalement immérité, je suis probablement autant débutant que toi en arduino & co !
Pas sur, pas sur... Vous avez déjà commencé avec le Wifi, tandis que moi j'en suis encore a apprendre les interruptions et a choisir ma première carte ESP32... Tien c'est marrent, j'ai une page avec la mise à jour du forum ( barre latérale ), et une autre sans
Tu peux me retirer de la liste, je n'ai jamais raconté autant de bêtises que dans ce fil
Le pauvre @J-M-L et les autres doivent se dire que je suis devenu bête mais il ont quand même eu la gentillesse de me répondre
En fait je n'ai jamais trop travaillé sur les interruptions mais sans elles le microcontrôleur ne peut pas fonctionner d'où leur importance ! Et oui, il faut bien établir des priorités dans les tâches à exécuter, les faire exécuter...
Il y en a des tonnes de choses à connaître, je n'arriverai jamais au bout !!!!!!!!
PS : @ProfesseurMephisto je le lis souvent, tu peux le laisser dans ta liste, il pose des questions mais il a un niveau certain que je n'ai pas
Oui. Mais il est hors de question que je vous sorte de ma liste - admettez le, vous êtes un membre important sur le forum et un génie de l'Arduino. Génie dans le sens ou quand vous dites une bêtise ( se qui arrive bien moins souvent que ce que vous avez l'air de penser ), vous posez des questions, vous vous corrigez, vous rectifiez, pour ensuite faire profit de vos connaissance pour aider les autres, et pour moi ça ça vaut tous les badges bizarres du forum.
Amitiés
Rémi
EDIT : j'ai trouvé ceci :
Origine :
un contact est monté sur une lame que l'on peut assimiler à une lame de ressort.
Donc à la fermeture la partie mobile vient frapper la partie fixe, et va rebondir un certain nombre de fois jusqu'à qu'elle perdre son énergie mécanique.
Si on ne fait rien l'entrée du micro verra une série de 1 et de 0.
Il y a des procédés pour que le micro ne voie qu'une seule information.
- par logiciel
- par matériel
Par logiciel,
je ne vais pas entrer dans les détails (en bon électronicien que je suis je préfère la solution matérielle). On ajoute des lignes de programme qui vérifient que le résultat du bouton s'est stabilisé. Il y a même des bibliothèques toutes faites.
Par matériel :
On ajoute un condensateur en parallèle sur le contact.
Comme rien n'est simple, la résistance de pull-up, déjà présente dans la solution logicielle, perd son statut de pull-up pour gagner celui, plus noble , de résistance de charge indispensable au fonctionnement.
Tant que le bouton n'est pas appuyé, le condensateur va se charger à travers la résistance de charge.
Les valeurs généralement utilisées (dépendent des réalisations mécaniques) sont R >= 10 k (~40 k dans le cas de la résistance interne du micro) et C = 100 nF céramique (valeur passe partout extrêmement répandue donc peu chère et facile à trouver).
Ça, c'est quand le bouton est au repos.
Quand le premier contact se produit le condensateur va se décharger dans un quasi-court-circuit, la décharge est complete et instantanée.
Au premier rebond, le condensateur, qui n'est plus court-circuité, va se recharger au travers de R = 10k/40 k.
Au contact suivant, il va encore être completement déchargé dans un court-circuit.
etc... etc jusqu'à ce que l'énergie mécanique dans le bouton soit nulle.
Décharge immédiate à GND et charge lente vers Vcc : cela veut dire, qu'avec les valeurs R et C indiquées, que la tension sur l'entrée du micro n'atteindra jamais la valeur du seuil qui fait que le micro dit qu'il voit un 1 et donc le micro verra toujours un 0.
Mon choix de la solution logicielle est basé sur deux propriétés :
- Avec le condensateur on a l'information immédiatement au premier contact, puisque électroniquement elle ne peut plus changer.
Tandis qu'avec la solution logicielle le résultat est décalé dans le temps, il faut attendre la fin des rebonds. - Avec le condensateur on évite les perturbation electromagnétique à chaque rebond. C'est surtout important si les fils de liaisons son longs.
Je vais être honnête, la première raison (info immédiate ou décallée de quelques millisecondes, n'est pas vraiment importante, c'est plus une boutade de ma part.
Par contre, pour moi, la deuxièmme est importante.
Ce n'est pas qu'il va y avoir systématiquement des perturbations qui interfèreront avec le fonctionnement du micro, non.
C'est que quand on sait que cela peut se produire on met toutes les chances de son coté et souder un condensateteur n'est quand même pas une opération horrible. On gagne quelques octets en mémoire et une prise de tête car en cas de non fonctionnement c'est bien la dernière cause à laquelle on pensera.
Ce qu'il faut que tu retiennes :
- Les deux solutions fonctionnent.
- Toi, en tant que développeur tu prends tous les avis.
- Tu rejettes les avis qui te disent : c'est absolument comme cela qu'il faut faire. Personne n'a le droit de dire ça puisque les deux solutions sont parfaitement fonctionnelles. Il ne peut y avoir que des préférences.
- Tu choisi librement la solution qui te convient..
Documentation pour aller plus loin : rechercher "charge d'un circuit RC"
Philippe il y a quelque temps (avril 2012) quand je faisais mes premiers pas avec les microcontroleurs, j'avais commis un tuto sur celle de l'ATmega328p.
Tuto, est un bien grand mot, c'était plutôt mes notes personnelles un peu ordonnées.
Tu le trouveras dans Tuto et cours:
Si j'ai bien suivi, @pandaroux007 est lycéen (ou collégien ?) : la charge /décharge d'un circuit RC est vue, en long large et travers en terminale spécialité. Si pour lui ça peut prendre un peu de sens et rendre les équations différentielles un peu sexy, tant mieux
Merci @68tjs,
Je vais imprimer le tuto et le lire.
Bonne journée.
Bonjour @ProfesseurMephisto,
@pandaroux007 va sur ses 13 ans et malgré son jeune âge, je trouve qu’il fait preuve d’une maturité inhabituelle même si parfois et c’est bien normal, on reconnaît l’enfant qu’il est encore . Il est respectueux et fait souvent preuve de discernement
Il mérite la bienveillance des autres membres de ce forum qui d’ailleurs la lui accorde bien volontiers.
Par contre je ne sais pas à quel niveau scolaire il se situe. Peut-être s’il le souhaite, se confira t’il sur ce point qu’il ne me semble pas avoir encore abordé.
Bonne journée.
Entièrement d'accord avec ces remarques et, s'il est besoin de le préciser - les écrits nocturnes traduisant parfois mal les intentions - il a toute ma sympathie. Si je pouvais avoir un peu plus d'élèves comme lui dans mes classes j'en serais ravi. Le niveau scolaire n'est en rien rédhibitoire, et pour reprendre le thème du fil, il pourra comprendre le problème et les solutions liés aux rebonds même sans le bagage mathématique de spécialité de terminale.
reste à nous démontrer l'intérêt d'une interruption sur un signal qui ne bouge pas ...
Bonjour @ProfesseurMephisto,
Pour ma part je n'ai vu aucune mauvaise intention dans vos propos
Bonne journée.
Bonjour !
Pour répondre à la question de mon niveau scolaire : je suis en 5° ( j'attends avec impatience la 4° pour enfin découvrir les racines carrées, ainsi que les puissances ).
Ensuite, d'après ce que j'ai compris dans les liens que l'on retrouve un peu partout dans le topic, dont celui de Locoduino et d'Aranacorp, une interruption consiste a stopper le code pour exécuter une fonction à la détection du changement d'état de la pin 2 ou 3 de l'ATmega328p ( UNO, NANO ). L'avantage des interruptions est que nous n'avons pas a surveiller l'état de ces pins, le programme s'en charge pour nous. Dans le milieu de l'anti-rebonds, on l'utilise pour détecter le changement d'état et au 1er rebonds, sortir de la loop
et éviter ainsi les autres rebonds.
Autre point important que j'ai compris dans ce topic est que les résistances de pull-up et de pull-down ne servent pas d'anti-rebonds, mais d'anti-champs électromagnétique ( contraintes de CEM ) qui perturbent nos montages - les pins de l'Arduino étant très sensibles - et que pour contrer les rebonds en Hardware, on utilise des condensateurs - entre le GND et la data, voir image - d'environ 100 nF ou 10 nF. Merci d'ailleurs @68tjs pour tes explications
Source Eskimon - un simple bouton
Source Arduino
Merci à tous pour vos précisions et vos conseils ! Et excusez moi pour les fautes d'orthographe, je fais de mon mieux !
Cordialement
Rémi
Moi aussi je suis en collège, depuis ... 25 ans et très honnêtement à te lire, tu m'as l'air bien parti pour la physique et la techno ! Bravo à toi.
C'est presque ça : bravo...
Pour pinailler, la résistance sert à polariser ( = imposer un potentiel à ) la broche d'entrée (+5V ou 0V) . Sans elle, le potentiel de la broche est théoriquement indéfini et dans la pratique n'importe quoi.
Indéfini parce que l'on peut considérer qu'elle est non reliée au reste du montage : la résistance interne étant très grande on peut la considérer comme infinie, c'est presque un isolant.
n'importe quoi parce que cette grande résistance la rend sensible à tout son environnement électromagnétique (lié au fonctionnement des appareils électriques et électronique autour, mais aussi l'activité du soleil et le champ magnétique terrestre. Bref un grand n'importe quoi. Tellement n'importe quoi d'ailleurs qu'une broche « en l'air » peut servir pour améliorer le générateur de nombre aléatoire.
Une remarque aussi concernant le collège : en physique, on n'enseigne plus l'électricité en utilisant le concept de potentiel mais uniquement celui de tension. Pourtant le potentiel est encore très utilisé en électronique.
La différence ? Une tension se mesure entre deux points du circuit (entre Vcc et GND de l'arduino par ex.), le potentiel ne concerne qu'un seul point. (le pin 2 dont tu parles par exemple). En fait, il s'agit d'une seule et même notion : le potentiel d'un point X est la tension entre deux points : celui qui nous intéresse et un point de référence que l'on appelle « masse » et qui est souvent le moins du générateur : dire « le pin 2 est à un potentiel de 5V » revient à dire « la tension entre le pin 2 et GND est 5V»
À force de traîner ici, tu risques de prendre des habitudes d'électronicien et ton ou ta prof de physique risque de couiner... dis-lui simplement que que tu fais de l'électronique, il ou elle sera plus tolérant (tout en continuant de couiner). Tu en profiteras pour lui demander si il ou elle peut te prêter ou te laisser utiliser un oscilloscope, il y en a sûrement un qui ne sert plus à rien. Les mesures en électricité c'est pour les classes de 4e et 3e...
Le condensateur seul ne sert à rien, c'est l'ensemble condensateur + résistance qui va agir. Le courant qui traverse la résistance va charger (ou décharger) progressivement le condensateur. C'est parce que c'est progressif que l'on compte dessus pour laisser passer les rebonds.
Résistance nulle : la charge ou décharge est immédiate
Résistance infinie (oups je l'ai oublié) : temps de charge/décharge infini... pas très utile.
Ce qui va compter c'est le produit résistance × capacité
(R × C) qui donne une durée Le condensateur va mettre 3 à 4 fois cette durée à être chargé (presque) complètement. Pour le calcul, R doit être en Ω (pas en kΩ ou MΩ), C en F (pas en µF, nF ou pF) et la durée est alors en secondes... En attendant de maîtriser les puissances de 10 (fin de 4e généralement) tu alignes et recomptes les zéros avant et après la virgule Cela te donnera une idée de la durée pendant laquelle tu es tranquille avec les rebonds.
Pas de souci, c'est largement lisible. On en fait tous plus ou moins, pas forcément les mêmes. Et là aussi pour un collégien tu es plutôt dans le haut du panier.
Merci pour tous ces conseils Malheureusement mon collège est pas super riche du coup il n'y a aucun oscilloscope ( croyez moi, j'ai vérifié
) mais pour noël, c'est commandé ! La vidéo qu'il y a en post #1 m'a bien aider, mais vous venez de mettre l'électron qui fait exploser le condo
En ( bien ) plus clair : J'ai compris ( grâce a vous ). Merci
Amitiés ( je ne dis pas ça a mes profs )
Rémi
P.S : vivent les profs !
ce sont les ingés d'Atmel qui ont créé cette possibilité : c'est à eux qu'il faut poser la question.
personnellement je ne l'ai jamais mise en œuvre, je ne sais donc pas comment elle réagit.
je me contentais de signaler son existence.