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
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.
Now select the “Port Settings” tab, and click the “Advanced…” button. From this window you can select a new COM port assignment:
Keep in mind that plugging a device into different USB port will change the COM port assigned to it.
Of course, you’ll want to ensure you have the latest drivers installed. For FTDI, they can be found here:
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: