AD7606 Library for mbed

Dependents:   AD7606_demo

This is my first attempt to develop a library to control an Analog Devices' AD7606BSTZ (8-channels, 16-bits, 200 kHz simultaneous sampling ADC) connected to an mbed enabled processor via an SPI port; I need to use this ADC in an applications requiring many simultaneous sampling analog input channels.

Until now the library has been tested with a FRDM-KL25Z and FRDM-K64F using this breakout board from ARMFLY, a Shenzhen-based Chinese Company, that I found on Aliexpress:

/media/uploads/frada/ad7606_breakout.jpg

It works well, at least for my needs.

Some important notes:

1) The AD7606 on the breakout board comes enabled to work in parallel mode, that is to tranfer the conversion results on a 8- or 16-bits wide data bus; to enable the SPI mode, it is mandatory to remove resistor R2 (10 kohm) and to solder it in place of R1.

2) as per the suggestions on the AD7606 data-sheet, when using the SPI connection, DB7 assumes the role of DOUTA and DB8 assumes the role of DOUTB; all remaining lines of parallel data bus should be connected to ground;

3) my library uses only DOUTA (DB7) to shift-out the conversion results of all channels; this is documented in the AD7606 data sheet:

SERIAL INTERFACE (PAR/SER/BYTE SEL = 1)

... Data can also be clocked out using just one DOUT line, in which case it is recommended that DOUTA be used to access all conversion data because the channel data is output in ascending order. For the AD7606 to access all eight conversion results on one DOUT line, a total of 128 SCLK cycles is required. ...

4) the 8 T/H (track and hold) devices in the AD7606BSTZ are divided in 2 groups of 4; each group being controlled by a CONVST line. I connected the two lines together to trigger the hold phase at the same time for all 8 T/H.

5) Until now I'm unable to find the cause of a problem with reading the correct status of the BUSY pin of the AD7606 (the while(_busy) loop in readAnalog and readRaw methods seems to hang, nonetheless the BUSY pin goes low after the conversion completion), so I am forced to wait for a fixed time (5 us) after the CONVST pulse to read the conversion result. However the conversion time is a function of the oversampling factor programmed using pins OS0, OS1, OS2 of the AD7606.

Download repository: zip gz

Files at revision 4:9341319c0d8e

Name Size Actions
[up]
ad7606.cpp 2536 Revisions Annotate
ad7606.h 1116 Revisions Annotate