This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DAC81416EVM: Can't read data from DAC

Part Number: DAC81416EVM

I'm trying send data to DAC, and access register to read data.

but it only echo the register address(23-16bit),no data in 15-0bit

DAC output:DAC6,DAC7

Serial output:0x970000 -> 0x960000

Connection:

Arduino SCK -> J8.8

Arduino MISO -> J8.3

Arduino MOSI -> J8.4

Arduino SS -> J8.2

Vcc -> 20V from power supply

VDD/VAA -> 5V from power supply

VIO -> 5V from Arduino, connection to J8.5

VSS -> GND

J10 -> 1-2

J11 -> 1-2

J12 -> 1-2

Arduino code:

#include <SPI.h>
#include <stdint.h>

// Registers//
#define R_NOP 0x00
#define R_DEVICEID 0x01
#define R_STATUS 0x02
#define R_SPICONFIG 0x03
#define R_GENCONFIG 0x04
#define R_BRDCONFIG 0x05
#define R_SYNCCONFIG 0x06
#define R_TOGGCONFIG0 0x07 //DAC[15:8] Toggle Configuration Register//
#define R_TOGGCONFIG1 0x08 //DAC[7:0] Toggle Configuration Register//
#define R_DACPWDWN 0x09 //when it set up on 1 is off//
#define R_DACRANGE0 0x0A //DAC[15:12] Range Register//
#define R_DACRANGE1 0x0B //DAC[11:8] Range Register//
#define R_DACRANGE2 0x0C //DAC[7:4] Range Register//
#define R_DACRANGE3 0x0D //DAC[3:0] Range Register//
#define R_TRIGGER 0x0E
#define R_BRDCAST 0x0F
#define R_DAC0 0x10
#define R_DAC1 0x11
#define R_DAC2 0x12
#define R_DAC3 0x13
#define R_DAC4 0x14
#define R_DAC5 0x15
#define R_DAC6 0x16
#define R_DAC7 0x17
#define R_DAC8 0x18
#define R_DAC9 0x19
#define R_DAC10 0x1A
#define R_DAC11 0x1B
#define R_DAC12 0x1C
#define R_DAC13 0x1D
#define R_DAC14 0x1E
#define R_DAC15 0x1F
#define R_OFFSET0 0x20 //DAC[14-15;12-13] Differential Offset Register//
#define R_OFFSET1 0x21 //DAC[10-11;8-9] Differential Offset Register//
#define R_OFFSET2 0x22 //DAC[6-7;4-5] Differential Offset Register//
#define R_OFFSET3 0x23 //DAC[2-3;0-1] Differential Offset Register//

void setup() {
Serial.begin(115200);
SPI.beginTransaction(SPISettings(100000, MSBFIRST, SPI_MODE1));
SPI.begin();
delay(100);

// Set DAC7 0-5V DAC6 0-20V//
digitalWrite(SS, LOW);
dac_write(R_DACRANGE2);
SPI.transfer(0x02);
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 6,7 channels//
digitalWrite(SS, LOW);
dac_write(R_DACPWDWN);
SPI.transfer(0xFF);
SPI.transfer(0x3F);
digitalWrite(SS, HIGH);
delay(100);

// Set all DAC to asynchronous mode
digitalWrite(SS, LOW);
dac_write(R_SYNCCONFIG);
SPI.transfer(0x00);
SPI.transfer(0x00);
digitalWrite(SS, HIGH);
delay(100);

digitalWrite(SS, LOW);
dac_write(R_GENCONFIG);
SPI.transfer(0x01);
SPI.transfer(0x00);
digitalWrite(SS, HIGH);
delay(100);

SPI.endTransaction();
}

void loop() {

digitalWrite(SS, LOW);
dac_write(R_DAC7);
SPI.transfer(0xAA);
SPI.transfer(0xAA);
delay(1);
digitalWrite(SS, HIGH);

delay(50);

digitalWrite(SS, LOW);
dac_write(R_DAC6);
SPI.transfer(0x88);
SPI.transfer(0x88);
delay(1);
digitalWrite(SS, HIGH);

delay(50);

read_reg(R_DAC7);

delay(500);

digitalWrite(SS, LOW);
dac_write(R_DAC7);
SPI.transfer(0xCC);
SPI.transfer(0xCC);
delay(1);
digitalWrite(SS, HIGH);

delay(50);

digitalWrite(SS, LOW);
dac_write(R_DAC6);
SPI.transfer(0x22);
SPI.transfer(0x22);
delay(1);
digitalWrite(SS, HIGH);

delay(50);

read_reg(R_DAC6);

delay(500);

}

void read_reg(uint8_t reg) {
uint16_t val;

uint8_t val2; 

digitalWrite(SS, LOW);
SPI.transfer( (0x80 | reg) );
SPI.transfer(0xFF);
SPI.transfer(0xFF);
delay(1);
digitalWrite(SS, HIGH);

digitalWrite(SS, LOW);
val=SPI.transfer16(0x00);
val2=SPI.transfer(0x00);
delay(1);
digitalWrite(SS, HIGH);

Serial.println(val,HEX);
Serial.println("1");
Serial.println(val2,HEX);
Serial.println("2");
}

void dac_write(int dac_reg)
{
int dac_regW = dac_reg | 0x00;
SPI.transfer(dac_regW);
}