Article summary
By day, I work on web, mobile and desktop applications at Atomic Object. By night, I like to experiment with things that spark: ham radio, electronics, and embedded systems.
Up until a few months ago, my embedded platform of choice was the Arduino, specifically the pro mini since it was so easy to integrate it into my projects. I’m currently work on a project at home that’s going to be powered by a small capacity battery, thus putting a heavy emphasis on low power. The Arduino leaves a lot to be desired in this area, and given the recent Arduino drama, I started looking for alternatives.
Now don’t get me wrong, the Arduino is good at providing a low barrier of entry for beginners—it makes rapid prototyping really easy. But low power is a hassle, interrupts are limited, and the high level API keeps you abstracted away from the hardware. The Arduino foundation tutorial doesn’t mention interrupts, clocks, or timers. I went years developing projects that ignored these concepts and was none the wiser. I’m not anti-Arduino, but the Arduino is not true embedded development.
Alternatives to Arduino
There are a number of different alternatives to check out.
- The most accessible to Arduino users is the bare AVR chips, since you will already have all the hardware you need to get started.
- The PIC family by Microchip Technologies is another popular alternative in the hobbyist arena. It’s well documented and has been around for a number of decades.
- The ARM family of microcontrollers is also a good option for hobbyists, offering a wide variety of platforms.
- The STM32 Nucleo is a nice platform for getting started with ARM development with dev boards sharing the same connectors as Arduino dev boards so you’ll be able to reuse your shields. The Nucleo is also very competitively priced at more than half the cost of an Arduino Uno.
My non-Arduino Setup
For my latest experiments and next step into embedded development, I opted for the MSP430 by Texas Instruments. Their launchpad boards are also about half the price of an Arduino uno and have jumpers that allow you to easily use the board as a standalone programmer once you move your chip off of the launchpad and in to a circuit.
The MSP430 is 16-bit and comes with a nice collection of integrated peripherals depending on the chip that you choose including ADCs, RTCs, timers, serial modules, low power FRAM, op amps, and USB PHYs. MSP430 is also easy to use off of the development board coming in a variety of different form factors including through hole and surface mount packages. It’s easy to take off the dev board and includes a pair of integrated clocks, no crystal circuits are needed.
There are 4 things that attracted me to the MSP430 platform.
1. Varying Degrees of Abstraction
At the highest level is Energia, an open source electronics prototyping platform with the goal of bringing the Wiring and Arduino framework to the MSP430. This makes it easy to transition from the Arduino and leaves open the option for rapid prototyping without having to adjust your hardware.
Texas Instruments also has an abstracted API to be used with bare C code called MSP Driver Library or driverlib for short. Driverlib keeps you above the bits and bytes of the hardware by providing easy to use function calls, abstracting away the details of having to manipulate hardware registers.
Low level, bare C is always and option for MSP430 with well documented registers and guides. MSP430 is also supported by a number of the major RTOS’s, platform specific TI-RTOS, FreeRTOS, ChibiOS and Contiki to name a few. RTOS’s will be my next adventure into embedded systems once I get a few bare metal MSP430 projects under my belt.
2. Toolchain Availability
There are 4 major toolchains for development on the MSP430 including Energia, which was mentioned previously.
The free and open source GCC compiler is available for MSP430 devices with no limit on code size. Binaries for GCC and GDB are provided by TI for Windows and Linux. There are some community projects for OS X, but I haven’t been successful with getting them installed and working.
Code Composer Studio is an IDE from TI that supports their full range of microcontrollers and embedded processors. CCS is based on Eclipse and includes a suite of tools for developing and debugging embedded applications including: compiler, editor, build environment, debugger, and profiler. Being based on eclipse allows for familiarity and makes it really simple to set breakpoints and inspect memory and registers on the device. The only downside is that the free license is limited to a 16KB code size for MSP430 devices.
IAR Embedded Workbench is an IDE that also includes full support for MSP430. Similar to CCS a large range of tools are included. A kickstart evaluation license is an alternative to the large price tag for hobbyists, but it is also limited in code size to a mere 8KB for MSP430 devices.
3. Hardware
What initially led me to the MSP430 was its ultra lower power MSP430FR5969 chip with embedded FRAM. In active mode it sips a small 100 microamps per MHz and, in its low power states, will consume anywhere between 0.4 microamps and 0.02 microamps, depending upon which peripherals are shut down based on the level you choose. 64KB of low power FRAM is included on chip, making it simple and efficient to store data while keeping the part count for your project to a minimum.
The 16-bit RISC architecture is easy to learn and understand and offers plenty of performance with configurable clocks up to 16 MHz. There are a number of really interesting peripherals included on the MSP430FR5969, I won’t go into them in detail here but I encourage you to check out the datasheet.
Texas Instruments also just recently release their MSP432 line of devices. These are 32-bit ARM Cortex microcontrollers that offer more performance compared to the MSP430 with clock speeds up to 48MHz, while still maintaining low power operation. The toolchain is similar to the MSP430 with driverlib support, making porting projects between the MSP430 and MSP432 platforms easy.
4. Documentation
The most attractive thing is the amount of documentation and the low barrier to entry that the MSP430 platform presented. MSP430 doesn’t have the huge community that Arduino does, but the community that it does have is vibrant and active.
There are a large number of resources for getting started including workshops and tutorials from TI, well written books such as MSP430 Microcontroller Basics by John Davies, 43oh community forums, and TI’s MSP E2E forums. What really helped me was the mspsci blog, a collection of well written and explained notes from someone learning the MSP430 for developing scientific instruments.
Conclusion
The world of embedded systems for hobbyists is a lot larger than just the world of Arduino. A wide range of new and interesting hardware and projects will open up to you once you spread your wings and explore other platforms.
I am curious to hear your adventure in hobbyist embedded systems outside of Arduino. What dev boards have you experimented with? What resources did you find helpful for breaking away from the Arduino platform?
Ti has come a long way making the Launchpad line more beginner friendly. They’ve been donating a board to the FRC kit of parts (the FIRST high school robotics competition) for a few years now. I was skeptical they wanted to compete in the educational/casual market, but Launchpad is starting to look pretty good. One bad thing about Arduino is it’s pretty hard to break away from the USB bootloader handholding–a big chunk of space is devoted to it too. Does Ti do a better job? Cheap and simple JTAG programmer?
It’s hard to compare to Arduino though since Arduino is an open hardware platform and not a product line. I sometimes hear people discouraging buying “clones” and that’s unfortunate. The Arduino project hasn’t received any royalties from the Italian hardware maker for a while. The clones and compatibles offer tons of options and price points.
The other unfortunate thing about Arduino is that many people think they aren’t writing low-level code because of the IDE. It’s just vanilla C++ code (avr-g++ toolchain) with a bit of include file magic and a thin hardware abstraction library. You can get as low-level as you want in the IDE.