I recently use ADS8556EVM in HW/SER mode. Six channel data output only from SDO_A. So I creat 96 clock to read the data. The output data A0, A1, B0, B1, and C0 are correct, only the C1 is wrong. What's happening?
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.
Hi user4496395,
Welcome to the e2e forum! Can you tell us what is wrong with the data from the ADS8556 channel C1? Is it off by some scale factor? Is it 'garbage' data? Shifted data? Can you perhaps share the raw conversion data and provide details about the setup (input voltage, range, expected results, etc)?
Hi Tom,
+VA : +12V , -VA : -12V , AVdd : +5V , BVdd : +5V
Vref : I use the internal reference voltage. It seems like 2.5V
My SW1 set : WORD / 4x / HDW / SER / REFBUF ENA (0) / Chain ENA (0) /SERA ENA (1) / SERB ENA (0) /SERA ENA (0) /REF en (1)
case 1 : All channel connected to GND
case 2 : A0 input voltage 5V , other channels are GND
case 3 : A1 input voltage 5V , other channels are GND
case 4 : B0 input voltage 5V , other channels are GND
case 5 : B1 input voltage 5V , other channels are GND
case 6 : C0 input voltage 5V , other channels are GND
case 7 : C1 input voltage 5V , other channels are GND
Only the C1 output Data is different.
my code as follows:
int main() { pc.baud(115200); convst = 0; reset = 0; // Chip must be deselected cs = 1; spi.format(16,2); // Setup the spi for 8 bit data, high steady state clock, spi.frequency(1000000); // second edge capture, with a 1MHz clock rate reset = 1; wait_ns(50); reset = 0; while(1) { convst = 1; wait_ns(20); while(busy != 0 ); // Select the device by seting chip select low cs = 0; // Send 0x8f, the command to read the WHOAMI register wait_ns(5); int16_t CH_A0 = spi.write(0x0000); // CH_A0 wait_ns(5); int16_t CH_A1 = spi.write(0x0000); // CH_A1 wait_ns(5); int16_t CH_B0 = spi.write(0x0000); // CH_B0 wait_ns(5); int16_t CH_B1 = spi.write(0x0000); // CH_B1 wait_ns(5); int16_t CH_C0 = spi.write(0x0000); // CH_C0 wait_ns(5); int16_t CH_C1 = spi.write(0x0000); // CH_C1 // Deselect the device cs = 1; convst = 0; wait_ns(40); double CHA0, CHA1, CHB0, CHB1, CHC0, CHC1 ; CHA0 = (CH_A0 + 32768) * 20.232 / 65535 - 10.116 ; CHA1 = (CH_A1 + 32768) * 20.232 / 65535 - 10.116 ; CHB0 = (CH_B0 + 32768) * 20.232 / 65535 - 10.116 ; CHB1 = (CH_B1 + 32768) * 20.232 / 65535 - 10.116 ; CHC0 = (CH_C0 + 32768) * 20.232 / 65535 - 10.116 ; CHC1 = (CH_C1 + 32768) * 20.232 / 65535 - 10.116 ; pc.printf("CHA0 = %f, ", CHA0); pc.printf("CHA1 = %f, ", CHA1); pc.printf("CHB0 = %f, ", CHB0); pc.printf("CHB1 = %f, ", CHB1); pc.printf("CHC0 = %f, ", CHC0); pc.printf("CHC1 = %f,\r\n ", CHC1); } }
If the code where need to be modified, please talk to me. thx
Best regards.
Hello user4496395,
It seems that there may be something going on with the input to channel C1. The data for channel C1 in case 1 and case 2, is significantly different than that for cases 3 to 6.
My recommendation would be to verify the correct positioning of jumper JP8 and put an oscilloscope probe across C31 to ensure you read the proper voltage you expect (either ground or 5 V).
Let me know if you obtain the expected value.
Best regards,
Jose
Hello user4496395,
I can only conclude, from the measurement results you report, that there is something wrong with the connection of your input signal or with the THS4032 used to buffer channels C0 and C1.
As you can see in the image below, either position of JP5 and JP8 should lead you to read on the oscilloscope the exact same voltage you put in on pins (10 to 9) and (12 to 11) of J2. If you put in 5 V and read only 2.5 mV then the signal is not getting through.
I would recommend you to double check J2, JP5 and JP8.
Also, I would JP5 and JP8 as shorting pins 2-3 and verify that the THS4032 is properly operating as a buffer amplifier.
Out of curiosity, when you apply 5 V to J2-6 and GND to J2-5, how much do you read with the oscilloscope across C16?
Best,
Jose