So I’ve been thinking about the issues involved with using different shields together via stacking… For instance, multiple SPI peripherals can share the data and clock lines, but they need distinct slave-select lines… And when you try to put different SPI shields together you can’t always count on this being the case. (And, worse, the shields aren’t always designed to make it easy for users to wire up a patch to relocate the slave-select function to another I/O pin…) Plus if you get a bunch of SPI devices on the bus, it starts to become worthwhile to be aggressive about how you issue slave-select lines, using shift registers or the like to save on microcontroller I/O lines… But you can’t readily do this with Arduino if the SPI devices are shields: where would you put this demultiplexer? Where would its outputs connect?
So, here’s my idea. The board is like a regular shield but with pins and sockets pre-mounted. Instead of pass-through headers, on the bottom, there’s surface-mount pins, and on the top there’s surface-mount headers. The pins on the bottom and sockets on the top are all wired up to a set of socket headers to allow the user to remap pins on the shields stacked above the patch shield. Additionally there could be a set of DIP switches used to establish the default connection between a pin and its matching socket, and a few miscellaneous connectors on the board-edge to be used to make connections between multiple patch shields at different layers. And then if there’s any space left, there could maybe be a little prototyping area…
So, for instance: let’s say somebody’s got the Arduino Pro 5V and one of their shields really needs the 3.3V that’s normally provided by the FTDI chip - or they’re just using enough 3.3V peripherals on a regular Arduino to exceed the current limit of the FTDI supply. They could use a patch shield, mount a 3.3V regulator on it, and map the 3.3V pin on the top of the board to the regulator’s output - then break the default connection between the 3.3V pin on the underside and the 3.3V socket on the top of the board.
Or, to go back to the SPI example: let’s say somebody’s got the Sparkfun microSD shield and Nokia LCD shield… These use different slave select lines, but the slave select line for the microSD shield corresponds to the LCD’s reset line. So a patch stacked between the two could remap the LCD’s reset line to another pin, or simply disconnect it… Or, for a larger number of SPI peripherals, the patch shield’s proto area could be used to map a couple Arduino pins to a demultiplexer, with outputs being mapped either to various shield pins (in the case where these pins were used by another shield lower on the stack, and connecting them upward would not be useful) or to jumpers to other patch shields, or (better yet) to SPI shields with connectors on the board edge used to make the “slave select” connection…
I don’t know how far people take shield stacking in practice, but it seems like it could be a handy item for resolving shield compatibility problems…