Designing shields with multi-board compatibility in mind?

When you design Arduino shields, do you typically target a specific Arduino board (e.g. Uno) or try to make it compatible with as many boards as possible? e.g. Uno, Leonardo, Mega2560...

I'm also curious about the number of people with each type of Arduino board, i.e. market share, if anyone has that info.

If the boards all use the same header, then shield compatibilty is sort of built in, yes?
Uno/Leonardo have same header assignments, Mega has all the extra pins plus SPI in a different place. Add some pads so SPI can be jumper selected from Uno's D10-11-12-13, or have wires brought over from Mega's 50-51-52-53 (or whatever they are) for max flexibility. Same header pins can be used, Mega needs D20-21-22-23 (whatever those are) set to inputs so 50-51-52-53 are not interfered with.

I or my wife have 1 or more of Duemilenova, Uno, Mega, Esplora, ProMini, some of the Lilypad things, Wifi shield, maybe couple more things (have to look), plus a lot of custom 328P & 1284P designs.

Only prominis have actually made it into a project, 10 or 12 or so before going full custom as seen here:
http://www.crossroadsfencing.com/BobuinoRev17/

Do you want to support stacked shields?
Could be good to have a look at some of the most popular shields to see which pins they are using (except for SPI/I2C) and try to stay away from those pins where possible to make your shield compatible with other shields.

I mostly use Uno's but some Mega2560's too and plenty of custom projects. Most people I know are using only Uno.

CrossRoads:
Add some pads so SPI can be jumper selected from Uno's D10-11-12-13, or have wires brought over from Mega's 50-51-52-53 (or whatever they are) for max flexibility.

Don't you get the same flexibilty if you plug into the icsp connector instead as on the ethernet shield?
That header is on the same place on both Uno's and Mega's but is connected to different pins.
Or maybe I didn't understand the idea you tried to share.

You are correct re: ICSP header. Depends on if you want to give up real estate for a 2x3 female header mounted to the bottom of the shield to make those connections.

What are some of the most popular shields today?

I am new to the world of Arduinos so I am still becoming acquainted with it.

eecsninja:
What are some of the most popular shields today?

Take a look at the shields section on the products page for a selection of shields. http://arduino.cc/en/Main/Products
I have no information about their popularity but I guess the ethernet and wifi shields are quite common and they use the same pins (SPI + pin 4). They don't conflict with eachother since people only use one of them at a time.

If you're new to Arduino, don't try to design a new product that will work for each and every person in the the world as a first project.
Start by building something simple but fun that you can learn from instead.

More here too, availability is anyone's guess
www.shieldlist.org

Need to get the Mega/Due screw shield added ...
http://www.crossroadsfencing.com/BobuinoRev17/

Thanks for the useful replies. I looked at the USB host, Ethernet, and Wifi Shields, and I have a better idea of how to proceed.

If you're new to Arduino, don't try to design a new product that will work for each and every person in the the world as a first project.
Start by building something simple but fun that you can learn from instead.

Don't worry, I'm not new to embedded systems, or even AVRs, just to Arduinos. :wink:

perhof:
...and they use the same pins (SPI + pin 4).

I'd like to correct my own statement. They use SPI + pins D4 and D10.
D10 is one of the mentioned SPI pins on Uno and similar boards but not on the Mega2560 where it is just a regular digital I/O pin but D10 is used by these shields on the Mega boards too.

CrossRoads:
If the boards all use the same header, then shield compatibilty is sort of built in, yes?
Uno/Leonardo have same header assignments, Mega has all the extra pins plus SPI in a different place. Add some pads so SPI can be jumper selected from Uno's D10-11-12-13, or have wires brought over from Mega's 50-51-52-53 (or whatever they are) for max flexibility. Same header pins can be used, Mega needs D20-21-22-23 (whatever those are) set to inputs so 50-51-52-53 are not interfered with.

Well the Due adds the wrinkle of 3.3 volts vs. 5.0 volts. In theory, shields designed after the Uno R3 came out are supported to deal with both voltages, but you never know what a random shield supports or does not support. I saw over in the teensy forums that somebody was designing a shield for the teensy 3.0 so it could use Arduino shields, and in his latest spin, he now has 4 jumpers to control things like using a 3.3 volt teensy 3.0 but doing voltage conversions on all of the pins to boost them to 5 volts.

eecsninja:
When you design Arduino shields, do you typically target a specific Arduino board (e.g. Uno) or try to make it compatible with as many boards as possible? e.g. Uno, Leonardo, Mega2560...

I'm also curious about the number of people with each type of Arduino board, i.e. market share, if anyone has that info.

Well, because of that need, my own need also, I've designed already two multi-platform shields. I've decided then to made them available.

One aimed for both Chipkit Max32 and Arduino Mega, and other for Arduino Mega and Arduino Due.

Both have diferent pinouts for each platform to have the best performance possible.

You may see them in the next links.

Mega / DUE
http://www.aqualedsource.com/shop/product_info.php?products_id=32

And Mega / Chipkit
http://www.aqualedsource.com/shop/product_info.php?products_id=30

They are designed to allow easy connection to the boards, while allowing a start-up platform with human interface, for that, you just need to buy a TFT with Touchscreen.

This is the base platform for the aquarium controller I'm building! :wink:

I think that trying to have multi-platform is the key to save some money later. You never know if your own need will rise and need to move to a better platform like Due for example.

Designing shields compatible with various boards is hard but can be done.
Other than the operating voltage differences, pins assignment are probably one of the more important things to look at.
For example, the external interrupt pin on Leonardo is on D0-D3 and on an Uno is on D2 & D3. At the same time, I2C pins are also on the Leonardo's D2 & D3. You also have to consider library compatibility for each pins. Like for example, only certain pins can be used to act as RX pin using the software serial library.