Sometimes it takes a long time for a project to fully come together. David Johnson-Davies’ function generator, for instance, was first spotted last February, just a few days shy of a year ago. This device has a rotary encoder to allow frequency selection between 1Hz and 5kHz, along with wave selection using the button built into the encoder. A small OLED display shows the numerical frequency, as well as an icon for the type of waves.
This unit was nicely breadboarded in that iteration, and features a number of waveforms, like square, sawtooth, and pulse. It even has a “noise function” which outputs signals based on pseudo-random numbers from the ATtiny85 microcontroller that runs the device. Not satisfied with the original design, however, Johnson-Davies added sine wave output to its capabilities that March. While that again could have been the end of the project, the latest revision transfers this excellent design to a PCB, creating a smaller and much more robust design.
Through-hole components are used in this PCB iteration in order to match the rotary encoder and OLED display, and the fairly simple parts list looks like it wouldn’t be too hard to duplicate. If you do want to make your own function generator, code and Eagle PCB files for the project can be found here on GitHub.