Resolving USB Conflicts with Virtual COM Ports

If you run multiple USB devices that operate as virtual RS232 COM ports (the ubiquitous serial port standard) on Windows, you may have run into problems with conflicts between devices. An application may connect to the appropriate device when it’s the only one connected, only to “get confused” if there is another device sharing the PC. Happily, there are a few simple things you can try that will often resolve the problem.

9103s and Arduinos Playing Nice Together

9103 and Arduino USB Devices

A 9103 Picoammeter and Arduino

To most Windows applications, virtual COM ports (VCPs) all look the same. An application can open a port and and attempt to communicate with the connected device, but since there’s no fixed protocol – each device speaks its own “language”, any message sent can have undetermined effects if the device you’re communicating with is not the one your were expecting. Some applications simply connect to the first COM port available, other’s may provide a way to select the COM port your device is connected to – but you’re still responsible for figuring that out.

When manufacturers produce hardware for PCs they can apply for unique vendor ad product IDs for their device, and there are ways for applications to safely query these. But that only solves part of the problem. Many devices use third-party USB chips and drivers from companies like FTDI, so they share the same IDs. These devices look the same to a Windows client application, or to a person perusing the Device Manager in Control Panel.

RBD’s own 9103 Picoammeter utilizes FTDI’s popular USB VCP chips, as do many versions of the popular Arduino microcontroller boards, so these two sets of devices can be confused by client applications when used on the same PC. And s it turns out, they are often used together. Here are a few tricks for getting these device to play nice together.

Solution 1: Connect Each Device and Run Each Client in Order

Many applications require you to specify the port for the selected device. Others (like Actuel for the 9103) poll the COM ports in numerical order and check and connect to the first available. If these devices first check the vendor and product ID (like the 9103), they will at least skip ports that do not match. But they cannot distinguish between two devices using the same USB chip (like FTDI’s). Setting up a device connection / application order can solve this.

In the case of a 9103 / Arduino conflict, remove all other devices, then plug in the 9103 and power it on. Next run the Actuel software. The software will find and take control of the 9103 port, and once assigned, you can safely plug in the next device and run its client.

Another order might make more sense for your particular application. Experiment with your configuration, and there are more than two devices, try getting two working first. Document the process and just make sure it’s followed anytime you reboot / power-on.

Solution 2: Change the COM Port Number for a Particular USB Port

You can force Windows to use a different COM port number than the one automatically assigned. This may help with applications that select the lowest numbered port.

For example, if the 9103 is connected to COM4 and another FTDI device is on COM3, the 9103 client software may incorrectly select the device on COM3. Setting the 9103 to COM2 may allow you to now connect the devices and run the client applications in any order, depending on how those other devices / applications behave. Some experimentation may be necessary.

With the 9103 connected and turned on, run Control Panel / Device Manager, and find the selection for “Ports (COM and LPT)”, click and you should see an entry for “USB Serial Port (COM4)” (the COM# may be different of course). Double-click for properties.

The COM port settings for the 9103 USB VCP

The COM port settings for the 9103

Now select the “Port Settings” tab, and click the “Advanced…” button. From this window you can select a new COM port assignment:

Choosing a COM port for the 9103

Choosing a COM port for the 9103

Keep in mind that plugging a device into different USB port will change the COM port assigned to it.

More Info

Of course, you’ll want to ensure you have the latest drivers installed. For FTDI, they can be found here:

http://www.ftdichip.com/FTDrivers.htm

If you’re thinking of programming your own serial port application, here’s a quick tutorial at the API level. Many popular languages include code for VCP programming, and third-party libraries are available:

http://xanthium.in/Serial-Port-Programming-using-Win32-API

Calibrating the 9103 USB Picoammeter

9103 Picoammeter

Calibrating the 9103 USB Picoammeter

The calibration procedure provided with the 9103 USB Picoammeter is written for use with a Keithley 220 current source and is set up for semi-automatic operation. But what if you want to use another brand or type of current source? The following procedure shows you exactly how to calibrate and verify calibration using any current source.

Preparing for Calibration

In order to calibrate your 9103 Picoammeter, you will need a calibrated current source, and software that can send / receive ASCII commands to the Picoammeter. If you are using the Actuel application supplied with your Picoammeter, there is a built in console window that allows you to communicate directly with the Picoammeter using ASCII commands – simply click the Console button to open the window and type the commands in the field provided.

Note that when using Actuel’s console window, the ampersand character “&” that precedes all commands is automatically entered for you – you do not have to type it.

Note also that the offset and gain calibration apply to all 7 ranges. Range 1 corresponds to the highest resolution range in nA, range 7 corresponds to the lowest resolution range in mA. The Gain Reference Table (at the end of this article) shows the ideal calibration values and limits for each range (both positive and negative polarity).

Perform OFFSET Calibration and Verification Calibrate Offset (all ranges)

  1. Ensure that the current input is disconnected
  2. Send command &R0 (auto-range)
  3. Send command &C1, 9103 responds “Offset Calibration starting…”
  4. Wait for completion (about 30 seconds), until message received “Offset Calibration Completed!”
  5. Send command &C0, 9103 responds “OPEN CIRCUIT Offset Calibration starting…”
  6. Wait for completion (about 30 seconds), until message received “OPEN CIRCUIT Offset Calibration Completed!”

Verify Offset for (all ranges)

  1. Ensure that the current input is disconnected
  2. Send the &I0500 command to start receiving data samples
  3. Send command &R# (where # is a number 1 through 7) to manually select the range to be verified (see the Gain Reference Table below)
  4. Verify measured values received are zero and have at least 1 zero after the decimal point
  5. Repeat until all ranges are checked

Perform GAIN calibration

Refer to the Gain Reference Table below for interpretation of the current values and limits.

  1. Send the &+CC command to unlock the calibration function. The green LED will begin flashing
  2. Connect the current source to the 9103 input
  3. Turn on current source. Ensure current source is at proper operating temperature before proceeding
  4. Send command &C2, and wait for prompt from 9103: “Apply test current…”
  5. Using your calibrated current source, input the specified test current (see table below) and send command &C2 again, the 9103 will respond with “Measuring and calibrating gain…”
  6. Repeat the current application for each of the 7 ranges and polarities, following the prompts provided by the 9103
  7. Wait for response from the 9103: “Gain Calibration completed!”

Perform GAIN verification

  1. Send command &R0 (select auto-ranging)
  2. Send command &I0500 (sample interval 500 mSec)
  3. For each test current (shown in the Gain Reference Table below), set the source to the specified current and select the appropriate current range on the 9103 in turn (&R1, &R2, &R3, &R4, &R5, &R6, &R7), monitoring the data stream for at least 10 seconds after each range, and ensuring that the readings are stable in each range (if a message starting with &S* appears indicating an unstable value, wait a little longer)
  4. Verify that the measured value reported by the 9103 is within 1% of the set current for each range
  5. Send command &I000 to stop sampling
  6. Disconnect current source and turn off the 9103 – calibration is complete

Gain Reference Table
(14 test currents are shown, positive/negative polarities for each of the 7 ranges)

Range

Test Current

9103 Value

9103 Value Limits

1

+ 1.0000 –9

1 nA

0.9900, 1.0100 nA

2

+ 10.000 –9

10 nA

09.900, 10.100 nA

3

+ 100.00 –9

100 nA

099.00, 101.00 nA

4

+ 1.0000 –6

1 uA

0.9900, 1.0100 uA

5

+ 10.000 –6

10 uA

09.900, 10.100 uA

6

+ 100.00 –6

100 uA

099.00, 101.00 uA

7

+ 1.0000 –3

1 mA

0.9900, 1.0100 mA

1

1.0000 –9

1 nA

-0.9900, -1.0100 nA

2

10.000 –9

10 nA

-09.900, -10.100 nA

3

100.00 –9

100 nA

-099.00, -101.00 nA

4

1.0000 –6

1 uA

-0.9900, -1.0100 uA

5

10.000 –6

10 uA

-09.900, -10.100 uA

6

100.00 –6

100 uA

-099.00, -101.00 uA

7

1.0000 –3

1 mA

-0.9900, -1.0100 mA