[sdiy] DsPIC timer issue when used as DCO!
Dave Manley
dlmanley at sonic.net
Fri Dec 11 17:02:32 CET 2009
My final comments on this Friday morning!
1. the dac value is updated, increasing the current drive, causing the
cap to charge and saturate
2. the waveshaper sweeps to the value caused by the max voltage on the
cap - up and then back down
3. the timer has period was N, was changed to M<N, when the TMR reg
value was greater than M, causing the rollover - no ISR involved per my
earlier speculation
4. finally the timer wraps and resets the cap and it starts working
correctly
The way to fix it: write the TMR register to a value just less than N,
NOP if needed to wait for TMR to hit the max value of N and resets the
cap. Now write the new value M. This will cause the output waveform to
change from f1 to f2 almost instantly.
5. I'm guessing they are using the output compare logic to generate the
reset pulse. There's no reason not to, and it removes the need for the
ISR. The output compare registers don't need to be changed when
updating the period register. Set the output compare to generate the
reset pulse during the early counts of the timer. As long as the output
compare toggles well before the minimum period value required for the
highest supported frequency (which it must) then everything works.
I like Colin's idea for replacing the whole thing!
-Dave
More information about the Synth-diy
mailing list