What is Arduino?

Ok, perhaps a silly question, but please bare with me…

I get that Arduino is very much like a BASIC STAMP, only better, and free.

I’ve done some PIC/SX programming, so I know how to use uCs at the lowest level.

I’m looking to start a new project in a higher-level language, I’m a huge fan of of the GCC toolchain, so the obvious choice was to go AVR.

That’s when I discovered Arduino.

I’m aware that the Arduino is built on top of the GCC toolchain, and is roughly a pre-processor for gcc/g++ and some libraries. What I’m having trouble figuring out is just how exactly the “wiring” language differs from gcc, and what additional functionality is provided by the libraries. More importantly, for someone like myself who is familiar with GCC, prefers old-skool C over C++, and is capable of working at the lower levels, would it be better to just stick with the “vanilla” gcc toolchain instead of the Aurduino? And finally, I’m curious as to how portable the Aurduino environment is over other chips in the AVR series. In particular, I am looking to deploy my final project on one of the AT90CANxx chip, which seems to have the features of the ATMEGA8/48/169 despite the older AT90xxxx designation and I am curious if that fact alone would preclude me from using the Aurduino system.

Many thanks to anyone who can clue me in here…


I’ll try to answer a few of your questions. Others on the forum will have more info.

The “wiring language” isn’t really a separate language. For practical purposes, it’s C (or basic C++) with some libraries and headers added. If you are comfortable programming in C, then you already know 99% of wiring. The Arduino environment provides constants, wrappers and libraries to conveniently access the hardware resources. For the most part, this is really convenient, because all you have to do is open up the IDE and start coding.

That being said, there are times when the Arduino/wiring language gets in the way, and you are better off using lower-level coding. However, there’s nothing to prevent you from doing that using the arduino environment, you just have to dig under it a little. The IDE is very convenient, even if the coding you are doing is more advanced than what it supports.
Note that the IDE is implemented on top of the AVR-GCC tool chain. That means with a little more work you can compile and load from the command line. There’s a link on the arduino page somewhere about doing just that.

As for compatibility, that’s a little bit constrained at the moment. Arduino supports ATMega 8/16 chips directly. It’s been ported to some other chips which are not supported by the main software yet. Search the forum for posts about porting. Taking a program from Arduino to another AVR chip isn’t TOO difficult, but you might have to massage the code somewhat, because the underlying hardware is different.

One resource that you might be interested in is AVR freaks http://www.avrfreaks.net/
They cover a broader range of chips than just the arduino stuff. AVRfreaks is a valuable resource even for arduino users. They also talk about the various compilers and tools that can be used with AVR chips.

Hope this helps,

Arduino supports ATMega 8/16 chips directly.

That should be ATmega8/168 chips. </end_pedant_mode>