The EVAL-ADPD410x-ARDZ is a simple, Arduino form-factor breakout board for developing ADPD4100 and ADPD4101 applications. The ADPD4101, interfaced through I2C, and the ADPD4100, interfaced through SPI, are highly versatile, multimodal sensor front ends, stimulating up to eight light emitting diodes (LEDs) and measuring the return signal on up to eight separate current inputs. There are a number of other evaluation platforms for these devices, including the EVAL-ADPD4100Z-PPG, optimized for photoplethysmograph applications, and the reference design CN0503, optimized for optical liquid analysis applications such as colorimetry, turbidity, and fluorescence. The EVAL-ADPD410x-ARDZ board come in handy for adapting these evaluation boards to meet specific application requirements, as well as for “ground up” development of new applications.
A no-OS device driver and an example program are provided, targeting the EVAL-ADICUP3029 platform. The ADICUP3029 example application uses the ADPD410x no-OS driver and emulates the Linux IIO framework through the tinyiiod daemon library. The application communicates with the host computer via the serial backend over a USB-UART physical connection. This facilitates rapid application development on a host computer, independent from embedded code development.
Similarly, utility software (such as iio_info, IIO Oscilloscope, PyADI-IIO, etc.) typically associated with Linux systems can be used with this no-OS implementation.
There are two shunt-configurable jumpers and three types of solder jumpers on the EVAL-ADPD410x-ARDZ board.
Correct Shunt Position | Layout Picture |
---|---|
Shorted Pin 1 and 2 | ![]() |
The onboard LED and photodiode are by default connected to LED1A and PD1A, respectively. When using external LEDs and sensors on this channel, make sure to remove this connection using jumper header P10.
Correct Shunt Position | Layout Picture |
---|---|
Shorted Pin 1 and 2, Shorted Pin 3 and 4, Shorted Pin 5 and 6 | ![]() |
Correct Shunt Position | Layout Picture |
---|---|
Shorted Pin 2 and 3 | ![]() |
Correct Shunt Position | Layout Picture |
---|---|
Shorted | ![]() |
Board | Shorted Resistors | Layout Picture |
---|---|---|
EVAL-ADPD410x-ARDZ (SPI) | Shorted R8 and R9, Open R6 and R7 | ![]() |
Below is a photo of the ADPD4100 (SPI) board with all the correct shunt and solder jumper connections.
Board | Shorted Resistors | Layout Picture |
---|---|---|
ADPD4101 (I2C) | Shorted R6 and R7, Open R8 and R9 | ![]() |
Below is a photo of the EVAL-ADPD4101-ARDZ (I2C) board with all the correct shunt and solder jumper connections.
The board has two parallel 18-pin, 100-mil pitch male connectors, which give access to the LED driver channels, the photodiode inputs, custom I/O pins from the AFE, and supply voltage for the LED. The user can use this along with the break-away protoboard to implement a custom circuit for testing. The pin assignment and functions are shown below.
Pins labeled XYC (where X refers to LED 1, 2, 3, or 4, and Y refers to channel A or B) denote connections to the LED cathode which are voltage protected via transistors to the ADPD4100/1 LED inputs (denoted by LXY). It is recommended to connect LED cathodes to these pins instead of connecting directly to LXY pins. PDXY (X refers to photodiode 1, 2, 3, or 4 and Y refers to channel A or B) pins denote photodiode signal inputs to the AFE. ACOM and BCOM pins refer to the common cathode bias output for photodiode sensors. These should be connected to the cathodes of photodiodes in the matching channel (for example, photodiodes connected to PD1A, PD2A, PD3A, and PD4A should have their cathodes connected to ACOM).
A simple circuit for testing LED driver outputs and photodiode current sensing using the break-away prototype board can easily be set up using optocouplers, as shown below.
Switch | Configuration |
---|---|
UART (S2) | USB |
POWER (S5) | WALL/USB |
There are two basic ways to program the EVAL-ADICUP3029 with the software for both boards.
Pre-built hex files can be found here:
The latest source code can be found here:
If this is your first time using CrossCore Embedded Studio, check the user guide to get started.
You can configure the default timeslots and other settings of the ADPD4100 or ADPD4101 using adpd410x_app_config.h.
output data rate = sample rate / (decimation factor - 1)
total number of pulses = ADC cycles X Number of Repeats
Here is an example timeslot setting used in the pre-built hex files:
To communicate with the device from the PC or laptop using IIO commands, install the Libiio package by following the guide in the repository: libiio/releases. The method is different for Windows or Linux operating systems.
The device must be able to create a context. Context creation in the software depends on the backend used to connect the device. This guide covers the device communication using the currently supported platform, a serial backend through a USB-UART connection. A simple way of checking, if the device is connected, is through the iio_info command. Specifically, it reports all IIO attributes of a detected device and context. To do this, simply enter the below command to a terminal or command line.
iio_info -u serial:<serial port>
Examples:
An example output of this command should look like the one below:
Using the iio_attr command from the Libiio package, you can read and configure the device.
The -c option of the iio_attr command allows reading of the individual raw channel outputs. Specifically, this reads the raw attribute of the specified channel of the specified device in the context of the specified URI. The command follows the format shown below.
iio_attr -u <URI> -c <DEVICENAME> <CHANNELNAME> <ATTRIBUTE> E.g., for a Windows Machine iio_attr -u serial:COM4 -c adpd410x voltage0 raw
An example output of this command should look like the one below:
The -d option of the iio_attr command allows reading or writing (only for specific items) of device attributes. For example, the sampling_frequency attribute is readable and writeable. The command to read and write to this attribute is shown below:
For reading, use iio_attr -u <URI> -d <DEVICENAME> <ATTRIBUTE> For writing, use iio_attr -u <URI> -d <DEVICENAME> <ATTRIBUTE> <VALUE> e.g., for a Windows Machine iio_attr -u serial:COM4 -d adpd410x sampling_frequency 40
An example output of this command should look like the one below:
In the Debug Panel, you can directly access the device/channel attributes and even the device registers. Remember to select first the adpd410x in the Device Selection section.
The Waveform panel, also known as the Capture window, displays the real-time waveform of selected photodiode channels of the ADPD410x. Select the desired channels to display in the upper left section. You can also edit the plot settings in the left section.
You cannot use the Debug Panel and the Waveform Panel simultaneously. Using the Waveform Panel will freeze the Debug Panel.
PyADI-IIO is a python abstraction module for ADI hardware with IIO drivers to make them easier to use. This module provides device-specific APIs built on top of the current libIIO python bindings. These interfaces try to match the driver naming as much as possible without the need to understand the complexities of libIIO and IIO.
Install PyADI-IIO using one of the methods in PyADI-IIO\\.
There are two example scripts found in the examples folder in PyADI-IIO. To run both examples, the following packages are required: pyqtgraph, scipy, PyQt5, matplotlib.
If you are using pip, you can install all of the PyADI-IIO, as well as the example script dependencies, by following these steps:
...\pyadi-iio\>pip install -r requirements.txt ...\pyadi-iio\>pip install -r examples/requirements_adiplot.txt ...\pyadi-iio\>python setup.py install
There are three example scripts for the ADPD410x found in pyadi-iio/. The first simply reads from the photodiode channels, the second plots specified photodiode channels, and the third tests the board separately, with its onboard LED and photodiode and with a test setup built from the simple example circuit from Prototyping Connectors.
For example 1, follow these steps:
...\pyadi-iio\examples>python adpd410x_example.py
For example 2, follow these steps:
...\pyadi-iio\examples>python adpd410x_plot.py
For example 3, follow these steps:
...\pyadi-iio\examples>python adpd410x_test.py
EVAL-ADPD410x-ARDZ Design & Integration Files
Receive software update notifications, documentation updates, view the latest videos, and more when you register your hardware. Register to receive all these great benefits and more!
End of Document