Ce problème est vieux de plusieurs décennies mais je ne vois pas de réponse directe sur ce site. Je veux ce qui suit:
Ce circuit permet juste de vérifier l'état du bouton depuis l'intérieur du micro-contrôleur. Rien d'extraordinaire. Mes questions:
- Y a-t-il quelque chose de mieux que cette conception simple?
- La valeur de la résistance de 100 kilo-ohms est-elle adéquate pour nos appareils CMOS d'aujourd'hui, comme dsPIC30FXXXX et pas une application à haute puissance?
Réponses:
Premièrement, de nombreux microcontrôleurs et contrôleurs de signaux numériques auront des résistances de rappel internes. Voici un exemple, un Atmel ATMega164.
Il y aura généralement un registre permettant d'activer et de désactiver les tractions internes. En raison des variations dans le processus de fabrication, ces tractions internes viennent dans une très large gamme et ne sont pas un bon choix si vous avez besoin d'un contrôle très étroit sur la consommation de courant dans les applications à très faible consommation d'énergie. S'il est important de maintenir le nombre de composants bas, c'est un moyen facile de le faire. L'utilisation de tractions internes pour le rebond matériel ne serait pas une bonne idée, car il n'est pas possible de prédire leur valeur exacte.
Que la valeur de 100 soit adéquate dépend. Si c'est juste un interrupteur qui sera périodiquement basculé par un utilisateur, alors 100 serait un bon choix pour minimiser la consommation d'énergie. Pour les choses qui vont changer plus rapidement, comme les encodeurs rotatifs, le processus que je suivrais estk Ω k Ω
Donc, si le courant de dissipation maximum par broche GPIO était de 10 mA et fonctionnait à 5 V: . Garder cette valeur R aussi petite que possible permettra d'avoir les bords les plus nets et les fréquences de commutation les plus élevées.R =Vje=5 V10 m A= 500 Ω
la source
Vous pouvez devenir plus simple que cela.
Utilisez simplement une résistance pull-up / pull-down interne dans votre microcontrôleur.
100k est suffisant, mais les pullups internes pourraient être un peu plus bas dans certains MCU, par exemple dans AVR atmega8 c'est 30-80kOhm pour réinitialiser le pull-up et 20-50kOhm pour toutes les autres broches d'E / S.
la source
Mieux ne peut être répondu sans critères spécifiques à mesurer, que vous n'avez pas fournis. Dans la plupart des cas, la topologie que vous montrez est correcte. Deux variantes peuvent être "meilleures" selon la situation:
De nombreux microcontrôleurs ont des tractions internes sur certaines de leurs broches. Celles-ci sont destinées exactement à ce genre de situation. La résistance est alors interne au micro et vous définissez un peu quelque part pour l'activer. La seule pièce externe requise est le simple bouton-poussoir lui-même.
Une autre variante utile à garder à l'esprit est pour les conceptions de faible puissance où le bouton peut être un interrupteur qui peut être fermé pendant de longues périodes. Dans ce cas, vous souhaitez minimiser le courant moyen à long terme à travers la résistance de rappel. Vous le rendez aussi grand que possible, mais il y a des limites à cela et des inconvénients à le rendre trop grand. Au lieu de cela, vous activez le pullup pendant quelques µs à la fois pour prendre une lecture de bouton. Si vous cochez la touche toutes les 1 ms et que le pullup est activé pendant 10 µs, le courant de pullup moyen est réduit de 100x. Avec une résistance externe, vous utilisez une autre broche pour entraîner le côté supérieur du pullup. Avec un pullup interne, vous activez / désactivez-le dans le firmware selon vos besoins.
J'ai déjà répondu longuement à cette question ici .
la source
Mieux que ce simple design? Oui. Jetez un capuchon dessus et vous avez un simple interrupteur anti-rebond du matériel.
Le condensateur serait un capuchon en céramique de 0,1 uf commun. La résistance serait un 10k. Ce site a tous les détails sur pourquoi. En bref, un circuit anti-rebond empêche le microcontrôleur d'enregistrer de fausses pressions multiples lorsque vous appuyez sur le bouton. La configuration Résistance / Condensateur adoucit le rebond mécanique du bouton afin que ce soit une transition régulière.
la source
EDIT - le commentaire que j'ai fait ci-dessous était destiné à suivre ce qu'Olin avait dit plus tard sur le circuit avec un condensateur censé ajouter un anti-rebond. Je suis désolé que cela semble apparaître au mauvais endroit - peut-être que quelqu'un peut résoudre ce problème parce que je suis évidemment trop aveugle ou stupide pour voir comment j'aurais dû le faire !!
Je suis d'accord avec Olin - cela n'offre pas un bon rebond. J'ajouterais également que court-circuiter le condensateur peut provoquer une forte augmentation de courant qui peut réinitialiser le microprocesseur si la configuration du circuit imprimé n'est pas vraiment bonne. Certains commutateurs ont besoin d'un courant de mouillage pour fonctionner correctement et de manière fiable et 100k peuvent être trop élevés pour certains commutateurs (en particulier les commutateurs à membrane).
la source