From 66b95576a9f0350b5cc269bb1ca76105d8e7d2c8 Mon Sep 17 00:00:00 2001 From: Mike Lynch Date: Thu, 4 Jan 2024 11:19:09 +1100 Subject: [PATCH] Phased accumulator with a 32-bit waveform is kind of working --- waveforms/waveforms.ino | 55 +++++++++++------------------------------ 1 file changed, 15 insertions(+), 40 deletions(-) diff --git a/waveforms/waveforms.ino b/waveforms/waveforms.ino index 37b9bad..fb7e69f 100644 --- a/waveforms/waveforms.ino +++ b/waveforms/waveforms.ino @@ -7,7 +7,7 @@ Adafruit_MCP4728 mcp; -#define nsamp 256 +#define nsamp 32 #define dacmax 256 const byte nclk = 200; // a guess @@ -16,45 +16,21 @@ 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 +// TIMSK0 &= ~_BV(TOIE0); // disable timer0 overflow interrupt 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); + delay(100); } - } else { - Serial.println("Adafruit MCP4728 initialised"); } - Wire.setClock(3400000L); +// mcp.setSpeed(400000L); +// mcp.setSpeed(800000L); + mcp.setSpeed(800000L); - freq=6600000; + freq=440; phase=0; calc_phase_inc(); @@ -63,6 +39,7 @@ void setup() { const float pi=3.14159265; byte waveform[nsamp]; +byte phaseb = 0; void setwave(){ for (int isamp=0; isamp> 24; + phase += phase_inc; + int redphase = phase >> 27; mcp.fastWrite(waveform[redphase] << 4, 0, 0, 0); - //Serial.println(redphase); }