Fragt Ihre Software diese Eingabe ab oder verwenden Sie ein Interrupt-Schema, um sie zu verarbeiten?
Wenn Sie abfragen, lesen Sie den Eingang vermutlich mit einer viel höheren Rate als die erwarteten Signaländerungen. Wenn das Rauschen gut getrennt ist, sehr hochfrequente Spitzen, würden diese wie isolierte Abtastwerte mit der "falschen" Polarität aussehen. Sie können dies abschwächen, indem Sie die neuesten N Abtastwerte beibehalten und den Eingang so lesen, wie die Polarität in der Mehrzahl ist. Dh wenn N = 5 ist, dann ist Ihre Eingabe eine '1', wenn Sie 3, 4 oder 5 '1' Bits haben; Wenn Sie 0, 1 oder 2 '1' Bits haben, ist Ihre Eingabe eine '0'. Dies ist wirklich nur eine Art Tiefpassfilter in der Software.
Wenn Sie den Eingang verwenden, um Interrupts bei Änderung (beide Flanken) auszulösen, kann die Interruptroutine (ISR) einen Timer starten, um kurze Zeit später einen zweiten Interrupt zu verursachen, der jedoch länger als die Rauschspitzenzeit ist. Anstatt dass der Eingangspin ISR Signalbits direkt akkumuliert, muss der Timer ISR dies tun. Wenn beispielsweise das Signal niedrig ist und eine hohe Spitze auftritt, startet die ansteigende Flanke den Timer, aber bevor die Timeranzahl abläuft, setzt die fallende Flanke der Spitze sie zurück. Wenn also der Timer-Interrupt endgültig ausgelöst wird, sind Sie es Ich schaue auf das Signal, nicht auf das Rauschen. Das Signal hingegen startet den Timer nur einmal und der Timer ISR kann den neuen Signalpegel erfassen.
Von diesen beiden, Polled vs Interrupt, würde ich persönlich den Polled-Ansatz wählen, b / c (1) Interrupts sind nur komplizierter, und (2) ein pathologisch platziertes Paar von Spikes könnte Ihnen immer noch falsche Eingaben geben.