I have been thinking about this issue for awhile, and I think I have a slick and simple solution to the pot speed issue. This should make a pot input usable for an expression pedal, for example.
All that is needed is to counteract the action of the slow lowpass filter on the pot with a shelving highpass filter in the code. You place the highpass corner frequency such that it cancels the pot lowpass corner frequency, extending the response of the pot. Then the shelving corner frequency rolls it back off at a higher frequency (say 4X higher), thereby preserving most of the noise filtering. Since the shelving filter speeds up but attenuates the control signal, we need to gain it up again. It costs five instructions in all:
Code: Select all
equ potfilt reg0
equ fastpot reg1
rdax pot0, 1
rdfx potfilt, 0.001 ; this is the shelving highpass filter
wrhx potfilt, -0.75 ; it cuts lower freqs by factor of 4
rdax fastpot, 0.75 ; this gives 4X recursive gain
wrax fastpot, 1 ; to recover full range
So now when you would have used a "mulx pot0" instruction, you instead use "mulx fastpot". That is all there is to it.
If you want to make the control faster than 4X better, you just need to adjust the filter and gain coefficients.
I tested the algorithm by injecting a 1Hz square wave into the pot input to simulate instantaneous changes to the control. The normal pot output has a long (100ms) time constant. The fast control output is indeed 4X faster, and is still clean and filtered. I have a scope picture, but I can't directly attach it.
This should be much more usable with a expression pedal, without compromising the noise filtering too much.
Don