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.

ADS8699: Help regarding ADC reset, writing to range _sel_reg and binary to voltage conversion

Part Number: ADS8699

Hi TI Technical Support team,

With the help and suggestions made to my previous post in this forum, I have designed a board that has two TI ADS8699 18 bit 100kHz ADC on, which will be used to measure analog voltages between 0 and 5V. Before writinh anything to registers, I tested the board with default range setting (bipolar 3*Vref) by applying 3.3V to the ADC inputs and successfully managed to get them work. The test input was 3.27V and corresponding ADC measurements were very close to it (about 3.255.. ). There was small measurement difference, because my input voltage was not precise, and also I was making connections using cables. I used following setup.

make csADC LOW

byte firstByte = SPI.transfer (B00000000);
byte secondByte = SPI.transfer(B00000000);
byte thirdByte = SPI.transfer(B00000000);
byte fourthByte = SPI.transfer(B00000000);

make csADC HIGH

To get voltage results, I took first 18 bits and used attached excel file for binary to voltage calculation that I found in another post related to ADS8699 ADC in this forum. After successful readings, I tried to write to range_sel_reg to make adc input range 0-5.12V, but I failed.

I have following questions.

1. I tried to write range_sel_reg using following commands in order to adjust ADC input range to 0-5.12V. Then, by applying again ~3.3V test input, I measured ADC output (about 170235 decimal). Using excel file and setting the range parameter in the excel to 1.25, I get 0.76V. I think either I am using excel file in a wrong way or I am not writing to range select register properly. My register configuration commands are:

make csADC LOW
SPI.transfer(0xD4); //11010100
SPI.transfer(0x14); // 00010100
SPI.transfer(0x00);
SPI.transfer(0xB); // 1011
make csADC HIGH

Could you please tell me where is my mistake?

2. I have reset pins attached to ADC reset pins. I am using them to make reset in power up. Does following commands enough to make ADC reset, do I need extra commands?

make ADC reset pin  LOW

wait 20ms

make ADC reset pin HIGH

3. After writing 1011 to range_sel_reg and failing to get expected voltage result, I tried to read range_sel_reg using following commands to see if I was able to write to register. 

make csADC LOW

SPI.transfer (0xC8); //11001000
SPI.transfer(0x14); // 00010100
SPI.transfer(B00000000);
byte reading=SPI.transfer(B00000000); // I expect 1011 in the reading byte

make csADC HIGH

With 1 second delays, I tried continuously read the range_sel_reg. I read expected result (1011) in every power up but after that I always get 0. Is this expected behavior?

Thank you for your help, 

Ahmet

3302.ADS869x_FormatConversion_DL (2).xlsx