![]() |
Linduino
1.3.0
Linear Technology Arduino-Compatible Demonstration Board
|
Top-Level Linduino Firmware for EasySMU: I2C Address Translator Demonstration and a Simple Multi-Channel Source Measurement Unit. More...
Top-Level Linduino Firmware for EasySMU: I2C Address Translator Demonstration and a Simple Multi-Channel Source Measurement Unit.
User Guide
Schematic
Top-Level Linduino Firmware for EasySMU
EasySMU Class Reference
EasySMU_IOpanel Class Reference
EasySMU Webpage
EasySMU: I2C Address Translator Demonstration and a Simple Multi-Channel Source Measurement Unit LTC4316: Single I2C/SMBus Address Translator LT1970A: Power Op Amp with Adjustable Precision Current Limit LT5400: Quad Matched Resistor Network LTC2655: Quad I2C 16-/12-Bit Rail-to-Rail DACs with 10ppm/°C Max Reference LTC3265: Low Noise Dual Supply with Boost and Inverting Charge Pumps LTC2051: Dual Zero-Drift Operational Amplifier LT3010: 50mA, 3V to 80V Low Dropout Micropower Linear Regulator LT1991: Precision, 100µA Gain Selectable Amplifier LTC6655: 0.25ppm Noise, Low Drift Precision Reference LTC2485: 24-Bit ΔΣ ADC with Easy Drive Input Current Cancellation and I2C Interface EasySMU is a single-channel ±12V/40mA programmable-voltage/programmable-current source with accurate voltage/current measurement capability. The LTC4316 I2C Address Translator enables up to eight independent EasySMUs to be controlled by a single I2C master. In this demonstration, each EasySMU board contains four I2C slaves and the associated components to implement a single-channel ±12V/40mA programmable- voltage/programmable-current source. The LTC4316 translates the I2C addresses of each EasySMU to a unique set of addresses, enabling up to eight EasySMU boards to be stacked on a single Linduino (I2C master). In this form, it resembles a multi-channel automated test system. Alternatively, an optional touchscreen allows the user to interactively control up to four channels, forming a compact multi-channel programmable-voltage/programmable-current bench source for lab testing, powered from a single 12V AC wall adapter. The primary purpose of the EasySMU is to demonstrate the LTC4316 I2C Address Translator. The programmable-voltage/programmable-current source and meter also provide a convenient demonstration of the associated components: LT1970A, LT5400-3, LTC2655-H, LTC3265, LTC2051, LT3010, LT1991, LTC6655, and LTC2485. While the EasySMU is not designed to demonstrate the ultimate performance that can be obtained from each of those components, the EasySMU does provide impressive results from a reasonably simple circuit.
Copyright 2018(c) Analog Devices, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Firmware Loaded on Linduino to Control EasySMU Shields
Definition in file EasySMU_Run.ino.
Go to the source code of this file.
Functions | |
static void | DelayAndUserInput (uint32_t delay) |
Wait for 'delay' milliseconds while handling button presses on the touchscreen. More... | |
static int16_t | getToken (char strData[], const char chrCommands[][3], int16_t sizeSerialCommands) |
Check if first three characters match a three character command in chrCommands. More... | |
boolean | ReadLine (char *serialData) |
Read available characters from the serial port and append the result to the *serialData string. More... | |
static void | ParseSerialData (char chrSerialData[]) |
Checks for the following valid commands from the serial interface and performs the corresponding actions. More... | |
static void | SetVoltage () |
Check if the user is pressing the V+, V++, V-, or V– buttons. If so, adjust voltage. More... | |
static void | SetCurrent () |
Check if the user is pressing the I+, I++, I-, or I– buttons. If so, adjust the current. More... | |
static void | setup () |
Initialize the Linduino, EasySMU, screen, etc. More... | |
static void | loop () |
Arduino/Linduino loop that runs continuously. More... | |
Macros | |
#define | I2C_FT6206_ADDR0 0x38 |
touchscreen I2C address More... | |
#define | _BUTTON_WAIT_TIME 500 |
Give the user 500ms to adjust a value before setting the output. This allows the user to adjust a value before it shows up at the output. More... | |
#define | _BUTTON_TIME_1 4000 |
Touchscreen step size increases after _BUTTON_TIME_1 milliseconds. This allows faster user adjustment when the button is held longer. More... | |
#define | _BUTTON_TIME_2 2000 |
Touchscreen step size increases after _BUTTON_TIME_2 milliseconds. This allows faster user adjustment when the button is held longer. More... | |
#define | _VBUTTON_STEP_1 3 |
Voltage step size after _BUTTON_TIME_1. More... | |
#define | _VBUTTON_STEP_2 1 |
Voltage step size after _BUTTON_TIME_2. More... | |
#define | _IBUTTON_STEP_1 0.0000030 |
Current step size after _BUTTON_TIME_1. More... | |
#define | _IBUTTON_STEP_2 0.0000010 |
Current step size after _BUTTON_TIME_2. More... | |
#define | SERIAL_COMMANDS_ERROR -1 |
#define | SERIAL_COMMANDS_SIZE_0 2 |
#define | SERIAL_COMMANDS_SIZE_1 9 |
#define | SERIAL_COMMANDS_SIZE_LCD 2 |
#define | SERIAL_COMMANDS_SIZE_12 6 |
#define | SERIAL_COMMANDS_SIZE_121 2 |
#define | SERIAL_COMMANDS_SIZE_122 2 |
Variables | |
EasySMU | SMU [8] |
Array of eight EasySMU instances that hold state for up to eight stacked EasySMU shields. More... | |
EasySMU_IOpanel | IOpanel |
IOpanel provides an interface between the EasySMU hardware and a touchscreen. More... | |
char | serial_data [100] |
Used to buffer data from serial interface. More... | |
|
static |
Wait for 'delay' milliseconds while handling button presses on the touchscreen.
delay | Number of milliseconds to wait in this loop |
Definition at line 577 of file EasySMU_Run.ino.
|
static |
Check if first three characters match a three character command in chrCommands.
strData | string to be checked to see if a match is found in chrCommands |
chrCommands | list of valid three character commands |
sizeSerialCommands | the number of commands in chrCommands |
Definition at line 164 of file EasySMU_Run.ino.
|
static |
Arduino/Linduino loop that runs continuously.
Definition at line 638 of file EasySMU_Run.ino.
|
static |
Checks for the following valid commands from the serial interface and performs the corresponding actions.
Where indicated, 'x' is substituted with 0-7, a number corresponding to the appropriate channel.
Command | Description |
---|---|
*RST | Reset to power-up state |
*IDN or *IDN? | Return ID string that includes revision, channels that are present, serial number of each channel, etc. |
LCD:ENA | Enable the LCD/TFT display (default) |
LCD:DIS | Disable the LCD/TFT display. This might be useful to reduce noise at the output caused by SPI communication with the screen. |
CHx:DIS | Disable the output to put it in a relatively high-impedance state. |
CHx:ENA | Enable the channel. (Default state) |
CHx:VOL value | Set the output voltage to 'value' in volts |
CHx:CUR value | Set the output current to 'current' in amps. If current is preceeded by '+' or '-' it will force source or sink only operation. |
CHx:CAL:SET | Calibration routine. (Factory use only. Disabled by default.) |
CHx:CAL:RES | Restore factory calibration. (Only useful if the user has overwritten the calibration, which is not possible without editing the firmware.) |
CHx:MEA:VOL | Returns the measured output voltage in volts. |
CHx:MEA:CUR | Returns the measured output current in amps. |
chrSerialData | data received from the serial interface |
Definition at line 235 of file EasySMU_Run.ino.
boolean ReadLine | ( | char * | serialData | ) |
Read available characters from the serial port and append the result to the *serialData string.
serialData | string used to store all collected data collected since the last '\n' or '\r' |
Definition at line 187 of file EasySMU_Run.ino.
|
static |
Check if the user is pressing the I+, I++, I-, or I– buttons. If so, adjust the current.
Definition at line 531 of file EasySMU_Run.ino.
|
static |
Initialize the Linduino, EasySMU, screen, etc.
Definition at line 593 of file EasySMU_Run.ino.
|
static |
Check if the user is pressing the V+, V++, V-, or V– buttons. If so, adjust voltage.
Definition at line 486 of file EasySMU_Run.ino.
#define _BUTTON_TIME_1 4000 |
Touchscreen step size increases after _BUTTON_TIME_1 milliseconds. This allows faster user adjustment when the button is held longer.
Definition at line 129 of file EasySMU_Run.ino.
#define _BUTTON_TIME_2 2000 |
Touchscreen step size increases after _BUTTON_TIME_2 milliseconds. This allows faster user adjustment when the button is held longer.
Definition at line 131 of file EasySMU_Run.ino.
#define _BUTTON_WAIT_TIME 500 |
Give the user 500ms to adjust a value before setting the output. This allows the user to adjust a value before it shows up at the output.
Definition at line 126 of file EasySMU_Run.ino.
#define _IBUTTON_STEP_1 0.0000030 |
Current step size after _BUTTON_TIME_1.
Definition at line 137 of file EasySMU_Run.ino.
#define _IBUTTON_STEP_2 0.0000010 |
Current step size after _BUTTON_TIME_2.
Definition at line 139 of file EasySMU_Run.ino.
#define _VBUTTON_STEP_1 3 |
Voltage step size after _BUTTON_TIME_1.
Definition at line 133 of file EasySMU_Run.ino.
#define _VBUTTON_STEP_2 1 |
Voltage step size after _BUTTON_TIME_2.
Definition at line 135 of file EasySMU_Run.ino.
#define I2C_FT6206_ADDR0 0x38 |
touchscreen I2C address
Definition at line 59 of file MasterAddressConstants.h.
#define SERIAL_COMMANDS_ERROR -1 |
Definition at line 215 of file EasySMU_Run.ino.
#define SERIAL_COMMANDS_SIZE_0 2 |
#define SERIAL_COMMANDS_SIZE_1 9 |
#define SERIAL_COMMANDS_SIZE_12 6 |
#define SERIAL_COMMANDS_SIZE_121 2 |
#define SERIAL_COMMANDS_SIZE_122 2 |
#define SERIAL_COMMANDS_SIZE_LCD 2 |
EasySMU_IOpanel IOpanel |
IOpanel provides an interface between the EasySMU hardware and a touchscreen.
Definition at line 156 of file EasySMU_Run.ino.
char serial_data[100] |
Used to buffer data from serial interface.
Definition at line 160 of file EasySMU_Run.ino.
EasySMU SMU[8] |
Array of eight EasySMU instances that hold state for up to eight stacked EasySMU shields.
The I2C addresses of each board are configured while calling these constructors.
Definition at line 143 of file EasySMU_Run.ino.