Skip to main content
camila
Associate II
January 15, 2014
Question

STM32F4 Discovery with ADS7870 (TI) ADC

  • January 15, 2014
  • 20 replies
  • 3989 views
Posted on January 15, 2014 at 10:19

Hi,

I'm trying to communicate between the

http://www.ti.com/product/ADS7870

and the ST microcontroller STM32F4 Discovery evaluation board. I'm using IAR and at the moment I'm just trying to read register 31 from the ADC (which should return a 1) but with no luck.

I'm setting the SPI on the microcontrontroller as follows: data transmitted as MSB first, clock low in idle state, data is captured on rising edge, data size is 8 bits, and full duplex transmission.

In main.c I do:

http://e2e.ti.com/support/data_converters/precision_data_converters/f/73/t/3147aspx#

1

2

3

4

5

6

debug = ads7870Init();

if

(debug==1)

printf

(

''adc is alive \n''

);

else

printf

(

''adc is DEAD \n''

);

And in

http://www.ti.com/product/ads7870

_driver.c I have:

http://e2e.ti.com/support/data_converters/precision_data_converters/f/73/t/3147aspx#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

//initialize ADC

uint8_t ads7870Init(

void

)

{

//// check ID register

if

(ads7870ReadReg(ADS7870_ID) != ADS7870_ID_VALUE)

return

0;

else

{

//// setup reference and buffer

ads7870WriteReg(ADS7870_REFOSC, ADS7870_REFOSC_OSCE | ADS7870_REFOSC_REFE | ADS7870_REFOSC_BUFE);

//// return success

return

1;

}

}

I'm attaching a screenshot of what I see on the scope. (yellow: sclk, blue: read command register 31, purple: output from ADC).

http://e2e.ti.com/cfs-file.ashx/__key/communityserver-discussions-components-files/73/67stm32f4_5F00_response_5F00_scope.PNG

MOSI transmits properly to the

http://www.ti.com/product/ADS7870

(the din pin receives read command), but there is no response coming from the ADC dout pin.

I would really appreciate any help on this.

Thank you.

    This topic has been closed for replies.

    20 replies

    lowpowermcu
    Associate III
    January 16, 2014
    Posted on January 16, 2014 at 14:10

    Hi dor.c

    How do you manage the NSS signal?

    camila
    camilaAuthor
    Associate II
    January 17, 2014
    Posted on January 17, 2014 at 10:22

    Sung,

    Later on I can add a delay to wait for the ADC to be ready as well.

    CS on the ADC is currently tied to ground. The RESET is tied to Vdd and OSCENABLE is also tied to Vdd.

    I have read the datasheet for the ADC and as I have shown in my last post the same ADS7870 with the same connections works perfectly with the ATMEGA8. That's why I suppose everything is correct on the ADC side.

    chen
    Associate II
    January 17, 2014
    Posted on January 17, 2014 at 11:00

    ''I have read the datasheet for the ADC''

    Have you?

    Why have you connected ''OSCENABLE is also tied to Vdd.'' ?

    The datasheet shows this should be connected to 0V.

    (Though I am not sure this will stop it from communicating over SPI, I think the OSC is really for doing converting, SPI provides it's own clocking).

    chen
    Associate II
    January 17, 2014
    Posted on January 17, 2014 at 11:13

    Actually I just realised something.

    The Atmel is a 5V device. The STM32 is a 3/3.3V device.

    (your diagrams show there is a difference in logic high)

    What supply are you giving the ADC?

    For the ADC to work with 3.3V logic ip - it must be supplied with 3.3V

    Check the datasheet!

    camila
    camilaAuthor
    Associate II
    January 17, 2014
    Posted on January 17, 2014 at 11:25

    The ADC is connected to Vdd on STM32, so it's 3.3V.

    camila
    camilaAuthor
    Associate II
    January 17, 2014
    Posted on January 17, 2014 at 11:30

    JW, 

    RISE/FALL is tied to 1, so it's rising edge. 

    The only difference I see with the ATMEGA8 is that on STM32 MOSI is low during don't care conditions, while on ATMEGA8 MOSI is high. Though I don't think this should make a difference.

    camila
    camilaAuthor
    Associate II
    January 17, 2014
    Posted on January 17, 2014 at 11:31

    I will check this on Monday, this might be a problem.

    Thank you.

    camila
    camilaAuthor
    Associate II
    January 17, 2014
    Posted on January 17, 2014 at 11:35

    NSS on the ADC is grounded. I'm not using the NSS signal coming from the STM32 at the moment.

    waclawek.jan
    Super User
    January 17, 2014
    Posted on January 17, 2014 at 11:38

    > NSS on the ADC is grounded. I'm not using the NSS signal coming from the STM32 at the moment.

    Have you tried the expicit SPI sync sequence (at least 39 zeros then exactly 1 one)?

    JW

    camila
    camilaAuthor
    Associate II
    January 17, 2014
    Posted on January 17, 2014 at 11:47

    No, I will try that on Monday when I'm with the device. Thanks.