In the days of Windows 98 and DOS, you could directly write to the hardware ports on your computer, typically to the parallel printer port and serial port. This was great for hobbyists and many good projects were built around programs which directly accessed hardware.
I built a very useful logic analyser that worked at 1MHz just by reading the digital inputs of the parallel port. I also controlled a bank of relays with C code, writing to the parallel port.
Then came Windows XP, a great improvement over Windows 98, except that it blocked direct access to hardware ports. There was a quick and dirty fix called giveio.sys but it wasn’t always reliable.
Next, parallel and serial ports started to disappear from laptops and even desktop PCs. Finally, along came Window Vista which has completely blocked I/O access. Thus hobbyists have been deprived of a powerful, simple, and cheap way to access hardware from program code.
This inability to easily control hardware is not just a problem for hobbyists. At RMIT University where I lecture, we had the same problem with our labs and major projects.
In the Computer and Networks degree, students need to become familiar with hardware, software, networks and the interaction between hardware and software (optional in Electrical and Electronic and Communications degrees).
In our quest to find ways for software to control hardware we found several USB boards that allowed digital input and output (I/O) but they were either expensive, didn’t do all we wanted, didn’t work on Windows and Linux and Macs or needed special drivers to be installed.
We drew up the specifications for our ideal hardware I/O board:
• Cheap, under $50 in bulk.
• Lots of digital I/O, analog inputs and PWM outputs.
• Basic I/O: LEDs, a Light Dependent Resistor (LDR) and a trimpot for simple analog work.
• An RS-232 serial data port not used for any system function such as programming.
• The ability to drive DC motors or stepper motors (at least 500mA and 50V each).
• USB-driven, with no special drivers for Windows, Linux and Mac.
• Hardware I/O can be controlled from the PC via a GUI, command line or program code.
• Some prototyping area.
• Interface with simple hardware using easy-hooks, or complex hardware with a cable.
• All ICs in sockets to allow easy repair if they are damaged.
• Users must be able to download their own code into a powerful microprocessor. Hardware can thus be controlled direct from the microprocessor with the USB just providing power.
• The whole thing should be Open Source and GPL for both software and hardware. This makes it easy for anyone to modify and extend the hardware or software but they must release these changes back into the public domain. It also keeps the price down as no one manufacturer can have a monopoly on the board.
The result is the Open-USB-I/O board. Let’s look at its key features and then see how to drive it.