### By processor

AVR ATtiny

AVR ATmega

#### ► ATmega1284

AVR 0-Series and 1-Series

ARM

## Tiny Function Generator Sine Wave

7th March 2018

This article describes an update to my Tiny Function Generator program to add a sine wave to the existing seven waveforms it provides: The Tiny Function Generator has been one of my most popular projects, but several people made the valid comment that it was a pity that it didn't include a sine wave. I realised that this could be added quite simply by providing an array of 256 points, defining one cycle of a sine function.

I could have precalculated the values and included them as constants in the program. However, it seemed more interesting to calculate them in the program.

I have designed a PCB for this circuit: see Tiny Function Generator PCB.

### The program

The program works by first calculating the sine waveform in a 256-byte array, and this is then used by the DDS to generate the sine wave output.

The waveform is stored in the array Sinewave[]:

`int8_t Sinewave;`

Here's the routine CalculateSine() to calculate one cycle of a sine wave:

```void CalculateSine () {
int X=0, Y=8180;
for (int i=0; i<256; i++) {
X = X + (Y*4)/163;
Y = Y - (X*4)/163;
Sinewave[i] = X>>6;
}
}```

The for loop uses the Minsky circle algorithm to calculate the 256 points in a sine wave, without needing floating point or trig functions. The value 4/163 is a close approximation to (2*π)/256, where 2*π is the number of radians in a circle, ie one cycle, and 256 is the number of subdivisions of the circle we want.

An additional Sine() routine then outputs the points from the Timer/Counter0 COMPA interrupt when you select the sine wave:

```void Sine () {
Acc = Acc + Jump;
OCR1A = Sinewave[Acc>>8] + 128;
}```

The "+ 128" converts the signed 8-bit values in the Sinewave[] array to an unsigned 8-bit number for the OCR1A counter.

There's also a new icon to represent the sine wave.

### Other details

The circuit and other details are unchanged from the previous project; see Tiny Function Generator.

Here's the updated program: Tiny Function Generator Sine Wave program.