Afstemmer din software dette input, eller bruger du en afbrydelsesplan til at behandle det?
Hvis du afstemmer, læser du formodentlig input meget hurtigere end de forventede ændringer i signal. Hvis støjen er godt adskilt, meget højfrekvente pigge, vil disse derefter se ud som isolerede prøver af den 'forkerte' polaritet. Du kan afhjælpe dette ved at gemme de seneste N-prøver og beslutte at læse input som den polaritet, der er størst. F.eks. Hvis N = 5, så hvis du har 3, 4 eller 5 '1' bits, er din input en '1'; hvis du har 0, 1 eller 2 '1' bits, er din input en '0'. Dette er egentlig bare en slags lavpasfilter i software.
Hvis du bruger input til at udløse afbrydelser ved ændring (begge kanter), kan du få afbrydelsesrutinen (ISR) til at starte en timer til forårsage et andet afbrydelse kort tid senere, men længere end støjspidsetiden. I stedet for at indgangsstiften ISR direkte akkumulerer signalbits, har du timeren ISR til at gøre det. For eksempel, hvis signalet er lavt, og der kommer en høj spids, starter den stigende kant timeren, men inden timertællingen udløber, nulstiller den faldende kant af spidsen den, så når timerafbrydelsen endelig går ud, ser på signalet, ikke støj. Signalet vil på den anden side starte timeren kun én gang, og timeren ISR vil være i stand til at få fat i det nye signalniveau.
Af disse to, Pollet vs Interrupt, personligt ville jeg gå for den pollede tilgang er b / c (1) interrupts bare mere komplicerede, og (2) et patologisk placeret par pigge kan stadig give dig falsk input.