Part Number: DAC81416EVM
I'm trying to use Arduino SPI communication to control DAC81416EVM, but when I trying send several data, it didn't change output, always output 5V.
Connection:
Arduino SCK -> J8.8
Arduino MISO -> J8.3
Arduino MOSI -> J8.4
Arduino SS -> J8.2
Vcc -> 15V from power supply
VDD/VAA -> 5V from power supply
VIO -> 5V from Arduino
VSS -> GND
J10 -> 2-3
Arduino code:
void setup() {
Serial.begin(115200);
SPI.beginTransaction(SPISettings(100000, MSBFIRST, SPI_MODE1));
SPI.begin();
delay(100);
// Set DAC[15:12] range 0-5V//
digitalWrite(SS, LOW);
dac_write(R_DACRANGE0);
SPI.transfer(0x00);
SPI.transfer(0x00);
digitalWrite(SS, HIGH);
delay(100);
// Set DAC[11:8] range 0-5V//
digitalWrite(SS, LOW);
dac_write(R_DACRANGE1);
SPI.transfer(0x00);
SPI.transfer(0x00);
digitalWrite(SS, HIGH);
delay(100);
// Set DAC[7:4] range 0-5V//
digitalWrite(SS, LOW);
dac_write(R_DACRANGE2);
SPI.transfer(0x00);
SPI.transfer(0x00);
digitalWrite(SS, HIGH);
delay(100);
// Set DAC[3:0] range 0-5V//
digitalWrite(SS, LOW);
dac_write(R_DACRANGE3);
SPI.transfer(0x00);
SPI.transfer(0x00);
digitalWrite(SS, HIGH);
delay(100);
//enable SDO for SPI read//
digitalWrite(SS, LOW);
dac_write(R_SPICONFIG);
SPI.transfer(0x0A);
SPI.transfer(0x84);
digitalWrite(SS, HIGH);
delay(100);
// Power up all channels//
digitalWrite(SS, LOW);
dac_write(R_DACPWDWN);
SPI.transfer(0x00);
SPI.transfer(0x00);
digitalWrite(SS, HIGH);
delay(100);
// Enable broadcast//
digitalWrite(SS, LOW);
dac_write(R_BRDCONFIG);
SPI.transfer(0xFF);
SPI.transfer(0xFF);
digitalWrite(SS, HIGH);
delay(100);
//Set all channels to asynchronous mode//
digitalWrite(SS, LOW);
dac_write(R_SYNCCONFIG);
SPI.transfer(0x00);
SPI.transfer(0x00);
digitalWrite(SS, HIGH);
delay(100);
}
void loop() {
while(1)
{
// write code to R_BRDCAST
digitalWrite(SS, LOW);
dac_write(R_BRDCAST);
SPI.transfer(255);
SPI.transfer(255);
digitalWrite(SS, HIGH);
delay(500);
// write code to R_BRDCAST
digitalWrite(SS, LOW);
dac_write(R_BRDCAST);
SPI.transfer(0);
SPI.transfer(0);
digitalWrite(SS, HIGH);
delay(500);
}
delay(300);
}
void dac_write(int dac_reg)
{
int dac_regW = dac_reg | 0x00;
SPI.transfer(dac_regW);
}