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.

Each ADS7953 have their own CS signal

Part Number: ADS7953

Hi Team,

Can you please advise with the request:

"

I am using ADS7953 in a project. There are 6 in a card. And they are all on the same SPI line but with different CS signals. I have to read 16 channels of all integrated circuits consecutively.

All ADS7953 ICs are configured as follows. But the first one works, the others don't. If I configure each one at a time and then read 16 channels, it's okay.

Do you have any suggestions on this subject?

ads7953_Write_Data (port_ADC_SPI_CS1, 0x8000); // Auto-1 Mode - Frame 1
ads7953_Write_Data (port_ADC_SPI_CS1, 0xffff); // Auto-1 Mode - Frame 2
ads7953_Write_Data (port_ADC_SPI_CS1, 0x2c00); // Auto-1 Mode - Programming - Reset Channel Counter
ads7953_Write_Data (port_ADC_SPI_CS1, 0x2800); // Auto-1 Mode - Programming - Incremental channel counter
ads7953_Write_Data (port_ADC_SPI_CS1, 0x2800); // Auto-1 Mode - Programming - Incremental channel counter

"

Thanks in advance

Best Regards

Furkan Sefiloglu

  • Hello 

    It seems you are programming them correctly

    It seems that the host cannot support communicating to 6 different devices at the same time. You state that when each one is configured individually, everything works, but when all six are communicated at the same time is when the issue occurs. 

    I would suggest trying adding one device at a time, meaning try configuring 2 devices at the same time, and then 3, too see how many deices the host can support correctly. I would also assume that devices further away from the host are the most vulnerable. Getting a scope on the digital lines will also help o see what is going on to the digital lines when multiple devices are active

    Regards

    Cynthia

  • Hi,

    I used one SPI interface and 6 separate CS port for each ADS7953 devices. I think, problem is not related with host CPU. It seems that ADS7953 needs time for configuration.

    It behaves like this:

    If you configure everytime one ADS7953 and than read 16 channel of that ADS7953, it works.

    If you configure all ADS79653's sequentially and than immediatelly read all 16 channels of each ADS7953 without any re-configuration, it fails. Because of two way communication on SPI, each time I used only one CS signal for one ADS7953.

    Reading of all 6 ADS7963 chips are time critical. So, I could spend time for only reading ADC channels, not for re-configuration.

    I did some tests.

    Here is the results:

    If you configure devices more than one, sequentially or wait for a while after one time configuration, than it works.

    Best regards.

    Ozcan UZUNOGLU

  • Ozcan,

    The device should support this. 

    If all 6 devices are configured at the same time, and then each one is accessed through its respective CS line, then each device should function correctly.

    Once a device is programed, it maintains that configuration until is powered down, reset or reprogrammed. 

    How does the device fail? Is it reading the incorrect channels? does it not increment the channels? can you provide a scope shot of this of the digital bus? please include the two frames before the failure frame. 

  • Hi,

    When it fails, device reads last channel. Not increments channel number, while reading sequentially.

    I found my mistake. Before starting ADC configuration CS ports of all devices were at LOW level. It means all devices are configured at the same time initially.Then, remaining 5 configured together one more time except first one, remaining 4 configured together onece again, and so on..

    CS ports must be set HIGH during CPU port configuration phase. I corrected this issue and tested again. Now, it works every time, in every case.

    During any access to SPI, related CS is first set HIGH first, and than LOW. Finally HIGH again. But, it does not help recover or correct programming of related ADC.

    void ads7953_Write_Data( uint16_t port_CS, uint16_t value )
    {
       ADC_SPI_CS_Control( port_CS, Bit_SET );         // first set CS HIGH - deactivate CS
       ADC_SPI_CS_Control( port_CS, Bit_RESET );   // activate CS
       Send_SPI2_Data( value );
       ADC_SPI_CS_Control( port_CS, Bit_SET );        // finally release CS
    }

    Best regards,

    Ozcan