# producing sine wave variable in amplitude and frequency

How to produce a sine wave with variable frequency and variable amplitude? I found a library to produce variable frequency called `sinwave` but not produce variable amplitude (I want -2V to 2V amplitude)

• How is -2V to 2V variable? – Gerben Aug 30 '16 at 18:13

## 2 Answers

You can use a digital potentiometer as a programmable attenuator or as a feedback element in a programmable gain amplifier circuit.

See references at arduino.cc regarding interfacing an AD5171 or AD5206 to Arduinos.

Here's one solution to do it using your own code implementing the following.The basic solution is as follows. Start with the basic sine wave output (this has amplitude between -1 and 1, and repeats ever 360 degrees) implemented as a function in your Arduino sketch with a variable parameter for the frequency and amplitude.

Now input the frequency you want (which you don't specify) and the amplitude (that is multiply your sine function by 2). The frequency can be implemented by using the delay function to output a value corresponding to the y-axis of the sine wave at the specified time on the x-axis. You would need the y output to depend on the delay and the frequency. This is all in code so far.

The next step is to output the corresponding voltages for each point on the sine wave. To make a varying voltage you can use a digital potentiometer with a voltage divider type circuit (it's not quite an voltage divider because it needs to produce negative voltages too). Thus you just need to make your code activate the digital potentiometer at the required resistance to create the required voltage that represents the y value of that sine value at that point in time (x axis has time). This voltage divider requires some more circuity to make the voltage between 0 and -2 volts (the negative voltage depends on the time the circuit has been on or the x-axis of the sine wave). There are lots of ways to make a corresponding negative voltage (the bottom half of the sine wave). The triggering on or off of the potentiometer is done from the Arduino thus this also controls the frequency of the sine wave.

To sum up code the sine wave in a sketch with your desired frequency and amplitude use these values and implement the discrete point on the sine wave using a (digital) potentiometer which is part of a circuit which is a variation of the simple voltage divider (the voltage divider type circuit will implement the amplitude of the sine wave which you want between 2v and -2v). The frequency is, basically, implemented with the delay function.