Digilent and Microchip teamed up to create Arduino modules based on Microchip's 32-bit PIC32 platform (see PIC32 Arduino Modules). These provided higher performance platforms than the original Arduino boards based on Atmel's 8-bit AVR microcontroller.
Expansion for Arduino processor boards is done by stacking Arduino "shields," as they are called, on top of the processor boards. Digilent has delivered a pair of shields that will work with any Arduino class processors including their own PIC32 platform. I had a chance to try out both of the shields using the PIC32 platforms I had tested earlier.
The two shields are the chipKit Basic I/O Shield (Fig. 1) and the chipKit Network Shield (Fig. 2). The Basic I/O Shield is the same form factor as the Uno32 board but is usable on larger Arduino platforms. The chipKit Network Shield is larger and most of its features will only be accessible by the Max32 board. Check the circuit diagrams and connectors carefully before using it with any board other than the Max32.
I test the two shields using Digilent's Max32 board. Both boards can be used together which is handy because the Basic I/O Shield has a nice little display.
First a few quick caveats. Both boards come in small boxes without docs and software. This is all available online including schematics. You can check these and the specs for yourself.
The chipKit Basic I/O Shield
This shield provides physical access the various interfaces available on most Arduino processor boards. It includes 4 push buttons, 4 slide switches, 8 LEDs, 4 open drain FET drives with connectors, plus a 128 by 32 pixel OLED graphic display. There is also a potentiometer connected to the analog input line providing a user adjustable input. The I2C interface is connected to an I2C temperature sensor and a 256 Kbit serial EEPROM. There is also an I2C daisy chain connector. Basic I/O Shield configuration is done using jumpers.
The OLED graphic display is an WiseChip/Univision UG-23832HSWEG04 driven by a Soloman Systech SSD1306 display controller. The interface to the host is via SPI. There is a graphics library provided by Digilent.
Access to most of the peripherals is an elementary exercise since most are just linked to processor I/O ports. The display and EEPROM take a little more work but not much. The EEPROM use was simply a matter of providing address and data information.
The graphics library is the best way to use the display but I was also able to use the sample code to blast a 512 byte block to the display. This process is handy if you plan on manipulating the display directly and it is possible to update portions instead of the whole thing. The display itself is tiny but easy to read and a handy status display for use on applications like robotics projects.
The chipKit Network Shield
This shield provides a range of communication options including Ethernet, CAN and USB OTG (On-the-Go). It is designed to work with the chipKIT Max32 board. There is an Ethernet and USB jack plus a pair of CAN headers. It also provides a connector and an interface chip for the serial port. It also has a 256 Kbit serial EEPROM and a real time clock/calendar (RTCC) chip. As with the Basic I/O Shield, configuration is done using jumpers.
The Ethernet connection requires Ethernet support on the host and the PIC32MX795 microcontroller on the chipKIT Max32 board includes a 10/100 Ethernet Medium Access Controller (MAC). The Network Shield has an SMSC LAN8720 Ethernet Physical Layer Transceiver (PHY) to complete the mix. This means the full Ethernet stack must run on the host and source code is provided for this chore.
The USB support is on part with the Ethernet support. The host chip must provide the USB MAC and PHY though. Of course, this is the case with the Max32. Microchip's USB drivers work with this configuration.
CAN support adds a pair of MCP2551 CAN drivers. The Max32 provides two independent CAN controllers, one for each set of drivers.
The I2C interface is used for the EEPROM and RTCC devices. There is also an I2C pass through header that can be used as well.
In essence, the Network Shield is just providing connectors for the peripherals built into the Max32 board. They would not be accessible without this shield though so this completes the Max32 rather nicely.
Dealing with the interfaces is relatively easy for anyone versed in the respective devices. The Ethernet documentation is the best of the bunch but much of the CAN and USB interface support is left to the C code examples. It is not hard to deal with but a novice may need some time to understand tha whole platform and its support code.
Testing the Ethernet and USB was pretty straight forward. The latter supports a number of different configurations including OTG. I tested the CAN interfaces with each other since I didn't have any CAN devices handy. It is one method that would provide a nice link between Arduino boards in a multiprocessor cluster.
As noted, the documentation and examples are sufficient but not extensive. They should be enough to get you started and provide access to all the functionality available via the hardware. Digilent sponsors a number of competitions and many of these provide the source code. The Arduino modules are relatively new but will likely show up so check out these resources.
Overall, these shields are well designed and a necessary addition to the chipKit Arduino boards. Short of building custom shields, these are the best way to take advantage of Digilent's 32-bit PIC32-based Arduino processor boards.