With the decline of serial and parallel ports from modern computers, electronics hobbyists are turning more to utilizing USB (or stick with old computers for their legacy ports). Unfortunately, unlike serial and parallel ports, USB is far from simple and so it can be daunting to try to develop hardware and software for it. However, there are many hardware and software solutions that make developing USB device much simpler.
Some PIC microcontrollers now come with a USB Serial Interface Engine (SIE) that handles the very low level parts of the interface. However, writing firmware to work with the SIE can still be a difficult task. Luckily, many PIC compilers come with USB libraries that work out of the box and are dead easy to use. The code generated by these compilers tends to produce a USB Human Interface Device (HID) as these devices do not require custom drivers to be written because Windows has them preinstalled. However, you still need to write your own PC software to read and write data from your USB device. This article shows you how to do this.
Visual Basic Template
The Visual Basic template, which you can download at the bottom of the page, generates the basic code framework that is needed to interface with your USB device. All you need to do is set the VID, PID and buffer sizes going into and out from the PC. After that you’re ready to read and write data.
To give credit where credit is due, I did not write the code that is in the template – the code is based on the code generated by the EasyHID application from Mecanique and modified for Visual Basic 2005 by Steve Monfette. I modified his code a little, wrote some documentation and packaged it into a VB template.
mcHID.dll on 64-bit Windows
mcHID.dll is a 32-bit DLL and so can only be linked with 32-bit applications. Since all 64-bit versions of Windows come with the WOW64 emulator to run 32-bit applications, mcHID.dll will work on a 64-bit operating system but only if your application is compiled as 32-bit/x86. If you receive runtime errors such as “An attempt was made to load a program with an incorrect format” or similar messages, then make sure that you are not compiling your program to the “x64” or “Any CPU” configurations. “Any CPU” configures your program so that it runs as a native 32-bit application on 32-bit Windows and runs as a native 64-bit application on 64-bit Windows. This means that the same executable compiled using “Any CPU” will work fine with mcHID.dll on 32-bit Windows, but will fail on 64-bit Windows. Make sure to compile using the x86 configuration.
Installing the template is simple. Download and extract the archive and you will find two files: USBTemplate.zip and mcHID.dll. Copy USBTemplate.zip (copy the actual zip file – do not extract it) to your My Documents\Visual Studio [2005/2008/2010/etc]\Templates\ProjectTemplates.
Once a new project has been created (see below), mcHID.dll needs to be added to the Visual Basic project via the Solution Explorer. Once added, change its Copy to Output Directory property to either Copy always or Copy if newer. This ensures that when the project is built, Visual Studio will copy mcHID.dll to the output directory that contains your executable.
The template has been tested to work with Visual Studio versions from 2005 all the way to 2017.
Using the Template
After installation, load up Visual Basic and create a new project. When the New Project dialog opens, you should see the USBTemplate option at the bottom.
Select it, give your project a name and then click on OK. Visual Basic creates the basic code framework for you.
The following files are created and can be found in the Solution Explorer:
- frmUSB: This is the main form where USB communication takes place.
- mcHIDInterface: Contains the underlying code.
- HOT TO USE: Contains instructions on how to use the template.
The only file which you need to modify is frmUSB.
The default .NET version in template is .NET 2.0. However, the template does work with newer .NET versions and has been tested using .NET 4.6. You can change the .NET version by right-clicking on the project in the Solution Explorer, clicking on Properties and then in the Application tab, change the Target Framework to the desired version.
2011/03/06: Modified the declaration of the PID and VID in the main form from Short to Integer (Thanks for Fred Schader).
The template and the DLL file can be downloaded below: