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.

  • Resolved

ADS1263: TDAC configuration issues

Prodigy 80 points

Replies: 5

Views: 125

Part Number: ADS1263

I am using python3 and RPI3 to access the serial data. I can read the analog signal correctly, from AIN2-AIN5, using either the internal or external reference (connected to ANI0-AIN1).

However, I am getting in trouble to set and read the correct diff voltage from the TDAC. I selected the MUX Input to TDAC (P&N), PGA=1, and set TDACP, TDACN values and enable OUTP and OUTN, I am getting ~5.25 V respect to the ground, on AIN6 and AIN7 pins. Consequently, the ADC reads nearly to 0 V.

I am powering the chip using single PS +5V.

The register configuration is below. I call each module sequencely and check if the registers have been update.The command SER.spi_init[], send list the serial data, 0x40, #Address, #Registers, New Register value.

def ADS126x_version(self): # ADS126x version and Revision

reg_addr_base = 0b00100000 # RREG(0x20)
reg_addr_sufix = 0b00000000 # 0x00
reg_value = [0x0000000] # 0x00
configuration = SER.spi_init(0, reg_addr_base, reg_addr_sufix, reg_value, self.speed)
time.sleep(0.1)
print('\033[34m' + "Chip Version= ", configuration[2]>>5, " Revision Number= ", configuration[2] & 0x1f, '\033[0m')

def ADS126x_pw_reg(self): # ADS1262 Power Register

reg_addr_base = 0b01000000 # WREG(0x40)
reg_addr_sufix = 0b00000001 # 0x01
power_reg = [0b00000000]      #0x00
configuration = SER.spi_init(0, reg_addr_base, reg_addr_sufix, power_reg, self.speed)

time.sleep(0.1)

def ADS126x_int(self): # ADS1262 Interface Mode Register

reg_addr_base = 0b01000000 # WREG(0x40)
reg_addr_sufix = 0b00000010 # 0x02
int_reg = [0b00000100]            # 0x04
configuration = SER.spi_init(0, reg_addr_base, reg_addr_sufix, int_reg, self.speed)

time.sleep(0.1)

def ADS126x_mode0(self): # ADS1262 Conversion Mode 0

reg_addr_base = 0b01000000 # WREG(0x40)
reg_addr_sufix = 0b00000011 # 0x03
mode_0_conf = [0b00000000] # 0x00
configuration = SER.spi_init(0,reg_addr_base, reg_addr_sufix, mode_0_conf, self.speed)
time.sleep(0.1)

def ADS126x_mode1(self): # ADS1262 Conversion Mode 1 - Filter

reg_addr_base = 0b01000000 # WREG(0x40)
reg_addr_sufix = 0b00000100 # 0x04
mode_1_conf = [0b10010000] # 0x90

configuration = SER.spi_init(0,reg_addr_base, reg_addr_sufix, mode_1_conf, self.speed)
time.sleep(0.1)

def ADS126x_mode2(self): # ADS1262 Conversion Mode 2

reg_addr_base = 0b01000000 # WREG(0x40)
reg_addr_sufix = 0b00000101 # 0x05
mode_2_conf = [0b00000100] # 0x04 - PGA=1
configuration = SER.spi_init(0,reg_addr_base, reg_addr_sufix, mode_2_conf, self.speed)

time.sleep(0.1)

def ADS126x_mux(self, mux_ch): # ADS1262 Input MUX Register

reg_addr_base = 0b01000000 # WREG(0x40)
reg_addr_sufix = 0b00000110 # 0x06
mux_inp = [0b11101110]          # 0xEE - TDACP and TDACN 
configuration = SER.spi_init(0,reg_addr_base, reg_addr_sufix, mux_inp, self.speed)
time.sleep(0.1)

def ADS126x_ref_mux(self): # ADS1262 Reference MUX Register

reg_addr_base = 0b01000000 # WREG(0x40)
reg_addr_sufix = 0b00001111 # 0x0F
refmux_inp = [0b00001001]    # 0x09 - AIN0 - AIN1

configuration = SER.spi_init(0, reg_addr_base, reg_addr_sufix, refmux_inp, self.speed)
time.sleep(0.1)

def ADS126x_tdac_vp(self): # ADS1262 DAC Volt Pos Register

reg_addr_base = 0b01000000 # WREG(0x40)
reg_addr_sufix = 0b00010000 # 0x10
tdacp_inp = [0b00000111]        # 0x07 - 3.0 V

tdacp_Rec = SER.spi_init(0, reg_addr_base, reg_addr_sufix, tdacp_inp, self.speed)
time.sleep(0.1)

def ADS126x_tdac_vn(self): # ADS1262 DAC Volt Neg Register

reg_addr_base = 0b01000000 # WREG(0x40)
reg_addr_sufix = 0b00010001 # 0x11
tdacn_inp = [0b00011001]        # 0x19 - 0.5 V
configuration = SER.spi_init(0, reg_addr_base, reg_addr_sufix, tdacn_inp, self.speed)

time.sleep(0.1)

def ADS126x_cal(self): # ADS1262 calibration Register

reg_addr_base = 0x40 # WREG(0x40)

reg_addr_sufix = 0x07
OFCAL0 = [0x00] # [0xEF] 200 mV # 0x00 reset
SER.spi_init(0, reg_addr_base, reg_addr_sufix, OFCAL0, self.speed)

reg_addr_sufix = 0x08
OFCAL1 = [0xD0] # [0x47] 200 mV # 0x00 reset
SER.spi_init(0, reg_addr_base, reg_addr_sufix, OFCAL1, self.speed)

reg_addr_sufix = 0x09
OFCAL2 = [0x00] # [0x07] 200 mV # 0x00 reset
SER.spi_init(0, reg_addr_base, reg_addr_sufix, OFCAL2, self.speed)

reg_addr_sufix = 0x0A
FSCAL0 = [0x00] # 0x00 Gain 1
SER.spi_init(0, reg_addr_base, reg_addr_sufix, FSCAL0, self.speed)

reg_addr_sufix = 0x0B
FSCAL1 = [0x00] # 0x00 Gain 1
SER.spi_init(0, reg_addr_base, reg_addr_sufix, FSCAL1, self.speed)

reg_addr_sufix = 0x0C
FSCAL2 = [0x39] # 0x40 Gain 1
SER.spi_init(0, reg_addr_base, reg_addr_sufix, FSCAL2, self.speed)

reg_addr_sufix = 0x0D
IDACMUX = [0xBB] # 0xBB reset
SER.spi_init(0, reg_addr_base, reg_addr_sufix, IDACMUX, self.speed)

reg_addr_sufix = 0x0E
IDACMAG = [0x00] # 0x00 reset
SER.spi_init(0, reg_addr_base, reg_addr_sufix, IDACMUX, self.speed)

reg_addr_sufix = 0x12
GPIOCOM = [0x00] # 0x00 reset
SER.spi_init(0, reg_addr_base, reg_addr_sufix, GPIOCOM, self.speed)

  • Hi Fernando,

    Welcome to the TI E2E Forums! Do you have a schematic of your circuit that you would be able to share?

    I looked through your code and didn't see any wrong. I also tested your register settings on the ADS1263EVM (with the internal reference source) and see a 2.5V output and ADC reading.

    My recommendations would be to...

    • Try and debug the ADS1262 with the default OFCAL[2:0] and FSCAL[2:0] register settings. With non-default offset and gain correction factors programmed you may get a different output code than expected.

    • Start by using the ADC's internal reference to see if you can get the the test DAC to work and then switch to an external reference, just in case there are any issues with the external reference source.

    • If you're not already reading back register values after programming the device, try reading each register to see if they register are getting programmed as you intend.

    Best regards,
    Chris Hall
    Applications Engineer | Precision ADCs


    Check out these helpful resources...
    TI Precision Data Converters | TI Precision Labs - ADCs | Analog Engineer's Calculator | Data Converters Learning Center | Selection Guide

     

  • I tested the code using a different board and worked fine!

    Also, I compared the SCH from my original board and working board and no "electrical" difference.

    At this point, I am looking for PCB HW problems

    Using one of working configuration in the original board, and AIN02-AIN03 as input the chip is losing the configuration after a few hours.

    That makes me believe maybe ground issues/loop.

  • In reply to Fernando Rafael:

    Hi Fernando,

    Thanks for sharing your findings. If you're jumper wiring between the RPI3 and another PCB with the ADC on it, do try to keep the ground connection (and all other connections) as short as possible. I posted some additional details and advise on jumper wiring on this E2E Thread which might be useful to you: e2e.ti.com/.../2883925

    Best regards,
    Chris Hall
    Applications Engineer | Precision ADCs


    Check out these helpful resources...
    TI Precision Data Converters | TI Precision Labs - ADCs | Analog Engineer's Calculator | Data Converters Learning Center | Selection Guide

     

  • In reply to Christopher Hall:

    Thank you, Chris,

    I have the RPI3 isolated from the ADC side. See the diagram below:

    Both ADCs have the same behavior. The AINx works, but the TDAC, and the PS monitor don't.

    PS: the RPI is debugging only. The FPGA is not ready/implemented.

  • In reply to Fernando Rafael:

    The problem is solved!

    The external reference was causing the problem. I was using an LTZ1000 with differential output. Somehow this configuration was backing feed to ADS1263 internals.

    Thanks

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.