So it seems to be the consensus that a MCU solution is the most practical?
Probably. But before you make a decision / create a design / buy a solution you have to specify your requirements in more detail beside min/max frequency. For instance:
- Output voltage
- Minimum frequency step size and accuracy
- Spectral purity of the sine
- Total cost
- ........
With a very simple MCU software based DDS it is easy to generate a sine up to a few 100 Hertz without any additional hardware. You don't even need a DAC or a R2R ladder to generate the analog sine. As requested I have attached schematics and code for a PIC12F1840 CTCSS generator. (Sorry for the somewhat crappy schematics, but I was in a hurry an had to create it from scratch/memory).
This simple solution has some some caveats. For instance
* You need to filter out the DDS PWM signal. This is easy, in this case I need to filter out a 20 KHz signal and pass a < 100 Hz signal. A two pole RC filter (both with a cutoff frequency of 159 Hz does the job easily. After the first LC filter a small DDS ripple can still bee seen, but not after the second RC filter).
* due to computing capacity restrictions in the PIC you need a pre-calculated sine wave table. The table has 255 entries for a full sinewave, and the amplitude values are 8 bits. The PWM as implemented also has an 8 bits resolution.
You have to decide if 256 discrete amplitude steps is good enough. In my 77 Hz example the 156 Hz rolloff filters these amplitude steps out quite good, but with 0,01 Hz output you WILL notice the 256 discrete steps unless you have an adaptable output filter...
You can increase it to max 10 bits with some effort resulting in 1024 discrete amplitude steps. The table will be larger, but this can be compensated by storing only one quarter of the sinewave if memory is a problem. Also you should probably use more than 256 steps for the sine in the time domain...
Then there is the issue of setting the output frequency. The AD of the PIC can be used to read out the output of a potmeter, resulting in a resolution of 10 bits, so 1024 discrete steps. Not a lot for 3 decades of frequency range. (i.e. unusable). So use some other pins as range selectors?
If you need more resolution (in amplitude) just use a DDS like
http://www.dx.com/p/ad9850-dds-signal-generator-module-150060Program it with a PIC.
Or just buy a complete unit. Probably cheaper than building all yourself (including a LCD screen, encoders, etc)
http://www.dx.com/p/udb1000-dds-signal-generator-module-green-152755