Forums

self-learning embedded curriculum

Started by rfg 2 years ago25 replieslatest reply 2 years ago312 views

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?)
-RTOS
-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?

[ - ]
Reply by Jim_255September 19, 2018

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!


[ - ]
Reply by rmilneSeptember 19, 2018
Lack of engineering accreditation is not a road block if you are a tenacious self-learner.  Start with an interesting personal project and impress yourself with what you learn.  Then look for jobs that are advertised with the '... or equivalent work experience' qualification.  You just need one chance to get your 'foot in the door'.I supervise firmware designers and am responsible for hiring and I care little for GPA scores or degree initials.  I was in your position once - I didn't even finish my Physics degree!
[ - ]
Reply by Tim WescottOctober 2, 2018

Having the MS in Physics will go a long way to making up for the lack of an engineering degree, IMHO.

[ - ]
Reply by rfgSeptember 19, 2018

Thank you.

[ - ]
Reply by rfgSeptember 19, 2018

Thanks, good to hear.

[ - ]
Reply by mr_banditSeptember 19, 2018

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.

[ - ]
Reply by rfgSeptember 19, 2018

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.

[ - ]
Reply by mr_banditSeptember 20, 2018

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.

[ - ]
Reply by rfgSeptember 20, 2018

I guess I will go with Kicad then. I would have to relearn EAGLE anyway since it was so long ago.

[ - ]
Reply by MatthewEshlemanSeptember 19, 2018

Hello!

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:

https://www.embeddedrelated.com/showarticle/1080.p...

https://www.embeddedrelated.com/showarticle/1063.p...

https://www.embeddedrelated.com/Documents/blog_453...

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!  :-)

Best regards,

Matthew

https://covemountainsoftware.com/consulting/


[ - ]
Reply by rfgSeptember 19, 2018

Thank you. I will investigate those resources.

[ - ]
Reply by QLSeptember 19, 2018

Thanks for mentioning my "Modern Embedded Systems Programming" course on YouTube. The complete playlist of this course is available here:

https://www.youtube.com/playlist?list=PLPW8O6W-1ch...

The companion webpage to the course is here:

https://www.state-machine.com/quickstart/

The course is now progressing into more advanced/interesting subjects like embedded software architectures. The last 5 lessons talk about the RTOS.

Miro Samek

[ - ]
Reply by mirceacSeptember 19, 2018

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.

[ - ]
Reply by rfgSeptember 19, 2018

I understand. Thank you.

[ - ]
Reply by CustomSargeSeptember 19, 2018

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...   <<<))) 

[ - ]
Reply by rfgSeptember 25, 2018

Thanks for the reply.

[ - ]
Reply by gustavovelascohSeptember 25, 2018

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:

graph_71420.png

(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.

https://github.com/gustavovelascoh/embedded-curric...


[ - ]
Reply by rfgSeptember 25, 2018

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.

[ - ]
Reply by gustavovelascohSeptember 25, 2018

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.

[ - ]
Reply by rfgSeptember 25, 2018

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.

[ - ]
Reply by piyushpandeySeptember 19, 2018

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.


Cheers

[ - ]
Reply by rfgSeptember 19, 2018

Thank you.

[ - ]
Reply by vvraodSeptember 19, 2018

Hi RFG,

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.

Regards,

Vishnuvardhan

[ - ]
Reply by rfgSeptember 19, 2018

Thank you. I will check out the link you provided.

[ - ]
Reply by Tim WescottOctober 2, 2018

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.