Avez-vous un simple anti-rebond routine de pratique de traiter avec un seul interrupteur d'entrée?
C'est un simple métal nu système sans n'importe quel OS.
Je voudrais éviter une construction de boucle avec un nombre spécifique, comme la vitesse du processeur peut fluctuer.
OriginalL'auteur Benoit | 2008-09-30
Je pense que vous pouvez en apprendre beaucoup à ce sujet ici: http://www.ganssle.com/debouncing.pdf
Votre meilleur pari est de toujours le faire dans le matériel si possible, mais il y a quelques pensées sur le logiciel de là aussi bien.
Exemple Simple de code de TFA:
}
Bon, marquez-moi de répondre! 😉
OriginalL'auteur GEOCHET
La plus simple des solutions sont souvent les meilleurs, et j'ai constaté que de simplement seulement la lecture de l'état du commutateur de tous les N millseconds (entre 10 et 50, selon les commutateurs) a toujours travaillé pour moi.
J'ai dépouillé éclaté et complexe anti-rebond routines et les a remplacés par un simple sondage lent, et les résultats ont toujours été assez bon de cette façon.
Pour la mettre en œuvre, vous aurez besoin d'un simple minuteur périodique d'interruption sur votre système (en supposant qu'aucun système d'exploitation temps réel de soutien), mais si vous êtes habitué à de la programmation sur le métal nu, qui ne devrait pas être difficile à organiser.
Noter que cette approche simple ajoute un retard à la détection du changement d'état. Si un commutateur prend T ms pour atteindre un nouvel état d'équilibre, et il est interrogé toutes les X ms, puis le pire des cas de retard de détection de la presse T+X ms. Votre intervalle d'interrogation X doit être plus grand que le pire temps de rebondissement T.
le point est, il est aucun anti-rebond logique: Vous n'en avez pas besoin. Switch 'rebond' est vraiment juste un artefact causé par l'échantillonnage d'un contact mécanique clusure plus vite qu'il a été conçu pour fonctionner. En diminuant le taux d'échantillonnage vers le bas, vous permettre de contourner le problème. (et oui, la vidéo de la fréquence de rafraîchissement est sur place pour la plupart des bons interrupteurs)
Très intéressant, je n'avais pas pensé de cette façon. Après quelques gribouillis, je crois que vous êtes prouvable correct SI le scrutin est entre deux fois la plus longue antirebond de cycle à partir de votre matériel et la moitié de la longueur de la plus courte appuyez sur le bouton que vous allez accepter, aussi longtemps que vous êtes prêt à accepter un délai de (parfois) jusqu'à deux cycles d'interrogation. (Pour une fréquence de rafraîchissement de 60 hz, ce qui implique un rebond du cycle de <9ms par exemple.) Je dois avoir été grincheux, je t'ont marqué vers le bas - et apparemment je ne peut pas le modifier. 🙁 Si vous changez votre réponse légèrement, je peux marquer de nouveau.
Super! Hmm, j'ai un sous-optimale de la définition de "rebondir temps" qui n'est pas aussi bon que le vôtre. Peut-être un meilleur nom pour le concept est "le temps de la stabilité" - combien de temps après un changement d'état est le signal stable? - qui correspond à votre idée.
OriginalL'auteur Roddy
Il n'y a pas de solution simple qui fonctionne pour tous les types de boutons. Peu importe ce que quelqu'un ici indique que vous utilisez, vous aurez à essayer avec votre matériel, et de voir comment cela fonctionne bien. Et regarder les signaux sur une portée, assurez-vous que vous savez vraiment ce qu'il se passe. Riche B lien vers le pdf ressemble à un bon endroit pour commencer.
OriginalL'auteur KeyserSoze
J'ai utilisé un vote à la majorité méthode anti-rebond pour une entrée. J'ai créé un simple trois état du registre à décalage de type de structure de données, et le décalage de chaque échantillon et de tirer le meilleur de deux sur trois " a de la valeur "correct". Ce n'est évidemment fonction de votre gestionnaire d'interruption, ou un poller, selon quelle méthode est utilisée pour lire la matériel.
Mais, le meilleur conseil est de demander à votre amicale du matériel concepteur de "verrou" de la valeur et de vous permettre de passer cette valeur lorsque vous obtenez.
OriginalL'auteur gthuffman
D'anti-rebond, vous voulez ignorer les changer que la durée est inférieure à un certain seuil. Vous pouvez définir une horloge matérielle sur l'interrupteur ou l'utilisation d'un indicateur défini par interruption périodique.
OriginalL'auteur Mark Ransom
Si vous pouvez sortir avec elle, la meilleure solution dans du matériel est d'avoir le commutateur de deux états distincts sans état entre. Qui est, l'utilisation d'un commutateur SPDT, avec chaque pôle de l'alimentation, soit de la R ou S lignes d'un flip/flop. Câblé de cette façon, la sortie de la flip/flop doit être sans rebond.
Si c'est quelque chose qu'une personne est de commutation, vous devez presque toujours à l'anti-rebond, même si il y a du matériel anti-rebond. Les gens les mains qui tremblent, ils utilisent pas assez ou trop de force sur le bouton, ou de la merde s'est penché sur le bouton - ils peuvent mécanique créer rebond de cette façon, votre SPDT ensuite rapporter fidèlement. Matériel anti-rebond est grand, cependant, et si rien d'autre, vous permet de garder votre temps de rebondissement beaucoup plus petit et d'obtenir une plus réactif clavier.
OriginalL'auteur nsayer
L'algorithme de ganssle.com pourrait avoir un bug. J'ai l'impression que la ligne suivante
devrait lire
afin d'anti-rebond correctement la première presse.
OriginalL'auteur sorin
Au niveau du matériel de la base anti-rebond routine doit prendre en compte les segments suivants de physique de la clé (ou switch) comportement:
Clé tranquillement assis->doigt touche touche et commence à pousser vers le bas->key atteigne le fond de voyage et le doigt détient l'y->doigt commence à dévoiler la clé et le ressort pousse la clé de sauvegarde->doigt communiqués de clé et la clé vibre un peu jusqu'à ce qu'il quiesces
Toutes ces étapes sont les 2 morceaux de métal raclant et en se frottant et se cogner les uns contre les autres, branlement de la tension en haut et en bas de 0 au maximum sur des périodes de millisecondes, donc il y a du bruit électrique à chaque étape du chemin:
(1) de Bruit alors que la clé est de ne pas être touché, causée par des problèmes environnementaux comme l'humidité, aux vibrations, aux variations de température, etc. provoquant des variations de tension sur les contacts clés
(2) le Bruit causé tant que la touche est enfoncée
(3) le Bruit que la touche est maintenue enfoncée
(4), que le Bruit de la clé est d'être libéré
(5), que le Bruit de la clé vibre après avoir été libéré
Voici l'algorithme par lequel nous avons essentiellement suppose que la touche est maintenue appuyée par une personne:
lire l'état de la clé, qui peut être "peut-être pressé", "est certainement pressé", "n'est certainement pas pressé", "pourrait ne pas être pressé" (nous ne sommes jamais tout à fait sûr)
boucle tant que la touche "peut-être" pressé (si vous traitez avec le matériel, c'est une tension de l'échantillon est supérieure à la valeur de seuil), jusqu'à ce que s'est "certainement pas" pressé (inférieure à la tension de seuil)
(c'est d'initialisation, en attente pour le bruit de suspendre, de la définition de "peut être" et "certainement pas" dépend de l'application spécifique)
boucle tant que la clé est "certainement pas" enfoncé jusqu'à ce que la touche "peut-être" pressé
lorsque la clé "peut être" pressé, commencer la boucle d'échantillonnage et de l'état de la clé, et de garder trace de combien de temps la clé de la "pourrait être" pressé
- si la clé remonte à "peut-être pas" ou "n'est certainement pas" l'état activé avant un certain laps de temps, reprendre la procédure
- à un certain délai (en millisecondes) que vous avez choisi (généralement par le biais de l'expérimentation avec des valeurs différentes), vous décidez que la valeur de l'échantillon est plus causé par le bruit, mais il est très probablement causé par la clé en fait tenus par un doigt humain et vous retourner la valeur "pressé"
OriginalL'auteur well but I'm
Ce que je fais habituellement est de deux ou trois variables, la largeur de l'entrée de registre. Tous les sondages, généralement à partir d'une interruption, d'intervertir les valeurs de l'un pour faire de la place pour le nouvel échantillon. Ensuite, j'ai un sans rebond variable formée par la définition de la logique et des échantillons, et la compensation de l'inverse de la logique ou. c'est à dire (non testé, à partir de la mémoire)
Voici un exemple:
sans rebond a xxxx (où " x " est "quelque chose")
Avec les informations ci-dessus,
Nous devons passer seulement 2 bits à 1, et les bits 0 à 0. Les autres sont encore "rebondir".
Le résultat est que maintenant, sans rebond = x1x0
OriginalL'auteur Justin Love
utilisation de l'intégration, et vous serez un campeur heureux. Fonctionne bien pour tous les commutateurs.
juste incrémenter un compteur lors de la lecture le plus élevé et le décrément quand lire comme faible et lorsque l'intégrateur atteint une limite (supérieure ou inférieure) appel de l'état (haute ou basse).
OriginalL'auteur Keith