Vraagt uw software deze invoer af, of gebruikt u een interruptschema om deze te verwerken?
Als u aan het pollen bent, leest u de invoer waarschijnlijk veel sneller dan de verwachte veranderingen in de signaal. Als de ruis goed gescheiden is, zeer hoge frequentiepieken, zouden deze eruitzien als geïsoleerde samples met de 'verkeerde' polariteit. U kunt dit verzachten door de meest recente N-samples te bewaren en te besluiten de invoer te lezen, afhankelijk van de polariteit die in de meerderheid is. D.w.z., als N = 5, dan is je invoer een '1' als je 3, 4 of 5 '1'-bits hebt; als je 0, 1 of 2 '1'-bits hebt, is je invoer een' 0 '. Dit is eigenlijk gewoon een soort laagdoorlaatfilter in software.
Als je de ingang gebruikt om interrupts te activeren bij verandering (beide kanten), kun je de interruptroutine (ISR) een timer laten starten om korte tijd later een tweede onderbreking veroorzaken, maar langer dan de ruispiektijd. In plaats van dat de ingangspen ISR direct signaalbits verzamelt, laat je de timer ISR het doen. Als het signaal bijvoorbeeld laag is en er komt een hoge piek, start de stijgende flank de timer, maar voordat de timer afloopt, wordt deze door de dalende flank van de spike gereset, dus als de timer-onderbreking eindelijk afgaat, We kijken naar het signaal, niet naar de ruis. Het signaal, aan de andere kant, zal de timer slechts één keer starten, en de timer ISR zal het nieuwe signaalniveau kunnen pakken.
Van deze twee, Polled vs Interrupt, persoonlijk zou ik gaan voor de ondervraagde benadering zijn b / c (1) interrupts gewoon ingewikkelder, en (2) een pathologisch geplaatst paar spikes kan je nog steeds valse invoer geven.