Votre logiciel interroge-t-il cette entrée ou utilisez-vous un schéma d'interruption pour la traiter?
Si vous interrogez, vous lisez probablement l'entrée à un taux beaucoup plus élevé que les changements attendus dans le signal. Si le bruit est bien séparé, des pics de très haute fréquence, ceux-ci ressembleront alors à des échantillons isolés de polarité «incorrecte». Vous pouvez atténuer cela en conservant les N échantillons les plus récents et en décidant de lire l'entrée selon la polarité la plus majoritaire. Par exemple, si N = 5, alors si vous avez 3, 4 ou 5 bits '1', votre entrée est un '1'; si vous avez 0, 1 ou 2 bits «1», votre entrée est un «0». C'est en fait juste une sorte de filtre passe-bas dans le logiciel.
Si vous utilisez l'entrée pour déclencher des interruptions en cas de changement (les deux fronts), vous pouvez demander à la routine d'interruption (ISR) de démarrer une minuterie pour provoquer une seconde interruption peu de temps après, mais plus longue que le temps de pic de bruit. Plutôt que de faire accumuler directement les bits de signal par la broche d'entrée ISR, vous demandez au temporisateur ISR de le faire. Par exemple, si le signal est faible et qu'un pic élevé survient, le front montant démarre la minuterie, mais avant l'expiration du compte de la minuterie, le front descendant de la pointe le réinitialise, donc lorsque l'interruption de la minuterie se déclenche enfin, vous regardez le signal, pas le bruit. Le signal, par contre, déclenchera la minuterie une seule fois, et la minuterie ISR pourra saisir le nouveau niveau de signal.
De ces deux, Interrogé vs Interruption, personnellement, j'irais pour l'approche interrogée, les interruptions b / c (1) sont simplement plus compliquées, et (2) une paire de pointes placées pathologiquement pourrait encore vous donner une fausse entrée.