Sunday, February 13, 2011

Arduino - Perspective from someone with embedded experience

Recently there have been some articles about why the Arduino is here to stay and how to kill it.

It concerns me that people want to kill the Arduino. Why kill a project that meets a definite need? Time to rant a little bit.

In order to give a little background, I have experience with PICs, AVRs, LPCs, DSPs, and more. I've put these microcontrollers into all sorts of applications. I've used all sorts of development tools. Guess what? As you can gather from my blog, I own an Arduino. And I play around with it.

Recently, I recommended Arduino platforms to two of my Mechanical Engineer friends. Both projects they were working on needed a microcontroller. Both projects contain components more complicated than blinking LEDs. One project hopes to assist a sibling with automating a home business, the other project is a complicated hobbyist robotics project. Why did I steer them towards the Arduino?

Have I betrayed my hacking roots by steering them to the Arduino when I could have pointed them in any direction? Let us look at the options.

PICs

The Good
PICs are the original hobbyist microcontroller. PICs come in many forms, from motorcontrollers to RF transceivers. A friend of mine opened his car's key fob only to see an pic inside. Used in major industry, PICs definitely have a lot to offer. To add to PIC's credit, they are robust well designed chips that can take a lot of abuse.
The Bad
As great as PICs are, even for an experienced engineer, it can take a couple of days before you get code running on one. Like a lot of microcontrollers, it requires the user to pour through datasheets looking for registers and bit values.
Almost all PIC projects require a programmer. The programmer is PICs Achilles's heel. They don't work 100% of the time. I've fried a couple of them. The simplest one, the PICkit, my favorite of the programmers, cost more than I'd like to spend on a programmer. One last gripe, Microchip's IDE for the PIC, MPLAB, doesn't exude love or freedom.

AVRs

The Good
I am not sure why, perhaps because I love linux, I have a crush on AVRs. You can develop and program AVRs from any platform with a multitude of IDEs thanks to gcc-avr. Even Atmel's development suite provides a multitude of features. AVRs have some unique features, one in particular makes it easy to implement bootloaders on the AVR. AVRs, like PICs are difficult to damage, and come in many varieties and flavors.
The Bad
Although you can pick up an AVR programmer for $20, they still require one to get started. You still have to pour through 300 page datasheets looking for registers to modify to set up PWM or UARTs. Users coming from little or no programming background face the same large learning curve like with the other microcontrollers.

LPC

The Good
One of my personal favorites, the LPC series chips provide a large selection of peripherals, and power. They include ARM cores, allowing a user to utilize several of the open tool chains, or even proprietary ones if they choose. LPCs ship with a serial bootloader, eliminating the need for a JTAG or programmer. A simple TTL serial cable is enough. The LPC1343 comes with a USB bootloader that shows up as another drive containing firmware.bin!
The Bad
Setting up the tool chain can be frustrating. Getting the serial bootloader working may not be as easy as it sounds, and often doesn't work for some reason or another the first time. No different than the others, long datasheets threaten to slow you down as you look for the right register bit value.

Arduino

The Good
$30 complete package. Incredibly simple IDE that just works. Figuring out which serial port to use is the most difficult part of setup. Arduino includes simple libraries for otherwise overly complicated tasks. Huge community support and very open user base.
The Bad
The Arduino is not hardcore because anyone can do it. Arduino specific functions suffer performance hits due to overhead. Pin functions are somewhat locked in to specific functions, for example, analog pins. Arduino stackups can become quite bulky compared to a custom solution.

The Ugly Comparison

What does Arduino offer that the others do not? Watered down programming and a dumbed down development environment? TI offers a development board for $4.30 while the Arduino cost $30. Other chips offer boot loaders, more power, more control, and raw C goodness?
Back to my friends to whom I recommended the Aruduino to. Both of them set up the IDE and had code running within half an hour. By themselves. One of them had text up on an LCD within the night. The other was reading sensor values the same night. One had worked with LabView, the other Matlab, but neither had any embedded experience. Guess what? Neither would have tasted such quick success using another platform. I doubt they wanted to set up a compiler or figure out a programmer. I imagine they will never care about the finer points of a UART, peripheral clocks, ADC timing, or power options. Do you have to understand calculus to calculate interest or know control theory to use cruise control? Sure, it would be nice if everyone knew calculus, but it will never happen. The Arduino provides a platform that provides the power of C without a lot of challenges of getting things to work. Arduino is the personal computer of the embedded world. Somebody else already got everything to work. If people using the Arduino want eventually 'upgrade' to something more barebones, great! If not, great! Not everyone enjoys the embedded aspect of their projects.

Look at Sparkfun. The whole company works by wrapping raw products into nice friendly functional packages. Sure, I could design my own widget that they sell, but purchasing widget X gets me to my goal faster and easier and helps me avoid design aspects I don't care about if my goal is simply a completed project.
I will continue recommending Arduino even though I, myself, may not use it for more than just prototyping. I hope to see the Arduino continue to grow and continue to meet the demand that it fills.

1 comment :