¿Su software sondea esta entrada o utiliza un esquema de interrupción para procesarlo?
Si está sondeando, es probable que lea la entrada a una tasa mucho más alta que los cambios esperados en la señal. Si el ruido está bien separado, los picos de frecuencia muy alta, estos se verían como muestras aisladas de la polaridad "incorrecta". Podría mitigar esto manteniendo las muestras N más recientes y decidiendo leer la entrada como la polaridad que sea mayoritaria. Es decir, si N = 5, entonces si tiene 3, 4 o 5 bits '1', su entrada es un '1'; si tiene 0, 1 o 2 bits '1', su entrada es un '0'. Esto es realmente solo una especie de filtro de paso bajo en el software.
Si está utilizando la entrada para desencadenar interrupciones en el cambio (ambos bordes), puede hacer que la rutina de interrupción (ISR) inicie un temporizador para provocar una segunda interrupción poco tiempo después, pero más larga que el tiempo de pico de ruido. En lugar de que el pin de entrada ISR acumule directamente los bits de señal, tiene que hacer que el temporizador ISR lo haga. Por ejemplo, si la señal es baja y aparece un pico alto, el flanco ascendente inicia el temporizador, pero antes de que expire el conteo del temporizador, el borde descendente del pico se restablece, por lo que cuando la interrupción del temporizador finalmente se apaga, Estamos mirando la señal, no el ruido. Por otro lado, la señal activará el temporizador solo una vez, y el temporizador ISR podrá capturar el nuevo nivel de señal.
De estos dos, Polled vs Interrupt, personalmente iría por el enfoque de sondeo, b / c (1) las interrupciones son más complicadas, y (2) un par de picos colocados patológicamente aún podría dar una entrada falsa.