I'm interested in the possibility of putting together a self-learning curriculum to bring my embedded skillset to an employable level. I have no engineering degree (I have a physics master's degree). My only experience is with PIC microcontroller hobbyist-type projects years ago. (I programmed in assembly, not C.) From what I gather, I would need a basic level of proficiency in:
-microcontroller C programming (probably ARM would be best?)
-embedded linux (I suppose Raspberry Pi would be fine?)
-very basic FPGA knowledge
Do you think this is a realistic goal? Would my age count against me (38)? Any other insight or recommendations?
At 62 with 35 years of embedded controller experience, on both the hardware and software side. From designing motherboards on film with colored tape and programming in machine code, pre-assembly language. To recently developing a Windows 10 user interface with VB.net, which I'm still learning. You are never too old to learn, as long as you are still breathing...
Go for it! Having no field related degree has hurt my career choices in the past, however once I got my foot in the door and showed them what I was capable of, I was generally kept on the job far longer than the project I was hired for.
And most importantly, have fun!
Having the MS in Physics will go a long way to making up for the lack of an engineering degree, IMHO.
Thanks, good to hear.
The other posts are spot-on, although I have never seen Samek's stuff - I'm 61 and been doing embedded since the mid 1980's (and wrote a lot of 8080 ASM in the 70's).
I have used a large number of micros in my career, from 68000 family, various DSPs, x86, Atmel, ARMs, PICs, Others I cannot remember and mostly lost to time. I fully admit to being an AVR Freak. I also like ARMs - I have one hand (thus the "one "armed bandit"), so when I use an ARM, I have two (ahem) ARMs...
You can start out with good tools. If you go the Atmel route, the two basic choices are getting the AVR Studio from Atmel, or the IDE from arduino.cc. Both are free.
Atmel is a good first-level choice (keeping in mind I have used them for pro-level projects). The easiest method is to first go the full Arduino route. Lots of good, cheap ($10-20) boards out there, lots of good books, etc. Use the IDE.
The next step wold be using the AVR Studio to write code for bare-iron. You can use the Arduino downloader, but there are fairly cheap tools from Adafruit and others to write directly over the ICP interface.
Or - take a look at the Teensy. the 2.0 or 2.0++ are AVR, and they have a really slick downloader. You would want to use the AVR Studio.
Learn how to incorporate ASM into your C. Learn how to directly change/address registers in C.
And - the Teensy 3.+ (I think they are at 3.2) are ARM based. I have not looked at ARM compilers lately, but I am pretty sure IAR and others have limited-capability versions. Teensy (made by PJRC) has suggestions. I am sure there is an ARM gcc... and the Teensy loader is a good way to go.
Learn how to write device drivers in C. Start with a serial port and work up.
Pro tip: you an easily program an Arduino as an RS232, I2C master or slave, etc. When you write your own device driver, write a simple arduino program to emit (or suck) the opposite so you can determine your driver is working.
Pro tip: write yourself a simple CLI (command-line-interpreter) on a serial port on the micro. Very useful tool. I have a few flavors, mainly around what kind of memory the micro has (RAM vs FLASH).
Lots of stuff out there are basic command loops calling state machines. If you need, brush up on them. Nothing against embedded Linux, but if you want to do RTOS stuff, you can freely use Micrium's uC/OS for free to learn with - and good books. You would learn a lot porting it to an ARM. (I am sure there are already ports, but you want to learn...)
If you don't have an oscope, Rigol has a 4-channel for $350. I will not mention there is a freely available tool to change it from 50 MHz to 100 MHz.
If you want to lay out PCBs, try kicad - free, and they just released 5.0. A bit of a learning curve, but not bad. There are a number of PCB houses that will cut boards cheap, especially if you are willing to wait 2..4 weeks. Kicad has a good forum.
Thanks. I forgot to mention that I have used EAGLE PCB layout software in the past, so I do have some experience with that as well, although it was ten years ago.
Well, EAgle is now $100/year. Kicad is free. They just released v5.0
One of the open questions for me is how much effort Autodesk is putting into Eagle to keep it relevant. Kicad has a large developer base && has support of CERN. Plus a large and active forum.
Plus, there are several PCB houses that now only need to get the Kicad PCB file. And Digikey and Mouser are starting to release their parts for both layout and footprints.
I have been using the Circuitmaker and TRaxmaker abandonware for most of 15..20 years now. I started using Kicad because the client wanted it. The learning curve is not bad, although the documentation can be a bit spotty - but the forums really help.
Of course, YMMV.
BTW - Sparkfun has a program where,if you make something they like, they will distribute it for you, all the way to handling the production and sales.
I guess I will go with Kicad then. I would have to relearn EAGLE anyway since it was so long ago.
Samek has an extensive YouTube series that may be helpful, although I haven't personally viewed them. See here.
However, Samek's books have been very influential to my career. See here. So I am assuming the video series is great!
Lots of useful material and blogs on this very site. Perhaps entries like these may help:
As far as specific questions:
* probably ARM would be best?
-- Sure, that is where I would start. Lots of cheap boards, like the STM32F4 Discovery dev kit, etc, etc.
* I suppose Raspberry Pi would be fine?
-- Yes, but you will want to explore other approaches to embedded linux that are a bit more "embedded" than the normal off-the-shelf Pi. See buildroot as an example.
* Do you think this is a realistic goal?
-- Yes, of course. Just start learning and then find opportunities to apply the knowledge and prove yourself!
* Would my age count against me (38)?
-- If you can prove your knowledge in various ways, seems unlikely.
* Any other insight or recommendations?
-- Never stop learning! :-)
Thank you. I will investigate those resources.
Thanks for mentioning my "Modern Embedded Systems Programming" course on YouTube. The complete playlist of this course is available here:
The companion webpage to the course is here:
The course is now progressing into more advanced/interesting subjects like embedded software architectures. The last 5 lessons talk about the RTOS.
While today, with a bit of passion and focus, one can really become proficient in the embedded programming field, and you've got some good resources mentioned by other posters, you also need to show something to the HR muppets, so IMHO, try to get at least some online courses/exams that offers some form of certificaion. It's kind of a necessary evil.
I understand. Thank you.
Jim_255 is Spot On. I'm 65 w/40+ yrs in hard & software. There's No substitute for Time in the Saddle. Find projects you want, then what others want, then those who'll pay you what the task is really worth.
Akin to cooking, successfully accomplishing an objective is Vastly Satisfying (except yours won't be crap in 24 hours). Good Hunting... <<<)))
Thanks for the reply.
Based on your post I started to think how could I structure a curriculum for embedded systems. After some thinking during the last week I ended up with this:
(I know it is not the prettiest graph you could find, but it works for explaining my point of view)
I think there are 3 main core topics to start your embedded journey to a job: Programming, digital electronics and analog electronics. After you have some foundations you can advanced to job-level topics in microcontrollers, operating systems, programming, digital design and hardware design. All this is summarized as the core topics in the graph. Then, depending on which path or in which industry you are likely to work, you can start learning/practicing the optional topics. For example: IOT (Full stack), QA and software engineering on embedded systems, Industry communications, Advanced Digital Design (description languages), or Advanced PCB design (RF, high frequency).
Answering your questions:
Do you think this is a realistic goal? YES
Would my age count against me (38)? NO
Any other insight or recommendations? Select a path and start learning, you can go as deep as you want in each topic.
I plan to keep improving this graph, adding resources and integrating suggestions, so any comment is appreciated.
Thanks for that.
As a relative neophyte in embedded, I do find it somewhat overwhelming. Also it seems unavoidable that all this knowledge has to be acquired piecemeal from different disparate sources, so there's a lack of flow / continuity.
If you (or anyone else for that matter) has any recommendations for good learning material on hardware specifically, let me know. I have basic circuit analysis skills and experience with multimeters, oscilloscopes, power supplies, etc. but I still feel very unconfident in my abilities in this particular area.
Thanks for your feedback. If I understand well enough, you have some hands-on experience with PIC projects using assembler, am I right?
Also, for the topics you stated (microcontroller C programming,RTOS, embedded linux and basic FPGA knowledge) I would change them for some simpler topics they are based on, in the same order: Genera C programming, Operating Systems concepts, Raspberry Pi and Linux hands-on projects, and Digital Systems (combinatorial and sequencial).
I wonder if you prefer a bottom-up approach or a top-down approach, it all depends on which approach fits your learning style. I mean, starting from the bare components to build a whole system or based on a fully functional system, start decomposing its elements.
Right, I did some simple PIC projects in assembly. The most complex thing I built was a thermometer, which admittedly wasn't really practical, but it wasn't quite as trivial as it might sound; I used a thermistor in voltage divider, A/D converter, & 7-segment displays (MCU was 16F628 if it matters). Assembly code was maybe 150-200 lines, if I remember right. It took me a few months to complete. All this was 15 years ago, though.
I have no strong preference, I suppose, but if I had to choose, I guess I'd go with bottom-up.
see no degree is required for becoming a specialist or master of something. if you have that jill in you than you can do it without anybody help and yes the stuffs which you have listed are the core and advanced things of the Embedded Universe.
So just stick with it in the order you have mentioned.
also there is no age limit for learning.
You may have a look at the online course titled "ARM Cortex-M Bare-Metal Embedded-C Programming" by 'Israel Gbati' on www.udemy.com.
Currently I am taking this course. I find it useful for me.
You may find it useful for learning ARM Cortex-M programming in Assembly and C.
All the best!
P.S: See the course content and have a preview before taking the course, if you wish.
Thank you. I will check out the link you provided.
If it's been said, forgive me.
Don't think you need to get your arms wrapped around both "big iron" embedded Linux and embedded, no-RTOS work. They're highly overlapping, but different, fields of knowledge, and you can get a lot done in just one or the other.
Start with whatever tickles your fancy, and push on from there. If you get a job, you'll naturally start learning what you need for that job, and you can use that as a base.