Step 20: Try it Online: Virtual Labs

Step 21: Free Stuff!

In the old days, companies would mail datasheets and databooks to just about anyone who asked. The web has done away with the need for most of that, ...

It used to be that the number of different microcontroller chips available to the hobbyist was pretty limited. You got to use whatever you could manage to buy from the mail-order chip dealer, and that narrowed down the choice to a small number of chips.

But times have changed. Digikey lists over 16000 different line items under a 'microcontroller' search. Which one should a hobbyist with no particular prior experience choose?

Here are some hints. These are particularly aimed at someone trying to pick a microcontroller to use for the first time at least partially as a learning experience, rather than someone who wants to accomplish a particular task.

Update 2009-01-28: This Instructable was recently mentioned in some popular blogs, and is getting a bunch of new readers. Be sure to read the 'comments' made by other readers and the responses to them; there's a lot of value in those comments...

Step 1: What IS a "Microcontroller" ?

If you ever took a very introductory computer course, you probably learned about the major components of ANY computer:

A Central Processing Unit or CPU. The part that actually performs logic and math

Memory. Where the computer stores data and instructions

Input and Output or I/O. How the computer moves data between its other components and the real world.

A microprocessor uses microelectronic fabrication techniques to shrink the CPU to a very small size; usually a single "chip."

A microcontroller uses the same techniques to shrink the entire computer to a single chip (or very small module.) CPU, Memory, and I/O all in a little package as small as a grain of rice. Just connect up power and it starts doing its thing; computing and talking to the world. Usually the I/O on a microcontroller is aimed at "low level" hardware like talking to individual switches and LEDs instead of keyboards, internets, and displays (like your desktop computer.) A microcontroller is just the thing you want, if you want to talk to individual switches and LEDs...

Tech Online "Virtual Labs" does not exists anymore!Good article, but it is still difficult how to select. For example what about ESP8266? How to compare with other chips. It will be good, if there is comparison table.

Yes, this article is almost 8 years old now. It was supposed to have put forth some general principles that a hobbyist might use to select a microcontroller, rather than get into a "x is better than y" debate. And those principles were supposed to stay reasonably accurate regardless of changes in specific products. To some extent, I think this was a success, and I'm not at all interested in trying to maintain a comparison table of everything that exists, especially if you want to include chips/modules that have traditionally not been documented in English or sold in the US.

On the other hand, I think the question has changed somewhat. Today, whether you use a single chip or a module-scale product has become a much more significant issues, and the breadth of the "modules" has become very large. For many hobbyists, the decision now is "Arduino or Raspberry Pi", rather than "AVR vs ARM"...

nice article but i am still confused wat to choose microcontroller or microprocessor??? I am a final year student working on my FYP project, which contains 9 resistive type sensors, 5 contact sensors and 2 accelemeter or Gyro.also i have to use a display to show output and Speaker with text to speech converter. now wat should i use??? microcontroller or microprocessor???

The original article is getting a bit old, but...OK. It sounds like you need 9 A-D channels with relatively slow sample rates, 5 digital inputs, I2C or SPI for the Accel/gyro, some sort of display interface (which can range from one pin with an external intelligent display of some kind, to "many" pins dedicated to AMLCD displays), and your text-to-speech (are you using an external text-to-speech module, or do you want your project to generate audio directly?)This is enough 'stuff' that you can immediately eliminate some candidates; an Arduino Uno, or the microcontroller it uses, is probably not enough, for example.The "microprocessor" vs "microcontroller" issue is usually determined by memory use, and you don't say anything about what your software needs to do or how big you expect it to be. You can get microprocessor systems with megabytes to gigabytes of RAM, while it's a rare microcontroller than has more than 64k.A big question is "chips or module" - A beaglebone will probably do everything you need, if you're "allowed" to use a pre-built system like that (with some added stuff for specific sensors, plus software.) OTOH, a Beaglebone is probably above the complexity of what you would be expected to build for this class of project.

Insufficient information. Insufficient spelling. I assume you mean 2 USB "things", since USB is more of a network connection, and you don't actually transfer data "between two USB ports." It becomes highly dependent on what types of "things."

An FTDI VNC2 microcontroller will probably do it, but it may not be the easiest solution. And it's sorta weird in several ways.

HAPPY BIRTHDAY article - you turn 7 years old today! ;-) What a great write up this is - but/and may I humbly suggest a revision? I'm guessing quite a few things have happened in 7 years. For instance, the Arduino mention probably deserves some more prominence to name one thing. Again, thank you! <:-)

This instructable offers a set of guidelines for choosing a microcontroller, it can't (and *I* can't) recommend a particular micro for every application that comes along... That said, any sort of image processing usually moves into the realm of needing multiple megabytes of memory, rather than the "several kbytes" that you see on most microcontrollers. That probably means that you'd be best off with one of the newer "single board computers" like Raspberry Pi or BeagleBone. (In fact, there is/was a BeagleBoard variant LeopardBoard specifically designed for experimenting with various camera modules. It's a bit old and expensive by RPi standards, but not horribly so...)

No, the hex file contains the "raw machine code", which is very processor and even chip specific. For example, an AVR hex file for the the atmega8 will probably NOT work on an ATmega328, even though they are both 28-pin AVR chips.

We were discussing this very topic on the Digi-Key TechXchange forums the other day: http://www.digikey.com/techxchange/thread/4280. If you need help selecting a microcontroller for a specific project, the folks there are a big help!

I'm not sure if anyone will read this instructable, or this comment, any time soon... But I must warn you. Stay away from Zilog. To put it nicely, actually *using* their chips is... not easy.

I've tried to diagnose the problem, but their help desk is no help and by this time (2012) they haven't updated most of their line. It is sad, because a lot of the chips actually have fairly nice features (high drive IO pins, to name one that is hard to find, and a good amount of timers, something I've only seen on SiLabs 8051s) but are impossible to use off of the development boards.

If anyone has solved these problems... I've got some ZNEO motor control µCs laying around I still want to use. Help!

What about the STM32F103 series? Not so hobbist-friendly because they don't have DIP packages, but they seem to be very reasonably priced (cents more than 8-bit atmega48v) and a performance beast, having 32-bit ARM cores and reaching 72 MHz. I have no idea if are there free IDEs and cheap ways of "burning" the mcus, though. Anyone ever had any experience with them?

8031 and 8032 is cheap, can be pulled as a 8051/8052 and bootstrapped from 64K each of RAM and ROM, if you have an eprom programmer. Eproms are cheap nowadays and I once built my own eprom programmers and was able to erase them on a fluorescent "blacklight" tube overnight, when I was REALLY unable to afford new equipment. Every non-USB keyboard probably has an 8048 chip, which may be EPROM compatible, but with limited external memory and different instructions, and has been around since the days of ATARI 2600. MicroProcessor mode systems just require extra wiring for address and data buses and separate i/o and memory but are otherwise doing the same things as MicroControllers. The chips I just mentioned have both modes. Many others do too. The art of emulating unsupported i/o is called bit-banging, which is easy for serial (except USB, ethernet, and other monsters), challenging for video, and annoying are those monsters which have wasteful complex protocol overheads that drive me nuts and slow everything down.

You understand that you need the microcontroller from the keyboard (that "maybe" is the correct type), PLUS an EPROM (and maybe RAM) chip that you have to buy, plus a couple of "glue" chips and a couple dozen wires or a PCB to connect it all. It's sort of an entertaining exercise if you've harvested the components from trash, and the alternative is $30 "new" chips (that still need those extra components), but that has long since ceased to be the case. Even if you were to want to experiment with the older architectures, the cost for a flash version of the 8052 (new) is about $2 (http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=AT89S52-24PU-ND )

You mention Parallax;s Basic Stamp, but you missed their coolest and most useful two MCUs. The SX and Propeller. The SX is sort of in the Basic Stamp family, but it runs assembly and I think it is a RISC chip. They are cheap, easy to program and are less "hobby" than the Basic Stamps or Javalin chips. The Propeller can run Assembly natively or interpret Spin out of the box, it has 32 general purpose I/O lines which are accessible on all 8 Arithmetic Logic Units (cores they refer to as "cogs").

I'd agree, while I love the propeller IDE and programming language, it is totally importable across architectures, as nothing else uses their proprietary spin code. However, they now have a C compiler for the Propeller, so it may not be as bad a choice for a beginner as it used to be.

I would like to see a start to finish tutorial on recovering parts from old boards, reading the data sheets and learning what the individual chips are capable of doing. I have hundreds of chips from Motorola to Toshiba sitting around that i removed from electronic boards. It would be nice to know where to start to use this stuff.

This is instructable is just what the doctor ordered. I want to get into microcontrollers and spent several hours reading piecemeal accounts trying to gather enough information before I found this most excellent write up. I should have know that Instructables was the place to start.

honestly, this instructable was mostly about relatively SMALL microcontrollers, where most of the electronics of the entire project is in the single chip. Your project sounds more complex than that (and not at all an ideal introduction to microcontrollers or hardware in general for a person with your background.)

You could look at the modules that claim to run JAVA or JAVA-like programs, for example: http://www.systronix.com/store/tini.html Or linux/android Single-board computers (Beagleboard ?) Or even a conventional laptop or DC-powered PC-class machine, perhaps with things like Arduinos to use for real-world interfacing...

Huh. It WASN'T, it had different text. Honest... Anyway: that link isn't bad, it's just (now) an empty page (with a referral to a relevant page at Atmel.) There are hints that it might come back, so I want to leave the link here alone...