Hi Vlad, > How about Bresenham's Algorithm to alternate imperfect periods to > produce an average that matches any "perfect" period.
Using dual periods is essentially what Martyn is doing. But I suspect it was serial rather than alternating (or maybe, interleaving is a better word), which caused his frequency readings to be unexpectedly anomalous. > Refer to Bob Ammerman work to use Bresenham-type system for PIC MCU. He > was using the counter works in the background, either by polling or > Interrupt-Driven. So, the "SuperCycle" continues to run. The timer count > the value is stored in a 3-byte register that is decremented by the software. The examples that Bob and Roman present are useful for timers, interrupts and time counting (e.g., 1 Hz or 50/60 Hz). But IIRC, it did not lend itself to generating relatively high frequency, low jitter outputs like 32 kHz, especially if you're using an 8-pin PIC and your budget is a 38 instruction loop. I would be interested, though, if you were able to use their approach to solve this particular 32 kHz problem. Meanwhile the leap cycle solution works really well: 10 MHz in, 32768 Hz out. Simple. Give it a try: http://leapsecond.com/pic/src/pd30.asm http://leapsecond.com/pic/src/pd30.hex To find (free, open) copies of Bresenham's original papers google for: Bresenham 1963 "Algorithm for computer control of a digital plotter" Bresenham 1977 "A Linear Algorithm for Incremental Digital Display of Circular Arcs" And then, please also read this informative 2004 paper by Mitchell Harris: "Line Drawing, Leap Years, and Euclid" http://www.cs.tau.ac.il/~nachum/calendar-book/papers/bresenham.pdf If you have further questions, let me know. /tvb _______________________________________________ time-nuts mailing list -- [email protected] To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts and follow the instructions there.
