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.

DAC8771: Low Output Amplitude – REFOUT only 1.5V instead of 5V

Part Number: DAC8771

Tool/software:

Hi everyone,

we're currently working with a custom PCB that uses the DAC8771, and while basic communication and functionality seem to work, we're encountering a major issue:
The output amplitude is far too low. After some debugging, we suspect the issue might be related to the REFOUT pin.

Instead of the expected 5V reference output, we’re only seeing 1.5V on REFOUT.

Some details about our setup:

  • We're not using the internal buck-boost converter.
  • We supply external power: ±18V to the DAC.
  • The SPI interface is working, and we can send and receive data.
  • The DAC is configured in ±24 mA current output mode.
  • Microprocessor is an ESP32-S3

We also tested the configuration where REFOUT is disabled, and we supply an external 5V reference to REFIN. However, in this case the output signal becomes even weaker.

We’re wondering:

Is this behavior expected under certain conditions?

Is our initialization sequence correct to enable REFOUT or use REFIN properly?

Could the schematic or power supply setup be the cause?

We'd really appreciate any feedback on whether our approach sounds right, or if anyone has run into a similar problem before.

Thanks in advance!
Pascal Richter


Initialitation code:

void initDAC8771()
{
  // Reset Register (address = 0x01)
  dac8771WriteRegister(REG_RESET, 1); // reset device
  delay(100);

  // Reset Config Register (address = 0x02)
  dac8771WriteRegister(REG_RESET_CONFIG, (1 << 4) | (1 << 2) | (1 << 1)); // enable internal reference
  delayMicroseconds(50);

  // Select buck boost converter A (address = 0x06)
  dac8771WriteRegister(REG_SELECT_BUCK_BOOST, (0 << DCA));
  delayMicroseconds(50);

  // Configuration Buck-Boost Register (address = 0x07)
  dac8771WriteRegister(REG_CONFIG_BUCK_BOOST, 0);
  delayMicroseconds(50);

  // Disable daisy chain, enable channel A (address = 0x03)
  dac8771WriteRegister(REG_SELECT_DAC, (1 << CLSLA) | (1 << CHA) | (1 << DSDO) | (0 << CREN) | (0b00 << WPD) | (0 << WEN));
  delayMicroseconds(50);

  // Config DAC Register (0x04)          OUT_EN
  dac8771WriteRegister(REG_CONFIG_DAC, (1 << 12) | (0b0111)); // Output enable and +/- 24mA current mode
  delayMicroseconds(50);

  digitalWrite(DAC_CLR, LOW);
}

void dac8771WriteRegister(uint8_t reg, uint16_t data)
{
  tx_data[0] = reg & 0x7F; // MSB is 0 (write)
  tx_data[1] = (data >> 8) & 0xFF;
  tx_data[2] = data & 0xFF;

  trans.length = 8 * 3; // 3 Byte
  trans.tx_buffer = tx_data;
  esp_err_t err = spi_device_queue_trans(spi_dac, &trans, 0);
  if (err != ESP_OK)
  {
    Serial.print("Error writing to DAC8771 register: ");
    Serial.println(esp_err_to_name(err));
  }
}


Schematic:

  • Pascal,


    I don't see anything in the schematic that looks unusual, except that there doesn't appear to be a connection to the thermal pad in the drawing. Do you have a connection for that? It should be connected to ground. I'm not sure what problems come from not connecting it, but I can check to see if there have been any other comments about it.

    There isn't anything that would normally set the reference voltage to something other than 5V unless it was loaded by a lot of current, or if there's problems starting up the device. There's not enough capacitance to cause the output to become unstable.

    I would start by checking the supply to see if it's loaded in any way. If you can, measure the currents coming out of the supply to see if it's normal (I think at startup the device draws only 2mA). Then I'd check to see if the voltages of the supplies, outputs, and the digital lines to see if they are correct.

    I'd also visually inspect all of the pins to make sure they're all soldered correctly without and missing connections or bridges.

    I'll take a quick look through the code to see if there are any other issues, but I don't think this is a coding issue (also, I'm not much of a coder, so I could miss something there).


    Joseph Wu