The initial version of this project was build using the Arduino board and an Arduino prototype shield for the DAC and associated parts. The second generation version (as shown in the schematic) was built using just the Arduino's Atmega 126 processor chip on a stand-alone circuit board. The microprocessor was first programmed on the Arduino board then the chip was moved to the standalone LFO board. The stand-alone version is smaller and costs less than the Arduino Diecimila version. The circuit is a descendent of an older waveform generator project.
The DAC is an MC1408P8 that is connected to Port D (out0-out7) on the Arduino. The DAC output drives half of a 1458 dual op-amp wired as a low-pass current to voltage amplifier. The 1458 drives the positive side of a display LED and an LED/LVR opto-coupler. The other half of the 1458 creates a negative 1.1V bias for driving the negative side of the LEDs. The bias is set so that the LED is just turning on when the DAC is set to output zero volts.
An RGB LED is connected to the Arduino's port E (out8, out9, out10), the software displays a unique color for each of the three waveforms that the board can produce. An R-C delay is connected to analog input 1 on Port C, this allows the software to determine if the board was powerd on for the first time or reset manually. A 10K Speed control pot is connected to analog input 2 on Port C, the position is read and used to set the waveform clock rate.
There is an RC time delay on Analog input 0, when the board powers on the first time, it reads a low value but when the reset button is pushed manually, it reads a high value. That combined with an EEPROM setting allows the board to boot into one of three possible states. One might wonder why I designed the waveform selection software this way instead of putting a mode test inside of the LFO while loop, it was done for speed. An in-loop test limites the maximum LFO speed below the maximum desired rate.
The waveforms were generated by this Python language program: sinegen3.py. The wave tables were then transferred into the Arduino source code.
This software: DAC3.pde has a 3840 byte wavetable array, it compiles with the Arduino software but when you load the code, it overwrites the bootloader software and crashes the board. Another version of this, DAC2.pde, with a 768 byte array did not crash the Arduino, but the waveforms had partially bad data values on the DAC output. The same data was plotted via a Python program using matplotlib and the waveform looked fine.
Back to FC's Music Circuits page.