Embedded Development Beginner

I thought about what would make a good starting point for my first blog post.  I have several projects that I will be doing and a series of blog entries I'm eager to share.  However, this is the beginning; thus, it's probably best to start at the beginning.
So let's talk about what it takes to do Development, and more specifically gear our discussion towards Embedded Dev.  My plan is to use this blog as a teaching and learning platform for myself.  Many things I will be learning for the first time and will then draw on my experience to try and teach others.
Thus things I know really well, such as high level programming, development, and embedded programming will get a lot of focus with everything from game dev tutorials, to memory management best practices and testing / qa methodologies.  I'll try to refrain from rehashing things covered elsewhere to my satisfaction, while I will be picking topics that work well for new and seasoned developers.
For things I don't know well: electronics, circuit building, and hardware tinkering, I plan on sharing my progress and work as these disciplines are now a hobby of mine and I love to share knowledge.
I'll perpetually welcome all comments, and would love to learn from everyone who reads an article.
I also am really into VR as I work at NextVR in my day job.  So more often than not, I shall post a few articles here on how media, networking, VR and other neat/cool things I'm excited about come up.  Finally, as I've been a game developer for over a decade, I more than likely will have more than one article about game dev here; although probably I will skew it towards hard core game dev as there's plenty of how to do toy games in Unity out there.

So let's start by posing a question: "How do I get started with embedded development?"  This is actually not a straight forward question as embedded development is a very wide ranging field.  It's closer to asking "How do I get started with Computer Science" than it is to "How do I get started with C++"
The main difference between the questions about embedded development and Computer Science is embedded development usually carries with it special constraints: limited hard drive space, power and ram.  Those three constraints can be thought of as a budget.  You must sacrifice a part of the budget to gain functionality.  The higher the budget you give a project in hard drive space CPU power and ram, the greater the requirement for electrical power and the less space economics you can give your project as each can require larger components.
Typically embedded development is more of a game in which the goal is to achieve solving a need with the least amount of hardware and cost overhead as possible.  So I think that readers interested in these types of problems are looking for one of two goals:

  1. "I want my software to affect the physical world."
  2. "I want to learn what's actually happening in the hardware."

If you just want to get started with the first goal, then there are really good hobbyist embedded community developers out there now offering tutorials and ready made solutions for a wide range of interesting projects.  Some of which are well known:

These communities and this blog for that matter will guide you through working on projects that should get you started.

However, for those more interested in the second goal, this blog is being designed more for you and you have a much harder task ahead of you.  So here's the list of things we'll cover:

1.) Learn C/C++

For a variety of reasons, the vast majority of embedded toolchains are based around C / C++ as the primary languages.  If you want to get beyond the hobbyist platforms and projects, learning C/C++ is essential.  For that reason, I will chose C / C++ for all projects here even if there's an easier way to do it (I will try to be mindful of the easier way and explain what it is and why it's easier as chances arise).

2.) Learn Basic Electronics

The most important thing here is Ohm's law.  Ohm's law explains how voltage relates to current and resistance.  It'll tell you how much power is needed to get a project running.  Most practical electronics only needs you to be able to multiply and divide a few numbers so it's not as hard or as intimidating as it could be.
Actually the reason why it's so easy is electrical engineers found nice shortcuts in Maxwell's theorem's that allow for us to work in a very small subset of rules governing EM field properties.  It's for that reason why we can pretend we're in a walled-garden that ignores special cases Maxwell's theorem's solve.  This means the electrical engineering we use features very simple math and diagrams.

3.) Get basic equipment

Working with embedded development means working with the physical world.  Unless your brand of embedded development is at the Mobile smart phone level and you don't want to touch the physical world, eventually you'll at least need:

  1. Soldering station (iron, solder, helping hands, cleaner)
  2. Multi-Meter (I highly recommend a Digital Multi-Meter (DMM) unless you insist on old school).
  3. Hardware debugger / JTAG adapter (OLMEX adapter or ST-Link)
  4. Logic analyzer (how else would you learn how other circuits work?)

Eventually a 3d printer really opens what kind of projects you can work on.   I will frequently use my 3d printer in my projects, I have and recommend the Lulzbot mini or Printrbot.

4.) Choose a microcontroller and toolchain

To actually get programs running, you'll need a microcontroller to run them and a toolchain to get your programs compiled, installed, and debuged on your chosen hardware.  I really like the Qualcomm products and will do most of my work on the Snapdragon DragonBoard 410c.  I will have a lot of articles using Qualcomm's toolchains and how they work in the real world for projects large and small.  However, in general, all you need is GCC and GDB to target nearly everything.

5.) Pick Components and start reading the datasheets.

Did I mention to read the datasheets?  Yea, you should read the datasheets.  If you haven't yet, definitely read the datasheets.  Now, don't trust the datasheets.  The datasheets are the source of all knowledge with your chosen components, but they are also not intuitive or accurate and often times are for a generation or two behind the component you have in your hand.  I'll do a blog post on how to read a datasheet and reference Sparkfun's datasheet tutorial to help you get started.
To get components, check out sparkfun, adafruit, digikey and mouser.  Also Fry's and Radio Shack often times have great resources in a pinch.

And with that, it's time to say here's the first post in my journey through blog writing.  It has begun.


Popular posts from this blog

Build Snapdragon Flight Drone

Build custom arm model for VR

Setting up the Snapdragon DragonBoard 410c for headless server operation