Skip to main content
Skip table of contents

2.8 - Digital I/O [U6 Datasheet]

The LabJack U6 has 20 digital I/O. The LabJackUD driver uses the following bit numbers to specify all the digital lines:

0-7 FIO0-FIO7
8-15 EIO0-EIO7
16-19 CIO0-CIO3
20-22 MIO0-MIO2  (Use 16-18 to operate on these)

On the U6/U6-Pro the digital lines CIO0-2 and MIO0-2 are shared. This means that changing the state of MIO0-2 will also change the state of CIO0-2. Therefore, anyone using two accessory boards with a U6 needs to be aware that they can use either CIO0-2 or MIO0-2, but cannot use both simultaneously.  MIO0-2 are used to control extended analog channels, so if you are reading extended channels from the Mux80 you do not want to use slots 8-10 on the RB12 (only use slots 0-7 & 11).

The "F", "E", "C", and "M" designators have little special meaning.  They are just arbitrary letters used to designate different groupings of digital I/O.  The generic designator DIOx is sometimes used to specify any digital I/O from 0 to 22, so for example an alternative name for EIO0 is DIO8.

The U6 has 8 FIO. The first 4 lines, FIO0-FIO3, appear both on the screw terminals and on the DB37 connector. The upper 4 lines appear only on the DB37 connector. By default, the FIO lines are digital I/O, but they can also be configured as up to 4 timers and 2 counters (see Timers/Counters Section of this User’s Guide). See our Configuration, Digital I/O, and Timers & Counters pseudocode pages for programming guidance.

The 8 EIO and 4 CIO lines appear only on the DB15 connector. See the DB15 Section of this User’s Guide for more information.

Up to 6 of the FIO/EIO lines can be configured as timers and counters. These are enabled sequential starting from FIO0-EIO0 (determined by pin offset). Thus, any sequential block of 1-6 digital I/O, starting from FIO0 to EIO0, can be configured as up to 4 timers and up to 2 counters.

MIO are standard digital I/O that also have a special multiplexer control function described in Section 2.6 above (AIN). The MIO are addressed as digital I/O bits 20-22 by the Windows driver. The MIO hardware (electrical specifications) is the same as the EIO/CIO hardware.

Subsections

Max Current & Overvoltage Protection

All the digital I/O include an internal series resistor that provides overvoltage/short-circuit protection. These series resistors also limit the ability of these lines to sink or source current. Refer to the specifications in Appendix A.

Tri-State I/O

All digital I/O on the U6 have 3 possible states: input, output-high, or output-low. Each bit of I/O can be configured individually. When configured as an input, a bit has a ~100 kΩ pull-up resistor to 3.3 volts (all digital I/O are 5 volt tolerant). When configured as output-high, a bit is connected to the internal 3.3 volt supply (through a series resistor). When configured as output-low, a bit is connected to GND (through a series resistor).

When only lightly loaded, an input terminal will measure about 3.3 volts if measured with a DMM, and thus it can be tough to use a DMM to tell whether a line is set to input or output-high.  A couple tips to tell the difference:

1. Look for a slight change where output-high measures a little higher. For example, a DMM might show 3.300 for input and 3.315 for output-high.

2. Add a load resistor. If you add a 100k from DIOx to GND, it should read about 1.6V for input and 3.3V for output-high.

5 Volt Output

The fact that the digital I/O are specified as 5-volt tolerant means that 5 volts can be connected to a digital input without problems (see the actual limits in the specifications in Appendix A). If 5 volts is needed from a digital output, consider the following solutions:

  • Use the LJTick-DigitalOut5V to convert a pair of digital outputs to 5V logic.

  • In some cases, an open-collector style output can be used to get a 5V signal.  To get a low set the line to output-low, and to get a high set the line to input (... note that this does not work with timer outputs, e.g. PWM, as they toggle the line between output-low and output-high).  When the line is set to input, the voltage on the line is determined by a pull-up resistor.  The U3 has an internal ~100k resistor to 3.3V, but an external resistor can be added to a different voltage.  Whether this will work depends on how much current the load is going to draw and what the required logic thresholds are. Say for example a 10k resistor is added from EIO0 to VS. EIO0 has an internal 100k pull-up to 3.3 volts and a series output resistance of about 180 ohms. Assume the load draws just a few microamps or less and thus is negligible. When EIO0 is set to input, there will be 100k to 3.3 volts in parallel with 10k to 5 volts, and thus the line will sit at about 4.85 volts. When the line is set to output-low, there will be 180 ohms in series with the 10k, so the line will be pulled down to about 0.1 volts.

  • A surefire way to get 5 volts from a digital output is to add a simple logic buffer IC that is powered by 5 volts and recognizes 3.3 volts as a high input. Consider the CD74ACT541E from TI (or the inverting CD74ACT540E). All that is needed is a few wires to bring VS, GND, and the signal from the LabJack to the chip. This chip can level shift up to eight 0/3.3 volt signals to 0/5 volt signals and provides high output drive current (+/-24 mA).

  • Note that the 2 DAC channels on the U3 can be set to 5 volts, providing 2 output lines with such capability.

Basic Tests

For basic testing use the Test Panel in LJControlPanel to change the state of a particular DIO while using a DMM to measure the voltage of that DIO versus GND. (Make sure DMM leads are properly connected.)

Below are typical voltages with:

  • No load

  • 1k resistor from DIO to GND

  • 1k resistor from DIO to VS

The values are a little different for FIO versus EIO/CIO as the latter has less series impedance.

FIO

FIO vs GND with no load

Input

3.28 volts

Output-low

0.02 volts

Output-high

3.30 volts

FIO vs GND with a 1k resistor installed FIO to GND

Input

0.025 volts

Output-low

0.015 volts

Output-high

2.2 volts

FIO vs GND with a 1k resistor installed FIO to VS

Input

5.0 volts

Output-low

1.7 volts

Output-high

3.9 volts

EIO/CIO

EIO/CIO vs GND with no load

Input

3.29 volts

Output-low

0.03 volts

Output-high

3.30 volts

EIO/CIO vs GND with a 1k resistor installed EIO/CIO to GND

Input

0.025 volts

Output-low

0.027 volts

Output-high

2.9 volts

EIO/CIO vs GND with a 1k resistor installed EIO/CIO to VS

Input

5.0 volts

Output-low

0.6 volts

Output-high

3.6 volts

Boot-Up Defaults

The power-up condition of the digital I/O can be configured by the user with the "Config Defaults" option in LJControlPanel.  From the factory, all digital I/O are configured to power-up as inputs. Note that even if the power-up default for a line is changed to output-high or output-low, there is a delay of about 5 ms at power-up where all digital I/O are in the factory default condition. In some systems this behavior can cause a problem.  For example, say the user has a device with a high impedance (low current) input that is watching for a logic high signal to indicate an alarm condition.  The user connects FIO0 from the U6 to this alarm input and the user also configures the power-up default of FIO0 to be output-low.  Whenever the U6 boots-up there will be some timewhere FIO0 is configured as input, meaning that it is weakly (~100k) pulled to 3.3V.  Since the alarm input in this example is high impedance, this 3.3V source could be enough to signal a high to the alarm input even though the 3.3V has 100k of source impedance.  If the alarm input draws less than 13 uA the voltage will stay at 2.0V or higher and might look like a logic high.

Some typical solutions:

  1. Add a 10k resistor from FIO0 to GND.  When FIO0 is set to input the 10k forms a voltage divider with the internal 100k and the resulting voltage on FIO0 is only about 0.3V.  When FIO0 is set to output-high, there is a still divider but only with the internal 550 ohms so the resulting voltage on FIO0 is about 3.1V.

  2. Along the same lines as #1, you can increase the current draw of the load.  Add a 10k resistor from the Alarm input to ground and it will have the same effect as in #1.

  3. Use the sinking configuration to control the load.  In this configuration you set FIO0 to Input to turn the load off, and set FIO0 to output-low to turn the load on.  See the Controlling Relays App Note.

  4. Use the LJTick-RelayDriver in between FIO0 and the load.  The LJTRD switch is on when FIO0 is set to output-high, and off when FIO0 is set to output-low or input.

  5. Add some sort of filter (e.g. RC) to the line such that it has to be in a given state for a long time before the output voltage rises/falls.

Why Are My Digital I/O "High" at Boot-Up?

The implied question here is "why do my DIO boot up as output-high from the factory".  The answer is that per the "Boot-Up Defaults" section above the factory default state for all DIO is input, but since inputs have a 100k internal pull-up they will read 3.3 volts if only lightly loaded.  So likely you are seeing that the state of your DIO is input, not output-high.  Also see the "Tri-State I/O" section above.

Making An Input Read Low By Default

If you want a floating digital input to read low, an external pull-down resistor can be added to overpower the internal 100k pull-up.  4.7k to 22k would be a typical range for this pull-down, with 10k being a solid choice for most applications.

Software Interface

The low-level Feedback function writes and reads all digital I/O. For information about using digital I/O under the Windows LabJackUD driver, see Section 4.3.5. See Section 3.0 for timing information.

Bit-Packed Integers

Many function parameters contain specific bits within a single integer parameter to write/read specific information. In particular, most digital I/O parameters contain the information for each bit of I/O in one integer, where each bit of I/O corresponds to the same bit in the parameter (e.g. the direction of FIO0 is set in bit 0 of parameter FIODir). For instance, in the low-level function ConfigU3, the parameter FIODirection is a single byte (8 bits) that writes/reads the power-up direction of each of the 8 FIO lines:

  • if FIODirection is 0, all FIO lines are input,

  • if FIODirection is 1 (20), FIO0 is output, FIO1-FIO7 are input,

  • if FIODirection is 5 (20 + 22), FIO0 and FIO2 are output, all other FIO lines are input,

  • if FIODirection is 255 (20 + … + 27), FIO0-FIO7 are output.

Duplicated Terminals (FIO0-FIO3)

FIO0-FIO3 appear on the built-in screw-terminals and also on the DB37 connector.  You should only connect to one or the other, not both at the same time.

To prevent damage due to accidental short circuit, both connection paths have their own series resistor.  All FIO lines have a 470 ohm series resistor (that is included in the 550 ohm total impedance), and in the case of FIO0-FIO3 the duplicated connections each have their own series resistor, so if you measure the resistance between the duplicate terminals you will see about 940 ohms.

App Notes

See our Digital I/O application notes for additional relevant information.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.