View as PDF

# Features

• Source Measure channels

• ±10 V source

• Up to 200mA Source Current / Sink Current

• Shutter Control

• Digital IO pins

• I2C extension

• USB & Network control

• Simple text-based interface

# Applications

The X100 can be used for any measurement where you require both a Source and a current measurement. This makes it useful in many situations, including but not limited to:

• Photovoltaics

• LEDs and OLEDs

• Transistors

• Sheet resistance

• Electrochemistry

• Chemical and biological sensing

• Battery testing

# Description

The core of an X100 is a low-power 32-bit Microcontroller with firmware specifically designed to meet the standards of the scientific community. The X100 is also primed with high-resolution ADC and DAC controllers to enable high resolution readings of both Voltage and Current. This potent combination of hardware and software is enabling scientists around the world to accelerate their work.

# Requirements

There are not many requirements to use the X100. The most important requirements are in regard to accessing the device.

The X100 also requires another device to control the functionality of the board, which can be fulfilled by any device that supports either USB serial ports, such as, a Windows, Mac OSX or Linux device. A device that can connect to others over a TCP socket connection can also be used.

## Power

The X100 requires an 18V power supply to the barrel jack onboard to power the analogue circuitry onboard. A power supply fitting this description should be provided along with the X100 so this requirement should remain satisfied unless you lose access to the power supply. The USB connection on the X100 does not draw any power and as such even if you are only using the digital functionality of the X100 you will need to connect the full power supply.

## Network

The X100 should be connected to a network supporting 10/100Mbps transmission to operate over the network. DHCP must also be running on the network, and available to the X100 for the device to operate properly over the network. Although the majority of networks operate DHCP, to check if DHCP is running on your network you should attempt to connect a device to the network as you would the X100. If the device automatically obtains an IP address then DHCP is working correctly.

## USB

To use USB on the Xtralien, your controlling device should support USB communication. A USB-B cable is supplied, which will support the majority of computers on the market. The X100 should support every USB version, however, we recommend using a USB 2.0 port or above, as this will provide the best speeds for you.

# Getting Started

When using the X100 there are a few things to keep in mind so that you can make the most of your time.

## Power

The board takes an 18V input that can supply a minimum of 1.5A, this is required for the board to be powered. Because there is no power connection for the USB, the board will not power on if only USB is connected.

Ranges allow for an order of magnitude increase in measurement accuracy and precision. There are currently 5 ranges available, between 1 and 5.

When using any range on a SMU you should set the range accordingly, both in hardware and software. Changing the range is important because every range is calibrated seperately, enabling maximum accuracy and precision when using your X100.

Changing the header is simple and consists of either moving the red header to the correct range, or switching on all of the switches up until the intended range.

## Connecting

To connect to the device please ensure that the device is powered from the provided power supply, then either connect a USB cable between the device and your computer.

### Ethernet

To connect to the device over Ethernet you need to plug an Ethernet (RJ-45) cable to the same network as the device that you wish to access. When turned on the device will attempt to connect to the network automatically and will display an IP address on the screen if it succeeds.

If the device fails to connect you should contact your local network manager and ask them about setting up DHCP on your network, although this is usually already in place.

You can then connect using any standard TCP socket. After this, communication with the device is conducted through ascii-encoded strings over the TCP socket.

If you cannot connect to the device over Ethernet please ensure that the device and your computer are on the same network. Please also ensure that the Ethernet cable isn’t connected directly between the device and your computer, unless you are comfortable configuring your computer to act as a router.

### USB

When connecting over USB on a Windows device you should make sure that the Drivers are installed. You can download the drivers by visiting http://files.ossila.com/X100-Driver.zip, after which you should extract the zip file and run the installer located inside. This will install drivers from the Arduino environment, which is compatiable with the device.

For Mac OSX and Linux users you should simply be able to connect without the need to download or install any drivers.

Afterwards, any drivers have installed you should be able to connect the device to your computer using the included Micro-USB cable.

On Windows the device should appear as a Serial Device, usually as a COM port, and can be accessed as a Serial port, using ascii-encoded strings. On Mac OSX the device will appear as a Serial Device, and is usually accessible as a file such as /dev/cu.usbmodem1411. On most Linux distributions the device will appear as a file accessible at a path similar to /dev/TTYACM0.

# Troubleshooting

Before we send you your X100 we run extensive tests to verify that it is stable and working. However sometimes you may have issues connecting to and using the X100. Most of the issues that may arise will be detailed here, however, if there is any issue that isn’t detailed that you encounter then please don’t hesitate to contact us and we will respond as soon as possible.

## Network

Due to a large variety of network conditions, it is hard to test how the device will work in every environment. During internal testing we have found that most SME and university networks may work automatically. However, if this is not the case then you will likely need to contact your local network administrator.

### My device is showing an IP address of 0.0.0.0 on the screen

This will happen if the device detects a working Ethernet connection, but cannot connect to any network successfully. The usual cause for this will be where the MAC address needs to be reistered with your internal network before an IP address will be assigned to you. If you can do this yourself you will need to use the MAC address shown on the screen when there is no Ethernet cable connected.

This may also happen if you attempt to connect an Ethernet cable directly between your computer and the X100 unless your computer is set to act as a router.

### My device does not connect to the network

When the board is not connecting to the network it is usually because no network is detected. The likely cause of this is that the Ethernet cable is not securely connected to either the device, or to the Ethernet port on the network.

It is also possible that this issue is due to a faulty cable, so please check the Ethernet cable that you use is working with another device.

## USB

The USB connection capabilities of the board should work easily for most. However, some additional steps may be required in some scenarios.

If USB does not work when connected there may be a few possible issues.

### The USB cable is not connected to a working USB port

If the USB cable is not connected then to remedy the issue please ensure that the cable is securely connected at both ends.

### The device is not detected

When using Windows, if the drivers are not installed the board may be unrecognized, and as such you may be unable to communicate with it. To remedy this issue you should install the drivers, as mentioned in the Getting Started section. You may need administrator permisssions to install the drivers correctly, so please ensure that the driver installation succeeded before moving further.

This has not appeared to be an issue for either Mac OSX or Linux environments so far, however if this changes please do not hesitate to contact us.

### The cable is defective

Although we test every cable before dispatch, there may be some instances where a faulty cable arrives with your X100. If this happens then we apologise profusely. Any micro-USB cable should work in the interim, but please contact us if neccesary.

# Hardware Documentation

## Source Measure Units SMU1 & SMU2

The source measure units output a voltage and then measure both the voltage and current. The output voltage is always measured on the output to the BNC rather than assuming it is at the set voltage in case of any load effects (for example short circuiting the output or low impedances causing a small drop in voltage). Each source measure unit has manually selectable ranges so that both large and small currents can be measured with accuracy.

### Voltage Source

Range Accuracy Resolution Noise
± 10V 10mV 333 µV 1.7E-4

### Voltage Sense

The Voltage sense is a useful way to be able to discover how much voltage is being sourced from the SMU.

Range Accuracy Resolution Noise
± 10V 10 mV 50 µV 1.0E-5

### Current Sense

Range Max Current Accuracy Resolution Noise Burden
1 ± 100 mA ± 100 µA 10 µA 1 µA < 10 mV
2 ± 10 mA ± 10 µA 1 µA 100 nA < 10 mV
3 ± 1 mA ± 1 µA 100 nA 10 nA < 10 mV
4 ± 100 µA ± 100 nA 10 nA 1 nA < 10 mV
5 ± 10 µA ± 10 nA 10 nA 0.1nA < 10 mV

# Function Documentation

The firmware of the X100 works by registering functions onto a router that works by registering functions to strings, which are called when the string is recieved.

The command parser uses a customised version of the standard printf format that you may be familiar with from other languages. It is restricted to certain types, to enable ease of programming.

## Expected response formats

Any response that returns is expected to return the newline character (\n) after the data has finished transferring.
Any command that does not return any data will also not return a newline.

### Integer

An Integer is any whole number, e.g. 1, 2, 3.

Where Integer types are accepted or returned there is usually a wrapping that applies. This means that if you attempt to set range 7 when there are 6 ranges then you will set range 1, 7 modulo 6 = 1.

### Float

Floats are Floating point numbers, usually represented as a C double type in firmware.
When represented in text this is usually in Scientific notation. The scanf %g format.

### Boolean

The Boolean type is special because there isn’t a C scanf format equivalent. There are multiple types that can represent a Boolean.

Truthy Falsey
true false
on off
1 0

### Array

Arrays in CLOI are special in that they are represented using MATLAB’s array syntax. This means that Arrays are within square brackets and each entry is seperated by a semicolon.

### Matrix

In CLOI a Matrix is denoted using standard MATLAB Matric syntax. This means that the Matrix seperates entries using a semicolon, and seperates the properties of an entry with commas. Unless otherwise stated, it can be assumed that when a Matrix is returned it will be a Matrix of Float types.

### String

Due to CLOI’s syntax, when a String is specified as an input it is a series of characters that end with a space character. Any other character should be accepted where a String is specified. When a String is specified as a return format any String of characters can be returned.

### Interactive

Some commands provide an Interactive response. As this changes between commands, the format will be specified in the description for each command.

### None

When the documentation tells you that a function returns None, that simply means that the function will not return any data. This includes a newline character, as mentioned above.

The IP address type is simple, it is a standard IPv4 address type, (Integer.Integer.Integer.Integer). Where each Integer is between 0 and 255.

IPv6 addresses are not supported so please ensure that if using an IPv6 network you also allow IPv4-only devices.

### Version

The Version type is the way of describing the version number of a module, and uses the semantic versioning syntax to enable peace of mind when deciding wether to upgrade.

The full description of semantic versioning can be found at the link http://semver.org.

## CLOI

CLOI is the Command Language for Open Instruments, and is the core that runs the X100.

The main module provides the interface to all of the other instruments in the system, including the SMUs onboard, the Voltage senses and the trigger.

All functions that are directed towards CLOI have the prefix cloi, which has been included in the functions below.

The list of supported functions are below, with descriptions on the intended usages of each.

cloi hello

Arguments
None

Expected response format - String

Returns a set String, which is currently “Hello World\n”

cloi version

Arguments
None

Expected response format - Version

Returns the version of the cloi module, this is different from the top-level function version, which will return the overall version of the firmware on the device.

cloi get precision

Arguments
None

Expected response format - Integer

Returns the number of digits precision for Float output. It is recommended that this does not fall below 5 digits.

cloi set precision Integer

Arguments

Integer - Number of digits to set

Expected response format - Integer

Sets the number of digits precision for Float output. It is recommended that this does not fall below 5 digits.

## SMU

The SMU module is the driver for both of the SMUs onboard and is activated by the either the prefix smu1 or smu2.

A supported list of commands can be found detailed below using the smu1 prefix. The same commands can be used with smu2 by changing the prefix to match.

smu1 get voltage

Arguments
None

Expected response format - Float

Get the voltage that the smu last attempted to set. This is not the voltage that is output but the voltage that is attempted to be output.

smu1 get range

Arguments
None

Expected response format - Integer

Get the currently set range.

smu1 get osr

Arguments
None

Expected response format - Integer

Get the Over-Sample Rate. This is the count of samples that are taken per measurement and the actual count of measurements can be calculated as 2^(6 + osr).

smu1 get limiti

Arguments
None

Expected response format - Float

Returns the Float value of the current limit.

smu1 get limitv

Arguments
None

Expected response format - Float

Returns the Float value of the voltage limit.

smu1 get filter

Arguments
None

Expected response format - Integer

Get the number of measurements over which to average to get a datapoint. This is in addition to the OSR such that a filter value above 1 results in filter × 2^(6 + osr).

smu1 get enable

Arguments
None

Expected response format - Boolean

Returns a Boolean that shows if the smu is enabled.

smu1 get delay

Arguments
None

Expected response format - Float

Returns a Float that shows the additional delay (in microseconds) between setting a voltage and measuring a point.

smu1 get offset

Arguments
None

Expected response format - Float

Returns a Float showing the manual offset applied to the current calculation before returning results.

smu1 set voltage Float

Arguments

Float - Voltage to set

Expected response format - None

Set the given voltage onto the smu.

smu1 set range Integer

Arguments

Integer - Range to set

Expected response format - None

Set the given range for the given smu.

smu1 set osr Integer

Arguments

Integer - OSR to set

Expected response format - None

Set the given OSR for the given smu.

smu1 set limitv Float

Arguments

Float - Voltage limit to set

Expected response format - None

Set the given voltage limit for the given smu.

smu1 set limiti Float

Arguments

Float - Current limit to set

Expected response format - None

Set the given current limit for the given smu.

smu1 set filter Integer

Arguments

Integer - OSR to set

Expected response format - None

Set the given number of points to average for when running any measurement.

smu1 set enable Boolean

Arguments

Boolean - Enable/Disable the SMU

Expected response format - None

Either send a Truthy value to enable to smu, or a Falsey value to disable.

smu1 set delay Float

Arguments

Float - Microseconds to delay the measurement

Expected response format - None

Set the delay that occurs between setting a voltage and taking a measurement.

smu1 set offset Float

Arguments

Float - Amount to offset by

Expected response format - None

Set the offset that is applied to the current values when taking a measurement.

smu1 measure

Arguments
None

Expected response format - [Float,Float] - (Matrix)

Returns a 1×2 Matrix of Float values denoting Voltage and Current respectively.

smu1 measure Integer

Arguments

Integer - Number of points to measure (N)

Expected response format - [Float,Float;…;Float,Float] - (Matrix)

Returns an N×2 Matrix of Float values denoting Voltage and Current respectively.

smu1 measurev

Arguments
None

Expected response format - [Float] - (Array)

Returns the measured voltage.

smu1 measurev Integer

Arguments

Integer - Number of points to measure (N)

Expected response format - [Float;…;Float] - (Array) - (Array)

Returns an Array of N length of measured voltages.

smu1 measurei

Arguments
None

Expected response format - [Float] - (Array)

Returns the measured current.

smu1 measurei Integer

Arguments

Integer - Number of points to measure (N)

Expected response format - [Float;…;Float] - (Array) - (Array)

Returns an Array of N length of measured currents.

smu1 oneshot Float

Arguments

Float - Voltage to set

Expected response format - Float

Set the voltage given onto the smu.

smu1 setvmeasure Float

Arguments

Float - Voltage to set

Expected response format - Float

Set the voltage given onto the smu. This is an Alias for smu1 oneshot Float

smu1 sweep Float Float Float

Arguments

Float - Start voltage

Float - Voltage increment

Float - End Voltage

Expected response format - [Float,Float;…;Float,Float] - (Matrix)

Sweeps from the start voltage to the end voltage inclusive at the given increments. Returns a Matrix of Floats that represent the Voltage and Current at each point.

smu1 sweep Float Float Float d

Arguments

Float - Start voltage

Float - Voltage increment

Float - End Voltage

Expected response format - [Float,Float;…;Float,Float] - (Matrix)

Sweeps from the start voltage to the end voltage inclusive at the given increments. Afterwards the device sweeps the reverse and returns both sets as a single Matrix of Float values represent the Voltage and Current at each point respectively.

## Vsense

The VSense module is the driver for both of the VSense devices onboard and is activated by the either the prefix vsense1 or vsense2.

A supported list of commands can be found detailed below using the vsense1 prefix. The same commands can be used with vsense2 by changing the prefix to match.

vsense1 get osr

Arguments

None

Expected response format - Float

Get the currently set osr.

vsense1 set osr Integer

Arguments

Integer - OSR to set

Expected response format - Float

Set the OSR to the provided Integer.

vsense1 measure

Arguments
None

Expected response format - [Float] - (Array)

Measure the voltage.

vsense1 measure Integer

Arguments

Integer - Number of points to measure

Expected response format - [Float;…;Float] - (Array) - (Array)

Measure a given number of voltages.

## Shutter

The X100 has one BNC connected to a digital shutter line on the core ARM chip that when on will produce a 5 Volt signal. This BNC connector is also linked to the trigger functionality and as such only one can be used at a time.

shutter Boolean

Arguments

Boolean - Set the shutter to the given value

Expected response format - None

Sets the shutter to either On (5V) or Off (Ground)

## Trigger

The trigger functionality allows for some level of control over the synchronisation of multiple devices.

trigger wait

Arguments
None

Expected response format - None

This command accepts no arguments and returns no value.

When running the command the device will block, not allowing any further commands to run until the trigger line changes, either from low to high or high to low. This allows a user to send another command that will be run whenever the trigger line changes. In combination with the shutter commands on another board it is possible to use this behaviour to synchronise actions on multiple X100 boards.

The trigger line is a digital line and conflicts with the shutter, hence the modules cannot both be used at the same time.

## Ethernet

The ethernet onboard the X100 has some basic CLOI support to enable access to the most commonly used functionality, such as resending a DHCP request.

eth0 connect

Arguments
None

Expected response format - None

This command will start a DHCP request to request a new IP address. The function returns no value as the request is run through an internal command, however, an easy way to check if this function succeeded is to check for an IP address.

eth0 ip

Arguments
None

Expected response format - 192.168.1.2

If the ethernet is disconnected, or if the board has not been assigned an IP address then the returned result will likely be either 0.0.0.0 or 255.255.255.255, which are both invalid addresses and as such indicate failure to connect.

eth0 mac

Arguments
None

Expected response format - AA:BB:CC:DD:EE:FF

Returns the MAC address for the board in standard hex-pairs format.

## EEPROM

This module provides low-level access to the EEPROM on board the X100.

eeprom size

Arguments
None

Expected response format - Integer

Returns the size of the onboard EEPROM in Bytes.

eeprom get Integer

Arguments

Integer - EEPROM index

Expected response format - Integer

Returns the unsigned 8-bit Integer value stored at the given Integer memory index.

## IO interface

Due to the intersections between the controller that we use and the Arduino community, some functions been added to allow compatiability with some basic arduino functions.

io digital read Integer

Arguments

Integer - Arduino-mapped pin

Expected response format - Boolean

Read the value on the given digital input pin.

io digital write Integer Boolean

Arguments

Integer - Arduino-mapped pin

Boolean - Value to set

Expected response format - None

Set the given value onto the given digital pin.

io analog read Integer

Arguments

Integer - Arduino-mapped pin

Expected response format - Float

Read the current analog value for the given pin.

io analog write Integer Float

Arguments

Integer - Arduino-mapped pin

Float - Value to set

Expected response format - None

Set the given value onto the given analog pin.

io set string Integer

Arguments

String - Pin mode

Integer - Arduino-mapped pin

Expected response format - None

Set the pin to the given mode, out of the following options.

• output

• input

• pullup

In the above, pullup reflects the INPUT_PULLUP option in arduino.

## Top level commands

All of the top level commands featured here do not belong to any specific module and so have been attached to the top level.

version

Arguments
None

Expected response format - Version

Returns the firmware version. This is the definitive version number, as some of the other modules may revert between firmware updates to remove any issues as they are discovered.

serial

Arguments
None

Expected response format - String.

This returns the serial No. of the board in hexadecimal bytes.

product id

Arguments
None

Expected response format - String.

Returns the product ID of the board "X-100".

board no

Arguments
None

Expected response format - String.

Returns the number of the board (xxx).

temp read

Arguments
None

Expected response format - String.

Returns the temperature measurement of the onboard sensor in 0C.

reset

Arguments
None

Expected response format - None

Warning: This will reset all variables that have not been saved

Reset the board remotely.

# Introduction to programming with the X100

Programming the X100 is simple in many programming langauges, with examples currently provided for Python, LabView, Matlab and Java, with more under development.

The core concept when communicating with the X100 device is that all data is communicated using simple ASCII strings, over both a network connection and the serial connection.

When using the Serial connection with windows please note that the drivers must be installed.

## Python

### The cloi library

We have created a library for Python that enables a very simple, powerful interface to the X100, enabling features like automatically returning data in a useful format, as well as providing a simple way to write code that executes asynchronously.

This allows you to write code that runs multiple experiments at a single time from a single program.

### Hello World from CLOI

A simple hello world example for communication with the X100 is below and utilises the cloi library that we have created to jumpstart your workflow.

### Asynchronous Hello World

To demonstrate the simple asynchronous functionality that we have built into the cloi library, below is a Hello world example that will run in the background.

## Matlab

### Measuring a Voltage and Current

Below is a simple Matlab example that provides an instance of measuring setting a voltage and measuring both Voltage and Current.