Using a arduino and some resistor to work as a 8bit DAC, so we can make some waveform form it , build a Arduino simple signal generator. what you need just a Arduino, a protoshild and some resistor.

Now we make a Arduino Signal Generator that build on Protoshield. 1

There is a simple signal generator kit in our store, it selling well ,but it’s source is not released so we can’t modify it for more DIY.

The principle of this signal generator is like a 8bit DAC, so just need some resistor we can build it on Arduino . We make a prototype on the Arduino prototype shield : 2 3

The schematic is very sample .Note that one thing, the higher precision resistors you used , the better effect. 4

So the Arduino signal generator kit include : Arduino proto shield kit 1 10k resistors 9 20k resistors 8 Button 1

How to write the code ? On the contrary of using a ADC , the same 8bit for a voltage express, 0xFF means 5V(Depend on your I/0 voltage level) and 0×00 means 0V, VCC divided into 256 , each represents a voltage value. For the sine wave , we could build a voltage table for the waveform , divided a cycle into 256 :

unsigned char sin_tab [256] = {

127,130,133,136,139,142,145,148,151,154,157,160,164,166,169,172,175,178,181,184,187,189,192,195, 197,200,202,205,207,210,212,214,217,219,221,223,225,227,229,231,232,234,236,237,239,240,242,243, 244,245,246,247,248,249, 250,251,251,252,252,253,253,253,253,253,254,253,253,253,253,252,252,251, 251,250,249,249,248,247,246,245,243,242,241,239,238,236,235,233,231,230, 228,226,224,222,220,218, 215,213,211,209,206,204,201,199,196,193,191,188,185,182,180,177,174,171,168,165,162,159,156,153, 150,147,144,141,137,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,79,76, 73,71,68,65,62,60,57,54,52,49,47,44,42,40,38,35,33,31,29,27,25,23,22,20,18,17,15,14, 12,11,10,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,5,6,7,8,9,10,11,13,14,16,17,19,21,22,24, 26,28,30,32,34,36,39,41,43,46,48,51,53,56,58,61,64,66,69,72,75,78,81,84,87,89,93,96, 99,102,105,108,111,114,117,120,123,127};

Of cause , it can be divided it into 512,1024, the more subdivision the better effect.

void setup() { DDRD =0xFF;

void loop() { for (int i=0;i<256;i++) PORTD=sin_tab[i] }


void setup() { DDRD =0xFF;

void loop() { for (int i=0;i<256;i++) PORTD=i; } 6

void setup() { DDRD =0xFF;

void loop() { PORTD=0xFF; delayMicroseconds(100); PORTD=0; delayMicroseconds(100); }