Hi,
We currently have 25 PCBs with the DAC7750, which were assembled by a professional assembly company.
When testing the first batch we noticed that 9 out of the 25 failed to output correctly. Later 3 PCBs that outputted
the current correct the first time, failed to output correctly the second time. Not all PCBs were retested.
The output current is between 17 and 22 times less the programmed current. Example: The DAC is configured
to output 8 mA, it will output 0,04 mA.
I tried to change every register to all possible values and modes, the registers seem to be correct and do what they
should do, but the output current is still ~20 times less than what it should be.
Configuration:
The schematic used is the reference design from the datasheet. AVDD = 24v, DVDD = 3.3V.
- Slewrate enabled
- SRCLK 258065 Hz
- SRSTEP 8
- Range 0 - 20 mA
- User calibration enabled
- Gain 0x8000
- Zero 0x0000
Code:
//Reset chip m_ClearPin.ResetBit(); WriteRegister(DAC_WRITE_RESET_REG); //Perform a software reset //Send NOP WriteRegister(DAC_NO_OP_REG); //Setup output to 0 mA WriteRegister(DAC_WRITE_DATA_REG); //Setup DAC (no RSET, SRCLK 258065 Hz, SRSTEP 8, slewrate control enabled, no daisychain, range 0-20 mA) WriteRegister(DAC_WRITE_CONTROL_REG | 0x00F6); //Setup DAC (user calibration enabled, no Hart communication, no CRC, no watchdog) WriteRegister(DAC_WRITE_CONFIGURATION_REG | 0x0000); //Setup DAC (gain to full range 0x000 - 0xFFF) WriteRegister(DAC_WRITE_GAIN_CALIB_REG | 0x8000); //Setup DAC (zero to 0x0000) WriteRegister(DAC_WRITE_ZERO_CALIB_REG); //Enable output WriteRegister(DAC_WRITE_CONTROL_REG | 0x10F6); //Verify settings in DAC m_Initialized = (0x0000 == ReadRegister(DAC_READ_DATA_REG)); m_Initialized &= (0x10F6 == (ReadRegister(DAC_READ_CONTROL_REG) & 0x3FFF)); m_Initialized &= (0x0000 == (ReadRegister(DAC_READ_CONFIGURATION_REG) & 0x003F)); m_Initialized &= (0x8000 == ReadRegister(DAC_READ_GAIN_CALIB_REG)); m_Initialized &= (0x0000 == ReadRegister(DAC_READ_ZERO_CALIB_REG));
//Setup output to 4 mA WriteRegister(DAC_WRITE_DATA_REG | 0x3330);