1.0 Standard Hardware platform and profiles idea

I have an idea to propose.

The Arduino comes in all shapes and sizes from the originals to all the derivatives. I would bet its safe to assume that when people start with the Arduino they start with at the very least a Diecimila and most likely a Deumilanove. I say this since this is the most common Arduino you always see.

If they don’t start with one of the official ones then they use a derivative that is compatible with the Duemilanove. i.e. 14 Digital I/Os and 6 Analog Ins

Now looking at most of the other official Arduino’s, the standard seems to be 14 Digital I/O’s and 6 Analog Ins (obviously based up the micro being used)

The Nano and Mega obviously throw things out. And I would assume that only more advanced users will start with the Mega or the Nano, and that basic users will move onto the other boards once they have got their feet wet with say the Duemilanove.

So why not create hardware “profiles” in much the same way that Sun did with Java when they started to put Java on phones and smart cards and set tops etc. and separated Java in to the Mobile Profile(J2ME), Enterprise Edition(J2EE) etc etc

So have a standard 1.0 Hardware platform definition or spec that says for example Arduino 1.0 Standard Hardware has 14 Digital I/Os , 6 Analog Ins runs off 5V and usually has an ATMega168 or ATMega328 micro at its core. Examples of which are Duemilanove etc.

Then have “profiles” like “Advanced I/O” which can have 54 Digital I/O’s and 16 Analogs eg the Mega and is suitable for more demanding projects etc.

I am just using my own terminology here but hopefully you get the gist of what I am saying. Perhaps also create a special profile for original Arduinos and a separate category for derivatives, but that will make the classification start to get a bit complex.

The question though is why do this? Well to anyone coming into the Arduino there is actually quite a bit to digest and knowing outright which board fits in where can help. For example with tutorials and possibly even board designs it would make it a lot easier to have compatibility standards. So you could say this tutorial or project is for “1.0 Standard” or something like that.

What do you guys think or suggest? This is just a basic idea hopefully others can expand on this… ;D

I’m not sure what need you’re describing.

If the only issue is the number and type of I/O pins, then, I think there are three ‘profiles’

  1. DIL ATmega168/328 =
    6 ADC, 6 PWM/Digital I/O, 6 digital I/O, 2 serial I/O
    = ‘Diecimila’

  2. Surface Mount (SMD) ATmega168/328 =
    8 ADC, 6 PWM/Digital I/O, 6 digital I/O, 2 serial I/O

  3. ATmega1280 = … http://arduino.cc/en/Main/ArduinoBoardMega

Other issues are voltage (5V vs 3.3V), Pin headers (Diecimila or specific other), clock frequency (16MHz vs 8MHz) and memory, but these weren’t in your profiles, so I assume they are not your point.

Tutorial sketches that use a ‘Diecimila’ will work on 16MHz DIL or SMD things, and something that needs a specific machine needs to say which.

I think that covers it. Yes?


What you describe, I think, is what the Arduino IDE board selection menu already does. The board selected menu is used by the IDE core libraries to ‘abstract’ out the differences in I/O pin and peripherals capabilities of the various chips. Even non-Arduino supported AVR chips such as the 644p can be supported if 3rd parties add or modify the required code libraries.

Or maybe I’m not getting to the heart of your suggestion and missing something. :wink:


It sounds like zageek is suggesting the need for a mechanism for users to identify what resources a particular sketch requires to run so the correct board can be chosen.

Perhaps he can clarify the problem he is trying to solve by providing some example use cases.

Its kind of hard to sometimes explain things as you see them in your mind…

mem and gbulmer are on target.

@retrolefty -yes in the software does give you options to choose different board types but to clarify I am not referring to the software I am talking about in terms of the whole Arduino 1.0 spec. Where they can define different classes of hardware or hardware profiles.

This will ultimately allow people to easily spec their projects, for example lets say I build a temperature controller then I can easily say something like" this project is Arduino 1.0 Standard Profile compatible" in my documetation or or on my blog where I am showing the project.

This will go a long way to standardising documentation as well as making it easier for users to quickly know what they need. After all Arduino is all about making it easy and those who are beginning with this will surely find all the options confusing.

If you are a new user and you want to do a project using a shield for example, which hardware to you get? A Lilypad? A Mega? or a Deumilanove? Sure you can use any of those to run the code but the shield will only work withDeumilanoves, Diecemila’s and Megas. What I am saying is that everyone assumes that the Duemilanove shaped boards is the “standard board” so why no formally say so in the spec.

Using more examples say a new user wants to try something and adapt it to one of the other boards. He doesnt have the knowlegde and ability to figure it out and so he buys a Lilypad to do a project that actually needs the Mega. So he wasted money and time and is frustrated. By stating which hardware profiles the project is compatible with he can quickly know which boards he can buy…

All of this can live happily in the 1.0 spec without impacting on anything else. It just makes the compatility issue easier when doing projects. If the Arduino was only the one board then I wouldnt be saying this.

Thats about as best as I can explain it ;D