//waveform generator // hacked from https://www.instructables.com/Arduino-Waveform-Generator-1/ #include #include Adafruit_MCP4728 mcp; #define nsamp 256 #define dacmax 256 const byte nclk = 200; // a guess long int freq; //frequency in Hz long unsigned int phase; long unsigned int phase_inc; void setup() { // // Set a timer interrupt for the phase accumulation cli();//stop interrupts //set timer1 interrupt at 44Hz TCCR1A = 0;// set entire TCCR1A register to 0 TCCR1B = 0;// same for TCCR1B TCNT1 = 0;//initialize counter value to 0 // set compare match register for 1hz increments OCR1A = 500; // = (16 * 10**6) / (44000) - 1 // turn on CTC mode TCCR1B |= (1 << WGM12); // Set CS10 and CS12 bits for 1024 prescaler TCCR1B |= (1 << CS12) | (1 << CS10); // enable timer compare interrupt TIMSK1 |= (1 << OCIE1A); sei();//allow interrupts Serial.begin(115200); while (!Serial) delay(10); // will pause Zero, Leonardo, etc until serial console opens // Try to initialize! if (!mcp.begin(0x64)) { Serial.println("Failed to find MCP4728 chip"); while (1) { delay(10); } } else { Serial.println("Adafruit MCP4728 initialised"); } Wire.setClock(3400000L); freq=6600000; phase=0; calc_phase_inc(); setwave(); } const float pi=3.14159265; byte waveform[nsamp]; void setwave(){ for (int isamp=0; isamp> 24; mcp.fastWrite(waveform[redphase] << 4, 0, 0, 0); //Serial.println(redphase); }