USB-MIO is a product that I developed during 2009. I needed a general purpose I/O platform for potential upcomming projects. Compared to other I/O interface boards on the market, this product can not compete with low price nor large volumes, but, as I have designed the hardware and software myself, and currently also assemble it myself, I can to a large extent modify and adapt the hardware and software for nonstandard applications, which would not be possible with a standard off-the-shelf product.

The USB-MIO (Universal Serial Bus Multi Input Output) is an I/O interface board for USB. The I/O board has 40 physical I/O ports that can be configured and used in different ways. The cirquit board has expansion and configuration pin-headers, IC sockets and some through-hole components that makes it easy to modify and adapt the I/O board for different needs.

Hardware features:

  • USB 2.0 with galvanic isolation from host PC
  • 36 digital inputs
  • 35 digital outputs
  • 12 high-current push-pull digital outputs (5...18V and up to 1A per output)
  • 4+4 PWM inputs (measure signals with 50 ns resolution, with certain restrictions)
  • 3+3 PWM outputs (16 bit resolution with 625 kHz to 20 MHz clock)
  • RS-232 interface with RxD, TxD and two additional I/O's for RTS/DTR and CTS/DSR
  • 8 analog inputs (10-bit ADC)
  • Adjustable voltage reference for ADC
  • On-board 7805 voltage regulator
  • I/O ports ESD protected

USB-MIO has an on-board microcontroller. The microcontroller, although limited in processing power, can react very quickly to input signals on the I/O ports (depending on application, usually within a few microseconds). It is therefore possible to interface hardware that requires strict timing and short response times to events. The functionality implemented in the microcontroller is accesible from the host PC through the USB port using an API (Application Programming Interface) library. The API exposes the USB-MIO functionality as a set of straightforward and easy to use function calls. The API library is delivered with USB-MIO in source code format for easy intergration into the target application. There are no royalties or limiting license restrictions on the API source code. The microcontroller firmware can be updated through the USB port by changing some jumpers on the USB-MIO board.

Firmware and PC API features:

  • Object oriented API available for native C++ and managed C#
  • Get and set value(s) of digital I/O port(s)
  • Input and output clocked pulse trains on digital I/O port with separate clock and data pin (planned feature)
  • Read value(s) from analog input(s)
  • Measure PWM signals
  • Generate PWM signals
  • Read temperature from DS18x20 1-wire sensor
  • LCD interface for HD44780 compatible display (planned feature)
  • Autonomously execute PLC like program (planned feature)

C++ API documentation available here.
C# API documentation available here.

The USB-MIO board has the FTDI FT232R as USB interface chip. Both API's use the stock Virtual COM Port Drivers from FTDI, available for all MS Windows versions, Windows CE, Linux and Mac OS. The C++ API is currently implemented for MS Windows. It is however straightforward to extend the API with the required low-level OS specific functions to get Windows CE, Linux and Mac OS support. The C# API requires .NET framework 2.0.