Link for PCB board at PCBWay: https://www.pcbway.com/project/shareproject/W08904ASW106_DAC_Example_Gerber.html
//**********Arduino Code with MCP4728 examples from video***************
/*
* This code was written to demonstrate functions on the MCP4728 4 channel DAC for a video on the ForceTronics YouTube channel
* This sketch leverages a library from GitHub made by Hideakitai, link to library: https://github.com/hideakitai/MCP4728
* This code is public domain and free to anyone to use and modify with no restrictions at your own risk
*/
#include <Wire.h>
#include "MCP4728.h"
MCP4728 dac; //create object to library
//variables for wavform
int const sampleCount = 24; //samples to read to have a buffer
int signalSamples[sampleCount]; //create array to hold signal or waveform
float pi2 = 6.283; //value of pi times 2
const long clkFrequency = 400000; //I2C clock frequency
const uint8_t t1 = 3; //pin to setup test 1 fast sinewave
const uint8_t t2 = 4; //pin to setup test 2 sync'd sinewaves
const uint8_t LDAC = 5; //Output pin on MCU to control LDAC(not) pin on DAC
void setup() {
//Create sinewave
float in;
float hBit = 2047.5;
for (int i=0;i<sampleCount;i++)
{
in = pi2*(1/(float)sampleCount)*(float)i;
signalSamples[i] = (int)(sin(in)*hBit + hBit);
}
pinMode(t1,INPUT_PULLUP); //configure test check pins
pinMode(t2,INPUT_PULLUP); //configure test check pins
pinMode(LDAC,OUTPUT); //configure test check pins
digitalWrite(LDAC,HIGH); //turn DAC outputs off
Wire.begin(); //start up I2C library
Wire.setClock(clkFrequency); //set clock frequency for I2C comm
dac.attatch(Wire, 13); //second argument is Arduino pin connected to LDAC(not), we are controlling LDAC manually so just entered pin we are not using
dac.readRegisters(); //Used to read current settings from MCP4728
dac.selectVref(MCP4728::VREF::VDD, MCP4728::VREF::VDD, MCP4728::VREF::VDD, MCP4728::VREF::VDD); //setup voltage ref for each DAC channel
dac.selectPowerDown(MCP4728::PWR_DOWN::NORMAL, MCP4728::PWR_DOWN::NORMAL, MCP4728::PWR_DOWN::NORMAL, MCP4728::PWR_DOWN::NORMAL); //set power down mode, used for saving power
dac.selectGain(MCP4728::GAIN::X1, MCP4728::GAIN::X1, MCP4728::GAIN::X1, MCP4728::GAIN::X1); //set gain on output amp
//dac.enable(true); //enables the DAC outputs by controlling LDAC pin, but we are controlling LDAC manually in this example
//perform test one
if(!digitalRead(t1)) {
digitalWrite(LDAC,LOW);
//output sinewave as fast as we can
for(;;) { //run test for infinitity
for(int j=0;j<sampleCount;j++) {
dac.analogWrite(MCP4728::DAC_CH::A,signalSamples[j]);
}
}
}
else { //perform test 2
for(;;) { //run test for infinitity
for(int j=0;j<sampleCount;j++) {
int temp = j;
digitalWrite(LDAC,HIGH); //turn outputs off
// delay(1);
dac.analogWrite(MCP4728::DAC_CH::A,signalSamples[temp]);
temp += 8; //shift sigal 90 degrees
if(temp > 23) temp -= sampleCount;
dac.analogWrite(MCP4728::DAC_CH::B,signalSamples[temp]);
temp += 8; //shift sigal 90 degrees
if(temp > 23) temp -= sampleCount;
dac.analogWrite(MCP4728::DAC_CH::C,signalSamples[temp]);
temp += 8; //shift sigal 90 degrees
if(temp > 23) temp -= sampleCount;
dac.analogWrite(MCP4728::DAC_CH::D,signalSamples[temp]);
digitalWrite(LDAC,LOW); //turn outputs on all four outputs at same time
// delay(1);
}
}
}
}
void loop() {
}
This comment has been removed by the author.
ReplyDeleteShe’s a tough sell. https://imgur.com/a/e7JUBWj https://imgur.com/a/fIuhr8E https://imgur.com/a/64ojGgI https://imgur.com/a/ZkXc7zD https://imgur.com/a/voKb2cX https://imgur.com/a/INlGBUf https://imgur.com/a/R2i7MGk
ReplyDelete