|>By the way I did run across a programmable sine wave generator chip |>good from DC to 500 kHz from MicroLinear -- I suppose this could be |>squared up and used as a clock. |Why don't you try a programmable divider (from 20MHz)? It probably gives |you enough resolution. [nb: Does anyone know a good way to make MS Exchange format replies properly without having to hand-insert all the "|" or ">" characters?] A "conventional" clock divider running from 20MHz won't have much resolution around 500KHz. Your steps would be: 487,805Hz 500,000Hz 512,821Hz etc. [i.e. about 12KHz resolution]. You may get much finer resolution if you don't mind a little bit of "jitter" in the output. You may get any frequency you want, to arbitrary accuracy, with 1/2 clock-period of jitter by building a suit- able-length accumulator (i.e. adders and latches). If you build, say, a 16-bit accumulator and put 2193 on the input, then the MSB of the output will toggle at a speed (2193/65536) times the cycle rate. Alternatively, if you don't mind having a bit more jitter, you may use a simpler technique as found in a 4089 [a cute but not terribly useful part which has been discontinued; if you can find the data sheet for it somewhere, though, you'll see what I'm talking about]. A 22v10 fed with a 20MHz clock should be able to produce any frequency from 39,139Hz to 10,000,000Hz within 0.4% [if you were to use this route, you'd need 11 out- puts from the PIC to set the desired output speed but the PIC itself wouldn't have to do anything]. If more accuracy is need- ed, you could change the circuit a little bit and have the PIC "fine-tune" the output (the circuit itself works as a divide-down counter that selectively "drops" counts; the PIC could "drop" a few more if needed). This technique, by the way, works best when the output frequency is much below the input frequency, or when it will be divided down so jitter doesn't matter too much (the device works by producing a frequency between 1/2 and 1/4 of the input frequency and then dividing that by a power of two; the more stages you divide it the less jitter will remain). If you use it for audio, you need to divide it by at least 100 in order to eliminate the jitter comp- onents. For your applications, though, it sounds as though that shouldn't be too much of a problem.