How to start learning Embedded Systems as a beginner

Summarizing the various possible ways to get started with Embedded Systems Domain

This is the topic I am fascinated about from my childhood, me and my brother loves to do stuffs about electronics and always wanted to know how these stuffs really work. We used to experiment to make day to day life equipment whether it is a small battery operated DC fan or trying to create a digital clock and power it from external battery instead of a button cell. At that time we were not having access to any computer and we just relied on the kits more specifically hobby kits available in the market. Time flies and technology has evolved very fast, now you guys have access to everything what you need for your next project.

As in my opening statement I have told that I am very much fascinated into how things works and here comes the use case of embedded systems. It is a very broad topic and not everything can be covered in this single write-up, I will try my best to coverup things that I think will really help you out to start your embedded systems journey.

In this write-up I will not get into much details but will try to make you know how to get started with embedded systems.

What is an Embedded System

Embedded systems are just small computing systems that are embedded in our day to day life things. These are computing systems that are not your general purpose computers like desktops and laptops but are specific to a particular use case. They can be toys, refrigerators, microwave ovens, dish washers, robots, drones anything you see everyday all around yourself.

From where to start in Embedded domain

Learn a programming language, off-course C

As I have told these are small computing systems, which means they processes some piece of code to get the work done for what they have been designed for. So the first thing you will need to learn is one programming language that is suitable for embedded domain. I will suggest you should learn C language first to get into this domain.

In my journey of embedded systems most of the time I have seen C or C++ has been used for programming an embedded system, the reason is very simple most of the embedded systems we will be going to work with have very little memory and you will not be able to run your Python interpreter or your JVM which allows you to execute your Python or Java code or any other language you have been working / learning so far.We can find compiler for C or C++ any micro-controller (processor) we want to work with. It will be good if you learn some sort of C language before you start coding for any embedded system board.

What if you don't want to Learn C

If you are not willing to learn C language, which I thing is a bad idea, then you may have to pick a hardware platform of your choice and this all depends on the type of project you are going to build, it could be a drone or it could be a toy for your younger sister or brother. Many kits are available in market for your particular use case and each platform have their domain boundaries. They may behave differently and may differ in power consumption and memory. You will have to choose wisely depending upon your use case and parameters you want like battery life , memory and other things that matters to your project you have in your mind.

The good thing about hardware platforms is that they come with their software options that make it easy for you to get started with and one most important thing is they provide you with a great community around their Eco-system that can help you out if you get any problem.

How to choose a hardware platform

Easy one

Lots of platform are available in the market and it all depends upon what are you looking for? Whether you are looking for a platform which is very easy to start with and want your system get up and started in much less time or you are looking for platform that will allow you to dive more deep into the system's internals and allow you to analyze every little thing of that system. You can start with easy and then move on to detailed ones, choice is yours. If you want to get started with the easy you can look at Arduino. You will find plenty of resources around this platform to get started with. It is that easy that even kids can also start working on embedded systems using this platform.

I many times use this platform for prototyping my projects and it is pretty much time saver in that sense. Many people are even using this platform in production applications and that too are working pretty much fine. Arduino come with its own IDE and a great list of examples for common use cases to start with, which makes Arduino a great platform for beginners.

The code written in Arduino IDE is C++, most of the times we do not use all C++ constructs so it may look like C but it actually is C++.

Linux based platforms

If you are looking for a platform that gives you feel like your desktop and PC, Raspberry pi comes at the top in this list. It runs Linux on it and gives you the facility to choose a language of your choice to develop systems. It has GPIO pins that can be programmed by using any language of your choice that works on a Linux platform. This platform has a great support from its community you will find lots of people using it for developing embedded systems and will find lots of code to start with.

The problem with this platform is again the same as we have seen in Arduino, it also have a lots of stuff sitting in between your code and hardware and you will definitely not be knowing how your code is interacting with the hardware. I have seen raspberry pi has been useful to be used an gateway between your devices and the internet and databases. You will employee Raspberry pi in between your devices and the remote databases so that the data from such devices can be transmitted to the remote database servers over the internet.

More control

If you want to know every bolts and nuts of the controller and want to know everything that is going on in the processor then Arduino is not the option because Arduino abstract many thing for use to provides us the simplicity to get started with. If this is the use case then you have to pick a micro-controller of your choice and start writing code in C language. I will not be recommending any specific micro-controller you can choose any of your choice and availability and start coding.

For every micro-controller there is a development kit available in the market that comes with most of the components you may need to start working with. Many other piggy back modules are also available from the manufacturer itself or by third party to provide specific functionality for that development kit.

What is important at this point is to figure out a micro-controller, get the development kit if you want (you can also design circuit of your own) and start writing code. Doing this you will be learning how to handle interrupt how to interface external devices, how to read hardware registers, how to configure timers and clocks of hardware and much more.

For this you will have to figure out the compiler you will need like gcc and other binary tool chains to make your source code run on the target controller. You will also need to look in to various user guides and data sheets to see the architecture and pin configurations of processor and other peripherals.

The learning curve may seems tough but you will definitely learn how thing actually works and it will by sure pay off.

I have tried my level best to keep this article simple and hope this article will enrich your path to understand embedded systems more.Thank you for considering reading this article.