#include "WProgram.h" void setup(); void loop(); void SPI16(int spidata); void Set_Gen(int waveform,float frequency); const int latchPin = 10; const int clockPin = 13; const int dataPin = 11; const int SINE=0x2008; const int TRIANGLE= 0x200A; const int SQUARE = 0x2028; void setup() { //set pins to output because they are addressed in the main loop pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { int i; // display sine, triangle, and square 5x @ 1khz for(i=1;i<5;i++){ Set_Gen(SINE,1000); delay(1000); Set_Gen(TRIANGLE,1000); delay(1000); Set_Gen(SQUARE,1000); delay(1000); } // display sine, triangle, and square 5x @ 100khz for(i=1;i<5;i++){ Set_Gen(SINE,100000); delay(1000); Set_Gen(TRIANGLE,100000); delay(1000); Set_Gen(SQUARE,100000); delay(1000); } } void SPI16(int spidata){ int spidatah; int spidatal; spidatah= spidata>>8; spidatal= spidata & 0xFF; digitalWrite(clockPin, HIGH); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, spidatah); digitalWrite(clockPin, HIGH); shiftOut(dataPin, clockPin, MSBFIRST, spidatal); digitalWrite(clockPin, HIGH); digitalWrite(latchPin, HIGH); } void Set_Gen(int waveform,float frequency){ long int freqdiv; int freqdivh; int freqdivl; freqdiv=frequency*53.6870912; freqdivh=freqdiv>>14; freqdivh &= 0x3FFF; freqdivl=freqdiv & 0x3FFF; freqdivh |= 0x4000; freqdivl |= 0x4000; SPI16(waveform); SPI16(freqdivl); SPI16(freqdivh); } int main(void) { init(); setup(); for (;;) loop(); return 0; }