When selecting the right microcontroller for a project you must consider cost, performance, power consumption, and overall size. The availability of the proper software and hardware tools is also a prime consideration.
Support for the chosen platform is also very important – not just from the vendor, but from the community at large. It also helps if the chosen microcontroller has a readily available development board.
Finally, development time can be significantly reduced if the selected microcontroller has extensive, fully debugged, spi serial flash memory, software libraries with well-documented Application Programming Interfaces, or API’s.
All modern microcontrollers share some basic features. On top of a processing unit, they have a certain amount of flash that is used to store the application code, some SRAM, and, in most cases, some EEPROM.
They need a clock source, and this is normally provided by either an internal resistor-capacitor (RC) oscillator, or by using an external crystal for more timing-critical applications. They have some digital IO ports, and at least one timer/counter.
Beyond that, microcontrollers are distinguished by the amount of memory they have, the number and type of other peripherals integrated on the chip, and the speed at which they run user applications.
It also depends on the data width of the processor and any hardware acceleration features included.
Microcontrollers for embedded systems mainly fall into three categories based on the width of their data buses: 8-bit, 16-bit, and 32-bit. There are others, but these are the most popular ones.
In general, 8-bit microcontrollers are geared toward lower-end applications, and 32-bit ones are for the higher ends, with 16-bit for mid-end applications.
By far, most of the products I work on tend to incorporate 32-bit microcontrollers, but 8 or 16-bit microcontrollers can be a good choice for low-end, low-cost products.