New Fez-compatible expansion shield available

I’m very happy to announce a new shield for the NETMF/*duino community: the ÜberShield. In short, this is a shield with a Xilinx FPGA, clock oscillator, and 64 available dedicated I/O. Further details are available at http://ubershield.com. At present, the board is shipping with a combination GPIO/PWM core. All 64 of the dedicated header digital pins are available for either input or output, and 32 of them are also able to generate PWM signals. The PWM engine has 32 bit/1us resolution, meaning your pulse width and period can range from 2us to just over one hour, in 1us steps. In addition, all 32 PWM channels are time-aligned, and there’s a master “terminate” count, so you can create complex waveforms like stepper motor control sequences. Further discussion and some examples are in the ÜberShield forums (http://forums.ubershield.com). A full NETMF library is available to support the GPIO and PWM functionality.

In addition, should you want to write your own core in Verilog/VHDL or using Xilinx’s schematic capture tool, a bitstream loader is available for the FEZ Panda and Domino platforms. This loader allows you to transfer your design into the FPGA without using a specialized JTAG cable. It can also be used to upgrade the shield’s functionality as new cores are released by the community.

Here is a very simple code example to configure channel 7 to drive an LED at 25% duty cycle, with a period of 10ms (100 Hz):

using UberShield.Cores;
//SPI config omitted for clarity, but it's pretty straightforward
var spi = new SPI(spiConfig);
var GP = new GpioPwm(spi);
GP.SetPinType(7, GpioPwm.PinType.Pwm);
GP.SetPwmParameter(7, GpioPwm.PwmParameter.Rise, 0);
GP.SetPwmParameter(7, GpioPwm.PwmParameter.Fall, 2500);
GP.SetPwmParameter(7, GpioPwm.PwmParameter.Period, 10000);
GP.PwmGo();

Other potential uses of the shield:
Individually control the intensity of 32 LEDs over 256 discrete levels (15mA or less per LED)
Control 32 hobby RC servos and/or ESCs
Control the speed and direction of 8 stepper motors, using external power FETs
Control the speed and direction of 16 brushed DC motors, using external power FETs
Using external RC filtering, generate voltages between 0V and 3.3V with very high resolution (>10 bit effective) on 32 channels.
Any of the above still leave 32 channels available for connection to sensors and actuators

That certainly sounds like an uber shield :wink: 32 ESCs… Hmmm… Now that sounds like a multicopter challenge!

Interesting