He conectado dos MCP4725 DAC a mi Arduino y escribí un pequeño bosquejo de demostración para probar la funcionalidad. El boceto dibuja una curva de Lissajous en mi osciloscopio. La frecuencia de salida es un poco decepcionante (aproximadamente 1.5kHz de frecuencia de muestreo), pero la hoja de datos del DAC menciona el modo I2C de alta velocidad. ¿Arduino (Mega1280) admite el modo I2C de alta velocidad y, en caso afirmativo, cómo?
#include <Wire.h>
#include <math.h>
#define DAC0 ( 0xCC >> 1 )
#define DAC1 ( 0xCE >> 1 )
int sh[ 360 ] , sl[ 360 ];
int ch[ 360 ] , cl[ 360 ];
void setup() {
Wire.begin();
for ( int a = 0; a <= 360; a++ ) {
int s = sin( a * 3.141592 / 180 ) * 2047 + 2048;
int c = cos( a * 3.141592 / 180 ) * 2047 + 2048;
sh[ a ] = int( s / 256 );
sl[ a ] = s - sh[ a ] * 256;
ch[ a ] = int( c / 256 );
cl[ a ] = c - sh[ a ] * 256;
}
}
void loop() {
for ( int b = 0; b < 360; b++ ) {
for ( int a = 0; a < 360; a += 6 ) {
Wire.beginTransmission( DAC0 );
Wire.send( ch[ a ] );
Wire.send( cl[ a ] );
Wire.endTransmission();
Wire.beginTransmission( DAC1 );
Wire.send( sh[ ( a * 2 + b ) % 360 ] );
Wire.send( sl[ ( a * 2 + b ) % 360 ] );
Wire.endTransmission();
}
}
}