/* p9_3 Generate sine waveform using DAC MCP4725 with Edubase-V2 board * * The sine wave lookup table is generated in setup(). */ #include const char SLAVEADDR = 0x60; /* DAC MCP4725 address */ const int WAVEFORM_LENGTH = 360; int sinewave[WAVEFORM_LENGTH]; void setup() { int i; float radian; #ifndef M_PI /* M_PI should be defined in GCC, but just in case */ const float M_PI = 4 * atan(1.0); #endif /* construct data table for a sine wave */ radian = ((2 * M_PI) / WAVEFORM_LENGTH); for (i = 0; i < WAVEFORM_LENGTH; i++) { sinewave[i] = 2047 * (sinf(radian * i) + 1); } Wire.begin(); /* initialize I2C */ } void loop() { for (int i = 0; i < WAVEFORM_LENGTH; i++) { /* write to MCP4725 DAC through I2C */ Wire.beginTransmission(SLAVEADDR); /* start talking to DAC */ Wire.write(0x40); /* send write DAC register command */ Wire.write(sinewave[i] >> 4) & 0xFF; /* send high byte data (D13-D4) */ Wire.write(sinewave[i] << 4) & 0xFF; /* send low byte data (D3-D0) */ Wire.endTransmission(); /* stop */ } }