En tant qu'ingénieur logiciel embarqué de longue date, je dois dire que votre hypothèse selon laquelle le debouncing va réduire la puissance de traitement de mon application est tout simplement incorrecte. Cela ne sera jamais vrai pour un micrologiciel écrit avec compétence.
Naturellement, le debouncing nécessitera un certain traitement. Cependant, le traitement est trivial, et pour les entrées de l'utilisateur se produira à un taux de mise à jour si faible qu'il sera totalement négligeable. Si vous deviez anti-rebondir les entrées avec des taux de mise à jour en dizaines de kHz, peut-être que le traitement pour le anti-rebond serait important, mais une pression humaine sur les boutons n'a pas besoin de quelque chose comme ce type de résolution. Dans votre cas, l'échantillonnage à 100 Hz serait facilement assez rapide, et vous pourriez presque certainement l'abaisser jusqu'à 10 Hz sans affecter sérieusement votre interaction utilisateur.
Si vous essayez de faire un traitement d'entrée dans une boucle de contrôle principale fonctionnant à des dizaines de kHz, bien sûr, la puissance de traitement sera nulle. La solution correcte est d'écrire un firmware qui ne le fait pas de cette façon, de ne pas utiliser une solution matérielle pour corriger un anti-pattern logiciel. Une utilisation appropriée des minuteries et des priorités d'interruption vous donnera ce dont vous avez besoin.
Vous pouvez optimiser le traitement en vous assurant que la relecture se fait sur un seul port d'E / S. En supposant que vous définissez des niveaux sur les colonnes et que vous relisez les lignes, alors vous bit-AND, bit-shift et bit-OR pour construire une valeur 16 bits pour les 16 broches. XOR avec la valeur de 16 bits précédente, et si ce n'est pas zéro, quelque chose a changé. Un algorithme anti-rebond simple consiste simplement à définir un compteur sur une valeur si les broches changent d'état, à choisir un état si les broches ont conservé leur état et que le compteur est à zéro, et à décrémenter si ce n'est pas zéro.
Vous devez vérifier qu'un seul bouton est enfoncé, bien sûr. Si vous avez un processeur ARM, l'ARM dispose d'une instruction pour signaler le nombre de bits définis, ce qui est idéal pour cela. Il suffit de mentionner pour une optimisation supplémentaire.