Author Topic: Which microcontroller should I learn?  (Read 34288 times)

0 Members and 1 Guest are viewing this topic.

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Which microcontroller should I learn?
« on: February 08, 2016, 12:04:19 am »
So, I would like your opinion on which microcontroller should I learn.

I'm about to finish college (mechatronics engineering) and I've only worked with arduino. I would like to go from a hobbyist to a professional, my goal is to work on product development.

Among other things, I would like to know which microcontroller is most in demand now and for the foreseeable future.

Should I focus on that one? It is better to focus on only one?

Any information will be welcome, as you can probably see, I'm a bit green on the subject.

I was thinking about learning ARM, but there are so many types, and versions, and manufactures, I got very lost.

This is very subjective, I know, but that's what I want, the opinion of people with more experience than me.

Thank you very much!
« Last Edit: February 08, 2016, 02:17:36 am by cdonate »
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Witch microcontroller should I learn?
« Reply #1 on: February 08, 2016, 12:05:58 am »
Did you use the search function of the forum? This has been asked many times!
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Witch microcontroller should I learn?
« Reply #2 on: February 08, 2016, 12:15:15 am »
I did try, but what I got the most is how to learn microcontrollers, where to find info.

This is not what I would like to know, I would like to know which IC is most in demand now, what companies are looking for now. I would like to focus my effort on the one that will give me the best chance of finding a job.

If there a post that I missed with that info, please post the link here.
« Last Edit: February 08, 2016, 02:19:17 am by cdonate »
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Witch microcontroller should I learn?
« Reply #3 on: February 08, 2016, 01:08:29 am »
"I was thinking about learning ARM"

Your intuition is spit on. That part of the mkt is red hot. Spend time on keil or iar and you are in business.
================================
https://dannyelectronics.wordpress.com/
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Witch microcontroller should I learn?
« Reply #4 on: February 08, 2016, 01:25:32 am »
learn good programming instead
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Witch microcontroller should I learn?
« Reply #5 on: February 08, 2016, 01:26:51 am »
learn good programming instead

Well, that's no help...
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Witch microcontroller should I learn?
« Reply #6 on: February 08, 2016, 01:28:22 am »
"I was thinking about learning ARM"

Your intuition is spit on. That part of the mkt is red hot. Spend time on keil or iar and you are in business.

Thank for the reply. Tell me, should I focus on a specific one? v6, v7? Is there a big difference in programming different versions?
 

Offline 1xrtt

  • Regular Contributor
  • *
  • Posts: 63
  • Country: br
Re: Witch microcontroller should I learn?
« Reply #7 on: February 08, 2016, 01:33:26 am »
If you're interested in ARM, there is an online course from University of Texas that started this January 20:

https://www.eevblog.com/forum/beginners/free-course-ut-6-03x-embedded-systems-on-edx-starting-now/msg846982/#msg846982

Although it already started, I guess you can still enroll. The course is based around the TI implementation of ARM (TM4C123), and you can get the evaluation board directly from TI: https://store.ti.com/Tiva-C-LaunchPad.aspx. I got mine delivered in 4 days, to Sao Paulo.
 

Offline 0xdeadbeef

  • Super Contributor
  • ***
  • Posts: 1357
  • Country: de
Re: Witch microcontroller should I learn?
« Reply #8 on: February 08, 2016, 01:34:11 am »
Weren't all the witch microcontrollers burned?  ;D
Trying is the first step towards failure - Homer J. Simpson
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Witch microcontroller should I learn?
« Reply #9 on: February 08, 2016, 01:36:28 am »
If you're interested in ARM, there is an online course from University of Texas that started this January 20:

https://www.eevblog.com/forum/beginners/free-course-ut-6-03x-embedded-systems-on-edx-starting-now/msg846982/#msg846982

Although it already started, I guess you can still enroll. The course is based around the TI implementation of ARM (TM4C123), and you can get the evaluation board directly from TI: https://store.ti.com/Tiva-C-LaunchPad.aspx. I got mine delivered in 4 days, to Sao Paulo.

That's awesome! Thanks companheiro.
 

Offline TheCharels

  • Contributor
  • Posts: 12
  • Country: us
Re: Witch microcontroller should I learn?
« Reply #10 on: February 08, 2016, 01:42:04 am »
Weren't all the witch microcontrollers burned?  ;D
They tried but the engineers involved needed to sacrifice the virgins, none of the engineers survived.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Witch microcontroller should I learn?
« Reply #11 on: February 08, 2016, 02:03:21 am »
Well, that's no help...

It helps a lot, as your question is completely pointless until you get a purpose (=job)
and if you come from Arduino then I am 100% sure you do not know good programming
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Witch microcontroller should I learn?
« Reply #12 on: February 08, 2016, 02:04:33 am »
Weren't all the witch microcontrollers burned?  ;D

 :-DD :-DD :-DD
 

Offline Bruce Abbott

  • Frequent Contributor
  • **
  • Posts: 616
  • Country: nz
    • Bruce Abbott's R/C Models and Electronics
Re: Witch microcontroller should I learn?
« Reply #13 on: February 08, 2016, 02:15:32 am »
I would like to know witch IC is most in demand now
You don't want to know that. The biggest demand for MCUs is in smart cards and automobiles, but few jobs are available in those industries. More likely you will be asked to maintain some legacy gear made by a company with a small market.

Why 8-Bit Microcontrollers Refuse to Go Away
Quote
In an industry where five years represent an eternity, why is an ancient technology so appealing to engineers building state-of-the-art products?

The answer is that 8-bit’s success has little to do with it being, well, 8 bits. For many engineers, it’s about familiarity. That’s why white goods makers employ 8-bit MCUs in refrigerators, freezers, washing machines, dryers, and dishwashers. It’s why automakers use it in window lifts, door locks, mirrors, seat motors, and interior lighting. It’s why tens of millions of smart cards incorporate them, and why countless low-end motors are controlled by them.

“It’s about legacy,” Jim McGregor, founder and principal analyst for Tirias Research, told Design News. “The engineers have been using it so long that they just don’t want to switch their software base.”
With so many different MCUs to choose from it's unlikely that your employer will be using the one you trained on. So the answer is to not lock yourself into one platform, but try out several different chips and IDEs. Then you will have the skills to take on anything they throw at you.

Some people will say you should learn ARM or whatever, but with modern coding practices the core is irrelevant. The biggest hurdles are learning how the peripherals in a specific MCU work (which may vary greatly even within the same family) and how to use the vendor's IDE, frameworks, debugging tools etc. 

Quote
I've only worked with arduino
Arduino is not an MCU. It is a development environment that spans a wide variety of processors and is specifically designed to hide the underlying hardware. That is what makes it so easy to use. If you want a real challenge then take a bare MCU (any MCU) and try to program it from scratch with your own code. Then do it again with a different compiler.
 
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Witch microcontroller should I learn?
« Reply #14 on: February 08, 2016, 02:18:45 am »
Weren't all the witch microcontrollers burned?  ;D

Well, that was embarassing...  ;D
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Witch microcontroller should I learn?
« Reply #15 on: February 08, 2016, 02:30:31 am »
I would like to know witch IC is most in demand now
You don't want to know that. The biggest demand for MCUs is in smart cards and automobiles, but few jobs are available in those industries. More likely you will be asked to maintain some legacy gear made by a company with a small market.

Why 8-Bit Microcontrollers Refuse to Go Away
Quote
In an industry where five years represent an eternity, why is an ancient technology so appealing to engineers building state-of-the-art products?

The answer is that 8-bit’s success has little to do with it being, well, 8 bits. For many engineers, it’s about familiarity. That’s why white goods makers employ 8-bit MCUs in refrigerators, freezers, washing machines, dryers, and dishwashers. It’s why automakers use it in window lifts, door locks, mirrors, seat motors, and interior lighting. It’s why tens of millions of smart cards incorporate them, and why countless low-end motors are controlled by them.

“It’s about legacy,” Jim McGregor, founder and principal analyst for Tirias Research, told Design News. “The engineers have been using it so long that they just don’t want to switch their software base.”
With so many different MCUs to choose from it's unlikely that your employer will be using the one you trained on. So the answer is to not lock yourself into one platform, but try out several different chips and IDEs. Then you will have the skills to take on anything they throw at you.

Some people will say you should learn ARM or whatever, but with modern coding practices the core is irrelevant. The biggest hurdles are learning how the peripherals in a specific MCU work (which may vary greatly even within the same family) and how to use the vendor's IDE, frameworks, debugging tools etc. 

Quote
I've only worked with arduino
Arduino is not an MCU. It is a development environment that spans a wide variety of processors and is specifically designed to hide the underlying hardware. That is what makes it so easy to use. If you want a real challenge then take a bare MCU (any MCU) and try to program it from scratch with your own code. Then do it again with a different compiler.


You make very good points. But, after reading, I'm still unsure where to start.

I get what you are saying, but
Quote
try out several different chips and IDEs
kinda leaves me the same way.

Where do YOU think I should start?
 

Online blueskull

  • Supporter
  • ****
  • Posts: 12657
  • Country: cn
  • Power Electronics Guy
Re: Which microcontroller should I learn?
« Reply #16 on: February 08, 2016, 02:37:39 am »
If you know how to program and how low level thing work, as taught in university second and third years, you should not have problems changing from a chip to another.
Therefore, learn whatever chip you want, and you will be fine. Good programmer can write good code even with Arduino, bad programmer writes shit on every platform.
If one really knows what he is doing, switching from a chip to another should not be painful at all.
So far I've used 8051, AVR, Blackfin+, Cortex M0, M3, M4, MSP430 and embedded x86 (sorry PIC fanboys, no PIC).
They are virtually all the same from a user's perspective, just different performance and peripherals, as long as you are not writing a compiler.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #17 on: February 08, 2016, 02:37:45 am »
Are you 100% sure?

sure, in my experiences (guys on my pre-job interviews) Arduino has always demonstrated to be far from the definition of "good programming", and guys like you are more worried to follow the last dish of the day (which arm CPU ? which compiler ? which vendor ?  :palm: :palm: :palm: :palm: ) instead of caring about important things, and as result their code is usually a fsck crap

no help from you

I don't like the way you have introduced to us, so, don't worry, it's just my 50 cents, and no more help will follow
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Which microcontroller should I learn?
« Reply #18 on: February 08, 2016, 02:40:33 am »
Are you 100% sure?

sure, in my experiences (guys on my pre-job interviews) Arduino has always demonstrated to be far from the definition of "good programming", and guys like you are more worried to follow the last dish of the day (which arm CPU ? which compiler ? which vendor ?  :palm: :palm: :palm: :palm: ) instead of caring about important things, and as result their code is usually a fsck crap

no help from you

I don't like the way you have introduced to us, so, don't worry, it's just my 50 cents, and no more help will follow

If you thought that I was asking the wrong question, just tell me. I made very clear that I was a beginner, that's why I'm here. But ok, have a nice one.
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Which microcontroller should I learn?
« Reply #19 on: February 08, 2016, 02:44:27 am »
If you know how to program and how low level thing work, as taught in university second and third years, you should not have problems changing from a chip to another.
Therefore, learn whatever chip you want, and you will be fine. Good programmer can write good code even with Arduino, bad programmer writes shit on every platform.
If one really knows what he is doing, switching from a chip to another should not be painful at all.
So far I've used 8051, AVR, Blackfin+, Cortex M0, M3, M4, MSP430 and embedded x86 (sorry PIC fanboys, no PIC).
They are virtually all the same from a user's perspective, just different performance and peripherals, as long as you are not writing a compiler.

Well, thanks for the info, that's good to know. I'm quite parcial to AVR (probably because I always saw the IC on my Arduino boards). This looks to be the right approach.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #20 on: February 08, 2016, 02:46:25 am »
Good programmer can write good code even with Arduino

even if arduino is good for rapid prototyping, there are at least three negative aspects
1) arduino's examples, libraries, etc, are (just to use an euphemism) usually not so good
2) arduino call the programming "sketch" instead of "code"
3) arduino doesn't have the concept of "module"
 

Online blueskull

  • Supporter
  • ****
  • Posts: 12657
  • Country: cn
  • Power Electronics Guy
Re: Which microcontroller should I learn?
« Reply #21 on: February 08, 2016, 02:51:18 am »
Good programmer can write good code even with Arduino

at least, three negative aspects
1) even if arduino is good for rapid prototyping, examples, libraries, etc, is (just to use an euphemism) usually not so good
2) arduino call the programming "sketch" instead of "code"
3) arduino doesn't have the concept of "module"

1. If it works, it is good. That's my rule of FAST prototyping. I do not use Arduino in products.
2. I call everything that feeds in a compiler or spits out of a compiler "code".
3. You can always write 100 functions in a single .c file, like sqlite3 (I know it is concatenated with a script, you can do so in Arduino as well).
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Which microcontroller should I learn?
« Reply #22 on: February 08, 2016, 02:53:21 am »
Good programmer can write good code even with Arduino

at least, three negative aspects
1) even if arduino is good for rapid prototyping, examples, libraries, etc, is (just to use an euphemism) usually not so good
2) arduino call the programming "sketch" instead of "code"
3) arduino doesn't have the concept of "module"

Well, since I can use .c, .cpp and .h in Arduino sketches I can do anything that is made available by the compiler. I don't use the Arduino IDE (a joke, in my opinion).

Don't dismiss a programmer just because he only ever worked with Arduino. Take a look at http://www.visualmicro.com/. Using Arduino to blink a LED is very different than creating a wireless array of sensors.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #23 on: February 08, 2016, 03:01:50 am »
1. If it works, it is good. That's my rule of FAST prototyping. I do not use Arduino in products.

yes, and forget to be employed in avionics, for example
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #24 on: February 08, 2016, 03:04:32 am »
3. You can always write 100 functions in a single .c file, like sqlite3 (I know it is concatenated with a script, you can do so in Arduino as well).

oh, duck :palm: :palm: :palm:
 

Online blueskull

  • Supporter
  • ****
  • Posts: 12657
  • Country: cn
  • Power Electronics Guy
Re: Which microcontroller should I learn?
« Reply #25 on: February 08, 2016, 03:15:26 am »
1. If it works, it is good. That's my rule of FAST prototyping. I do not use Arduino in products.

yes, and forget to be employed in avionics, for example

Thanks. I'm talking as a hobbyist and commercial engineer, not an avionics engineer. I know how to design fail safe and fail operational systems.
The professor gave me IEC61508 seminar works on safety system of Chinese rocket systems and Huawei large scale telecommunication systems.
 

Offline zapta

  • Super Contributor
  • ***
  • Posts: 6004
  • Country: us
Re: Which microcontroller should I learn?
« Reply #26 on: February 08, 2016, 03:33:38 am »
3) arduino doesn't have the concept of "module"

Can you explain?

Since Arduinos are programmed in C++ you can modularized in several ways, separate .h files,  namespaces,   classes and even use the arduino library facility.

OP, if you want to show experience that will help you get a job, I would go with ARM. Your employer will assume that you can also learn AVR, PIC and the like. It doesn't matter much which vendor you choose, just pick a popular dev board and go from there.
Drain the swamp.
 

Offline Morgoroth

  • Regular Contributor
  • *
  • Posts: 123
  • Country: cl
Re: Which microcontroller should I learn?
« Reply #27 on: February 08, 2016, 04:24:06 am »
Important stuffs you must learn are things commonly used for all MCU (not only ARM), and are all, or mostly all, different for each chip, and must be managed by hand (the 'macho' way) or through IDE (ladies way).

Core is not so important, because the vendor will give you libraries with all complicated details to use the features of the chips, learn the 'basic' and then involve with more complicated details over architecture.

libraries managment : each time you select a MCU you will have an SDK (a bunch of library) and you will configure your IDE or Makefile to take that library and NO OTHER, Arduino have a 'ready to go' library and doesn't count. Btw, Arduinos chips are OLD, useless if you have demanding requirements, I mean, libraries are ok (a bit bugged), just try a serial implementation using 3 UARTS at once at just medium speed with arduino mega, let see how many packages you will loose without notice (happened to me). Once you are familiarized how libraries work you will know what to search on any IDE for any MCU, for any core architecture.

OS integration : at short time to work programming MCU you will realize that the control of schedules over different tasks could become a nightmare and the effort to integrate an OS like FreeRTOS pay the price, so don't wait to suffer and learn it asap. Atmel have a mess in this moment with his IDE and OS integration (personal opinion), Freescale is OK using kinetis design studio (free tool) but the documentation is just shit, so be away from there if you don't want to be frustrated since beginning. I suggest to use some texas instrument MCU for this, they have a bunch of examples, documentation is ok and the have a free IDE (eclipse based) pretty similar with what you could found on real work environment, if not same tool.

Programming tips: this is a matter of experience, but there are some companies that have better practices. Again, for me, texas instrument is a good start point, in their codes you found handy macros and good practices related to variables management, structures and how they use it, etc etc..., in time you will realize that is very important and save you a lot of extra work.

Protocols: Arduino have many 'ready to go' libraries for protocols that you will need to modify in real life, so I suggest to take some sensors and remake basic libraries like i2c and SPI (on any MCU), do it once and that knowledge will be useful forever. UARTS are not so easy as you could think at beginning, buffers are tricky and very related to architecture (registers and stuffs), and could be too complicated.

Asynchonic stuffs : real life is asynchronic (doesn't means multitasking), read and learn how to manage async stuffs, UARTS are a very handy async projects to start. Then jump to some DMA project.

I think I covered the basics.

http://www.ti.com/tool/msp-exp432p401r

Good luck.



----------------------------------------------------------
If works, doesn't means it is right.
 

Offline pmbrunelle

  • Regular Contributor
  • *
  • Posts: 183
  • Country: ca
  • lost mech. guy
Re: Which microcontroller should I learn?
« Reply #28 on: February 08, 2016, 04:53:14 am »
Some people will say you should learn ARM or whatever, but with modern coding practices the core is irrelevant. The biggest hurdles are learning how the peripherals in a specific MCU work (which may vary greatly even within the same family) and how to use the vendor's IDE, frameworks, debugging tools etc.

If you're programming in C, not assembly, then I don't see what the difference is.

I know of one product that has two microcontrollers in it: one is TI, one is Freescale. The programmers on the project were expected to adapt to the differences between the two - and they did.

Learn to program any microcontroller in C, and then the skills will be transferable.
 

Online westfw

  • Super Contributor
  • ***
  • Posts: 3111
  • Country: us
Re: Which microcontroller should I learn?
« Reply #29 on: February 08, 2016, 04:59:36 am »
Learn a BUNCH of different microcontrollers.   Note that "ARM" is NOT a microcontroller; it's just a CPU/Core.  There are too many vendors with significantly different stuff around the ARM bits (which is programmed in C and largely irrelevant anyway.)
You're probably better off learning about applications than chips (the root of the "learn better programming" comment.)  If I want to hire someone to do work on my IoT networking widget, then I want someone who understands networking and/or sensors/etc.  Not necessarily someone who understands the cpu core of the chip I'm using.  Ditto if I'm making a quadcopter; understanding motors and guidance sensors is more important than chips.    You came out of university; you're supposed to be intelligent and flexible enough to LEARN a new chip.
 

Offline eck

  • Contributor
  • Posts: 15
Re: Which microcontroller should I learn?
« Reply #30 on: February 08, 2016, 07:56:27 am »
Among other things, I would like to know which microcontroller is most in demand now and for the foreseeable future.

Maybe a bit outdated, but still interesting:

http://bd.eduweb.hhs.nl/es/2014-embedded-market-study-then-now-whats-next.pdf
 

Offline obiwanjacobi

  • Frequent Contributor
  • **
  • Posts: 948
  • Country: nl
  • What's this yippee-yayoh pin you talk about!?
    • Marctronix Blog
Re: Which microcontroller should I learn?
« Reply #31 on: February 08, 2016, 07:57:26 am »
I also came from Arduino and my next step was using a bare-bones AVR chip in a project and using the Atmel Studio for IDE. That forces you to read the datasheet and step down a level in code. You learn a lot. After that pick an MCU that fits what you're doing (or want to do). I am currently fiddling with the Cypress PSoC-5 (Programmable System on Chip - so CPU -ARM3- and programmable logic) which is good fun.

My main criteria for selecting a direction is the IDE. That is where you spend most of your time.

[2c]
Arduino Template Library | Zalt Z80 Computer
Wrong code should not compile!
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Witch microcontroller should I learn?
« Reply #32 on: February 08, 2016, 09:13:12 am »
learn good programming instead
Well, that's no help...
Actually it is a good suggestion. Invest in some good books on this topic. For example: 'Making embedded systems' by Elecia White is a good book to get started on embedded programming. What makes a good programmer is the ability to divide a complex problem into manageble pieces and layers. C++ data structures is another one I like. I think we'll be seeing more C++ used on microcontrollers so if you know some C++ you'll have some advantage over other applicants.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #33 on: February 08, 2016, 10:13:02 am »
You came out of university; you're supposed to be intelligent and flexible enough to LEARN a new chip.

precisely
 

Offline Throy

  • Regular Contributor
  • *
  • Posts: 53
  • Country: de
Re: Which microcontroller should I learn?
« Reply #34 on: February 08, 2016, 11:48:41 am »
I agree with learning to program first.  The rest is just being able to read datasheets IMO.
 

Offline spudboy488

  • Regular Contributor
  • *
  • Posts: 118
Re: Which microcontroller should I learn?
« Reply #35 on: February 08, 2016, 12:50:46 pm »
Here's a thought which was lightly touched. As the OP is basically asking what to learn to become a professional, I would suggest looking at the job advertisements in the field/companies that you would like to work for and see what they are looking for. Sure, it would be great to learn CPU X or IDE Y but if the hiring companies are not looking for people versed in CPU X or IDE Y, you are out of luck. Since you're starting fresh, pick something that has a current market demand to make yourself a better candidate for the position.

 

Offline Bruce Abbott

  • Frequent Contributor
  • **
  • Posts: 616
  • Country: nz
    • Bruce Abbott's R/C Models and Electronics
Re: Which microcontroller should I learn?
« Reply #36 on: February 08, 2016, 05:25:59 pm »
Learn to program any microcontroller in C, and then the skills will be transferable.
So you think he should just stick with the Arduino?
 

Offline MT

  • Super Contributor
  • ***
  • Posts: 1273
  • Country: fo
Re: Which microcontroller should I learn?
« Reply #37 on: February 08, 2016, 05:41:14 pm »
Every time this kind of questions pops up it's answered at least twice with: 8 bitters because they are inside every refrigerators, toasters, and electric BBQ's etc etc etc! Humbug!
« Last Edit: February 09, 2016, 01:49:40 am by MT »
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #38 on: February 08, 2016, 06:20:58 pm »
So, I would like your opinion on which microcontroller should I learn....
I would like to go from a hobbyist to a professional, my goal is to work on product development.
Among other things, I would like to know which microcontroller is most in demand now and for the foreseeable future.

It doesn't matter which one you learn for many reasons, including:
  • your first employer will use a different MCU
  • any specific MCU will be obsolete in three years time, and then you will incorrectly think you are back at the beginning
  • horrifyingly little has changed since the 1980s. It took me longer to choose and install the development tools than it did to get up to speed on modern MCUs.
Back in the 1980s I was programming Z80s+IO boards and ARM devices, cross-compiling C on Xenix, using in-circuit emulators when debugging.
Now I am programming atmega328 and ARM,  cross-compiling C on Linux, using JTAG when debugging.
There is very little difference between the Z80+IO boards and the atmega328.
JTAG gives the same facilities as in-circuit emulators.
Linux = Xenix, at this level.
The only real difference is that in the 1980s I couldn't have afforded the equipment and that it was much larger.

So, concentrate on learning the timeless fundamentals of system design, program and hardware design, and debugging. That will last decades not years.

Then demonstrate that you have set yourself a difficult target, made many mistakes, know how you would do better next time. Employers love that.
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline Aodhan145

  • Frequent Contributor
  • **
  • Posts: 401
  • Country: us
Re: Witch microcontroller should I learn?
« Reply #39 on: February 08, 2016, 06:37:57 pm »
If you're interested in ARM, there is an online course from University of Texas that started this January 20:

https://www.eevblog.com/forum/beginners/free-course-ut-6-03x-embedded-systems-on-edx-starting-now/msg846982/#msg846982

Although it already started, I guess you can still enroll. The course is based around the TI implementation of ARM (TM4C123), and you can get the evaluation board directly from TI: https://store.ti.com/Tiva-C-LaunchPad.aspx. I got mine delivered in 4 days, to Sao Paulo.

I didnt like that course. It was way to long/bulky for the little information in it.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #40 on: February 08, 2016, 07:02:17 pm »

nostalgia makes itself called 3 3 2

Back in the 1980s

bought for a sentimental affection for the past,  for a period with happy personal associations
when Unix was not linux, and tools were not open source  :D


 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #41 on: February 08, 2016, 08:29:02 pm »
I don't think employers are looking for knowledge on particular chips, or even peripherals though farmiliarity with them is helpful.

It is unlikely that as a beginner you will be hired into a senior role without any supervision or training. So your ability to get up the learning curve, coding in a robust way, and good working experience with those chips are far more important than specific knowledge on a particular chip - it is unlikely that your next employer will hire you explicitly to work on that chip.
================================
https://dannyelectronics.wordpress.com/
 

Offline lem_ix

  • Regular Contributor
  • *
  • Posts: 192
  • Country: cs
Re: Which microcontroller should I learn?
« Reply #42 on: February 08, 2016, 09:55:14 pm »
As people have previously mentioned, learn proper programming first. If you have an arduino uno (or w/e) maybe it would be a good idea to program it from Atmel studio in C for a start. You can even do it over usb with some tweaking, no programmer or ftdi required.
When you understand what you're doing on the arduino (atmel atmega328p) switching to any 8-bit mcu won't be difficult. After that go for some ARM and freertos or w/e seems fun.
 

Online westfw

  • Super Contributor
  • ***
  • Posts: 3111
  • Country: us
Re: Which microcontroller should I learn?
« Reply #43 on: February 08, 2016, 11:14:48 pm »
Quote
[68332 eval board] [the 1980s] when Unix was not linux, and tools were not open source
gcc for 68k pre-dates the 68332 by a bit...
Before that, you got a C compiler with your unix system.  Usually based on the Portable C Compiler.  (gcc was better.)
 

Offline pmbrunelle

  • Regular Contributor
  • *
  • Posts: 183
  • Country: ca
  • lost mech. guy
Re: Which microcontroller should I learn?
« Reply #44 on: February 08, 2016, 11:36:50 pm »
Learn to program any microcontroller in C, and then the skills will be transferable.
So you think he should just stick with the Arduino?

OP should stick with Arduino if it's easiest, but use a more standard IDE, and avoid the Arduino libraries.

More importantly though, don't just use a microcontroller to make LEDs blink for no reason.

Use a microcontroller as part of a larger project. Since you say "mechatronic" (does that mean sort of mechanical?), then something has got to move as well. So for example, make a robot dance. Show the range of your skills, don't just focus on one part.

I never learn anything in isolation as a text-book exercise. For example, I never did a standalone op-amp filter. Instead, I decided to build speakers, and then filtering became a necessity. From there, I became motivated to learn about filtering, and I also had realistic design constraints rather than designing something for no reason.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #45 on: February 08, 2016, 11:55:33 pm »
Before that, you got a C compiler with your unix system.  Usually based on the Portable C Compiler.  (gcc was better.)

I got an ANSI C compiler for HPUX/PA1, it was not based on Portable C Compiler
It was made by Avocet Systems, they made a lot of ANSI C Cross-compilers for 8051 family, 68HC11, m68k
and their software was supporting a few commercial Unix such as SunOS, SGI IRIX, HP-UX/PA1, HP-UX/PA2, IBM RS/6000 AIX

in my opinion it's better than GCC (from v2.93 to 3.*) by different orders of magnitude!

SierraC runs on DOS, Motorola included a copy with the BCCDI board
(which means the top gun, debug processor, MC68881, NVRAM and software, ~4000 USD)
in my opinion, after a recent experience: it's the funniest compiler ever tried on dos !
 

Online Cerebus

  • Super Contributor
  • ***
  • Posts: 3887
  • Country: gb
Re: Which microcontroller should I learn?
« Reply #46 on: February 15, 2016, 02:16:42 am »
Good programmer can write good code even with Arduino

even if arduino is good for rapid prototyping, there are at least three negative aspects
1) arduino's examples, libraries, etc, are (just to use an euphemism) usually not so good
Got to give you that one, the existing library code sucks rocks in places. The APIs are harmless enough though, even if not the most polished.
Quote
2) arduino call the programming "sketch" instead of "code"
Well those of us who've been doing this a while tend to call it a 'program' but we won't arbitrarily discriminate against you for calling it a 'code' as long as you don't discriminate against others because they haven't been around as long. However, what the IDE calls a project/program/whatever isn't exactly a reliable metric for how good an IDE it is.
Quote
3) arduino doesn't have the concept of "module"
You do realise that the Arduino IDE uses the GCC C++ compiler don't you? There is absolutely nothing stopping you writing full C++ classes and the IDE is kind enough to figure out what you're going and just magically compile any other source files you stick into the folder with your .ino file.

In fact I rather like the Arduino IDE. It's simple, efficient and doesn't get in the way. In the time it would take me to get Eclipse or something similar downloaded, configured and working I could download and install the Arduino IDE, write my code and be finished before I'd typed one line of code into Eclipse. But I've only been doing this programming lark since 1975 so I probably don't know what I'm talking about.
Anybody got a syringe I can use to squeeze the magic smoke back into this?
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #47 on: February 15, 2016, 08:22:05 am »
Got to give you that one, the existing library code sucks rocks in places. The APIs are harmless enough though, even if not the most polished.

edit: rewritten in more polite form, I would avoid to summarize with too harsh referring to something unpleasant or embarrassing, instead I will use the expression "code definitely downsizing as a euphemism for their cuts", just to underline the possibility they can "improve" :-+

(even if silly blocking-code is still present in their libraries, even the documentation is downsized in quality and still too bugged :palm: :palm: :palm: :palm: )

Well those of us who've been doing this a while tend to call it a 'program' but

the Wiring behind the hood makes the difference between "sketch" and "program"
which is bad for code analyzers.

You do realise that the Arduino IDE uses the GCC C++ compiler don't you?

knowledge and insight, the toolchain has absolutely no relation with the importance of being able to code with modularity in mind.
Once again arduino guys have proved to have absolutely no idea about that.
« Last Edit: February 15, 2016, 11:26:42 am by legacy »
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #48 on: February 15, 2016, 08:37:20 am »
"mechatronic" (does that mean sort of mechanical?)

it's a mashup between electronics and mechanics, imagine a course where you study mechanics integrated with electronic, it's more mechanics than electronics, you can say electronics applied to mechanics

in my opinion, I believe your advice - don't learn by exercises which focus on reduced knowledge and didactical insight, learn by the whole projects as multidisciplinary synergy - is the best one  :-+ :-+ :-+ :-+
 

Offline Roicker

  • Contributor
  • Posts: 11
  • Country: mx
Re: Which microcontroller should I learn?
« Reply #49 on: February 16, 2016, 09:31:41 pm »
First things first... TL; DR; If you want to learn embedded seriously, buy something that is not an Arduino. My recommendation? The TIVA C for $12 + shipping

I think I may be qualified to answer the OP's original question. I have a B.S. in Mechatronics, M. Sc. in Control and I work as the SW Group Leader of a big Tier 1 (we sell to most of the automotive OEMs of the world) that makes ADAS Sensors. I'm not bragging, I just bring this up to try to explain why I think I'm qualified to give a relevant opinion.

I've hired a lot of people over the last years for the position of Embedded SW developer for Instrumentation Displays (Clusters) and ADAS Sensors and one thing that I really don't like to see in a candidate is when they say they know embedded because they have programmed in Arduino. Let me explain this: I don't think arduino is bad, it's actually a great tool (I have one in my 3D printer) for when you want something cheap and that can be reproduced by many, but if you only have used it with the libraries that come with it, or you bought a shield and downloaded code from somewhere... well I don't think I would be very interested in hiring you in that case. The problem in an interview is to separate the people that actually learned with an arduino from the people that only downloaded code and connected some cables.                   

If you have used Arduino for doing something complex (like program Ardupilot or Repetier for a 3D printer :P) well then it's easy for me (and any interviewer) to see that you have potential because you took a simple tool and built something great with it.

For the reasons mentioned above I think using something like a PIC, an ST or TI ARM or even an AVR Mega (I know that is the MCU of the Arduino, but I mean directly without the code base) is better for actually learning Embedded Systems. The current toolchains have the basic startup for the MCUs but after that, you need to analyze examples and read datasheets to understand how to setup and use the peripherals and debug SW by checking how the system is behaving after each step. These things are what we are looking for in embedded SW devs, engineers that can analyze requirements and write code to realize them and if something goes wrong DEBUG IT! With an Arduino most of this has been done, all you have to do is call a function. Also, the toolchain doesn't allow you to do in circuit debugging as far as I know you can only "code and pray" that it works.

The main problem with Arduino for me is: It makes it too easy! that is great if you don't want a career in Embedded SW, but if you do, I recommend something else.

My personal recommendation (because I've bought a couple of kits and worked with several MCUs) is the Tiva C from Texas instruments. Why?

1. The thing is cheap ($12) dlls plus shipping, but if you bundle that with other components you may need it's ok
2. Has good support from a community (it's obviously not as good as arduino but it works)
3. You have an In-Circuit Debugger included for free, which means you can execute your code step by step, set breakpoints, see the memory, etc. and all of this is great for learning and debugging
3. It has code examples and tutorials to teach you the basics because it's aimed at the DIY community
4. As long as you are using that board the compiler and toolchain are free with unlimited code size
5. It has a fast ARM Cortex M4F (with floating point) and it has a lot of peripherals

hope this helps!
 

Offline f4eru

  • Frequent Contributor
  • **
  • Posts: 565
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #50 on: February 16, 2016, 10:43:32 pm »
Quote
So, I would like your opinion on which microcontroller should I learn.
Any uC which has good community support, openly supported programming tools, and GCC as a compiler.
So with many ARM uCs, you are spot on. Some can be programmed just by connecting to USB -> no need for any tool inbetween -> just put a USB connector on your board -> nice way to do it
For smaller parts, the mega AVRs are nice.

Well structured C is a must to learn (not C++)
« Last Edit: February 16, 2016, 10:45:31 pm by f4eru »
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #51 on: February 16, 2016, 10:59:18 pm »
If you are learning as a hobbyist, the choice of mcu doesn't really matterm. And 8bitters like avr and stm8 are fairly good. Pics have a large code base.

If you intend to make a living out of this, arm is the way to go.

Of the major vendors, TI offers some of the most feature rich chips, but tends to have questionable adc modules. STM has a lot of offering and great prices. But aren't that great in terms of features and quality. Nxp has a lot of consistency in its peripherals and is generally bug free. Freestyle is great in mixed signal, and its middle ware (PE) is the best in class. Cypress is a small player but offers innovative solutions.

Myself uses a lot of ST products out of historical reasons - I used to be a heavy LM3S user.
================================
https://dannyelectronics.wordpress.com/
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #52 on: February 16, 2016, 11:06:11 pm »
For hobby use I'd definitely go for ARM as well. 8 bitters (the word already says it: bitter) are based on convoluted archaic and slow architectures which just get in the way of making something cool. With ARM you don't have to worry so much about code size, different kinds of memory, absence of a real stack and no real support for pointers. I have wasted too many hours on trying to get around the limitations of the 8051!
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #53 on: February 16, 2016, 11:18:49 pm »
My recommendation? The TIVA C for $12 + shipping

I agree with your points about Arduino w.r.t. an embedded programming career.

A very quick search for "Tiva C" (because I'm only looking for future reference) shows several (many?) boards and many development environments some of which are unnecessarily expensive.

Which free-as-in-beer development environment would you recommend for a medium size (i.e. >>Arduino sketch) project? (Linux preferred)
« Last Edit: February 17, 2016, 12:40:31 am by tggzzz »
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #54 on: February 16, 2016, 11:53:53 pm »
"tiva C"

I would can anyone who says that he has experience coding in "Tiva C". Experience coding in C is otherwise welcome.
================================
https://dannyelectronics.wordpress.com/
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #55 on: February 17, 2016, 12:00:46 am »
I have wasted too many hours on trying to get around the limitations of the 8051!

yes, I agree
even if I find relaxing its enemy-hc11
I mean, 68hc11 is limited, but funny

it's 90s technology, guys, don't look at it  :-DD
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #56 on: February 17, 2016, 12:54:47 am »
My recommendation? The TIVA C for $12 + shipping
I agree with your points about Arduino w.r.t. an embedded programming career.
I don't. Projects get larger and larger so you have to depend on libraries. Using a higher level programming language which avoids pointers, buffer, memory allocation, etc pitfalls makes a lot of sense to make code more robust. I think we'll see more and more higher level languages being used on microcontrollers in the future.
BTW going for the cheapest development board most certainly isn't a good idea especially when it serves as a dongle for the development tools.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #57 on: February 17, 2016, 01:11:08 am »
My recommendation? The TIVA C for $12 + shipping
I agree with your points about Arduino w.r.t. an embedded programming career.
I don't. Projects get larger and larger so you have to depend on libraries. Using a higher level programming language which avoids pointers, buffer, memory allocation, etc pitfalls makes a lot of sense to make code more robust. I think we'll see more and more higher level languages being used on microcontrollers in the future.
BTW going for the cheapest development board most certainly isn't a good idea especially when it serves as a dongle for the development tools.

That's why I asked the question about the dev environment.

As for higher level languages, I have a career's expertise in them. I have been looking for a higher level language than C for embedded programming since the 1980s, without success. My attitude to C++ is that if C++ is the answer, the question must be rethought. And I've been using Java since 1996 (gulp), for high-availability soft real-time programming.

My next project will use VHDL for the time sensitive stuff, and I haven't decided whether to use C or ADA for the software.
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #58 on: February 17, 2016, 01:59:48 am »
Looking at ADA and Lua for use on an ARM controller are still on my todo list. I have looked into C++ for ARM a decade ago but back then support was lacking. C++ would have advantages in the form of being able to get rid of pointers but using the STL library (for example) doesn't seem like a good idea.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline andyturk

  • Frequent Contributor
  • **
  • Posts: 892
  • Country: us
Re: Which microcontroller should I learn?
« Reply #59 on: February 17, 2016, 02:05:27 am »
My attitude to C++ is that if C++ is the answer, the question must be rethought.

Back in the day, that was a reasonable attitude to take. But C++ has come a long way in the last twenty years.

If you're comfortable with Java, then think about taking a second look at modern C++ for embedded projects because it's just as performant as C and vastly safer. Perhaps not quite as safe as Java (since you have to manage your own memory), but still pretty darn safe. E.g., modern C++ lets you get real work done without resorting to macros, whereas C is too clumsy without macros for embedded use.
 

Offline autobot

  • Regular Contributor
  • *
  • Posts: 66
Re: Which microcontroller should I learn?
« Reply #60 on: February 17, 2016, 02:11:27 am »
C++ 14 is supposed to be as safe as java , through the usage of smart pointers and other new language features , i think.
 

Offline reagle

  • Supporter
  • ****
  • Posts: 528
  • Country: us
    • KuzyaTech
Re: Which microcontroller should I learn?
« Reply #61 on: February 17, 2016, 02:13:48 am »
Pretty much any modern embedded micro with free tools and cheap demo boards with integrated ICD will do.
Look at STM32, STM8 (sure an 8-bitter, but modern peripherals), NXP LPC 8xx (some even come in DIP), NXP LPC11xx,TI MSP430/Luminary Micro parts, Silicon Labs Energy Micro, Freescale Kinetis etc.

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #62 on: February 17, 2016, 08:53:01 am »
Looking at ADA and Lua for use on an ARM controller are still on my todo list. I have looked into C++ for ARM a decade ago but back then support was lacking. C++ would have advantages in the form of being able to get rid of pointers but using the STL library (for example) doesn't seem like a good idea.

I'm about to try LUA on an ESP8266 for an ultra-low power sensor, which is about as embedded as you can get :)

As for C++, if you think you understand it you are probably wrong. After all, the designers don't.

The designers of the template system were horrified when someone forced them to realise the unintended complexity of their creation. How. He showed that with the appropriate small set of templates he could cause the compiler to emit the sequence of prime numbers during compilation. Yes, their template system was Turing complete, and the designers didn't even realise it. See https://en.wikibooks.org/wiki/C%2B%2B_Programming/Templates/Template_Meta-Programming#History_of_TMP

If the designers don't understand their creation, what chance do mere users have?

And then - from the school of hard knocks - there's the C++ FQA http://yosefk.com/c++fqa/const.html I'm particularly fond of the "const correctness" section, in which the reason for "const" is pulled in two completely oppposite and contradictory directions.
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #63 on: February 17, 2016, 09:08:12 am »
My attitude to C++ is that if C++ is the answer, the question must be rethought.
Back in the day, that was a reasonable attitude to take. But C++ has come a long way in the last twenty years.

Yes, it has tried to go in two directions: to be a portable assembler and to be a general purpose HLL. Either would have been acceptable, but by trying to be both it failed at both.

IIRC it took 6 years (in the naughties) for the first fully standard compliant compiler to become available. But it may have been C rather than C++. That's ridiculous either way.

As for C++14, since it will break existing programs, it is likely to be as successful as Perl6 or Python3 - i.e. partially at best.

Quote
If you're comfortable with Java, then think about taking a second look at modern C++ for embedded projects because it's just as performant as C and vastly safer. Perhaps not quite as safe as Java (since you have to manage your own memory), but still pretty darn safe. E.g., modern C++ lets you get real work done without resorting to macros, whereas C is too clumsy without macros for embedded use.

Read the C++ FQA and weep. http://yosefk.com/c++fqa/

Read Mike Stump's contibutions on comp.arch, and weep. Apparently he is heavily involved in gcc, and they seem to be taking the attitude that nasal daemons using gcc are the users problem and that gcc shouldn't have to care about it.

Realise that the C++ designers didn't realise the baroque complexity of their creation. I remember watching the "templates are Turing complete" mess unfold in the 90s, i.e.
Historically [tmeplate programming] is something of an accident; it was discovered during the process of standardizing the C++ language that its template system happens to be Turing-complete, i.e., capable in principle of computing anything that is computable. The first concrete demonstration of this was a program written by Erwin Unruh, which computed prime numbers although it did not actually finish compiling: the list of prime numbers was part of an error message generated by the compiler on attempting to compile the code
https://en.wikibooks.org/wiki/C%2B%2B_Programming/Templates/Template_Meta-Programming#History_of_TMP

If the designers don't understand their creation, what chance do mere users have?
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline obiwanjacobi

  • Frequent Contributor
  • **
  • Posts: 948
  • Country: nl
  • What's this yippee-yayoh pin you talk about!?
    • Marctronix Blog
Re: Which microcontroller should I learn?
« Reply #64 on: February 17, 2016, 09:13:59 am »
Nobody really explained (to me) why it has to be C and why C++ is sooo bad. I am used to OO thinking and I find the 'flatness' of C primitive. C++ compilers these days produce comparable (assembly) code as to what you'd get with C. So I think it is just people being stuck in their 'old backup' and unwilling to change (after a certain age, change gets harder and harder). Still I am willing to have an open mind to this because I CAN imagine that for certain embedded problem-domains the sequential/structured language structure actually fixes some kind of problem (but what problem is that?).

As to what you should learn: pick a modern device with a modern/good IDE and a decent compiler (toolchain). When you get to know a few of them, learning a new one becomes easier every time. Next year there will be newer devices you may have to learn, so you are never done. But it will get easier to pick up.

[2c]
Arduino Template Library | Zalt Z80 Computer
Wrong code should not compile!
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #65 on: February 17, 2016, 12:04:18 pm »
ADA

GNAT ? for PPC? for ARM? for MIPS? for AVR8? for AVR32?
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #66 on: February 17, 2016, 12:05:28 pm »
Nobody really explained (to me) why it has to be C and why C++ is sooo bad

C++ without exceptions, at least
 

Offline andyturk

  • Frequent Contributor
  • **
  • Posts: 892
  • Country: us
Re: Which microcontroller should I learn?
« Reply #67 on: February 17, 2016, 01:03:01 pm »
If the designers don't understand their creation, what chance do mere users have?
IMO, the issue for a programmer isn't to enumerate all the weirdest consequences of a language, but to use it well and get work done.

I first started writing K&R style C more than 30 years ago and probably understand 95% of the language. The missing 5% is stuff that I usually look up as needed. E.g., the more arcane varieties of static structure initialization syntax, arithmetic type promotion, etc. As for C++, I understand considerably less, say 60%. One reason for the difference, as you and others point out, is that C++ a very complicated language. Another is that it's a moving target, with the more recent standards adding new features that require lots of book learnin' to figure out.

But which language would I rather code in today? C++... hands down, no contest. Why? Because I'm vastly more productive with C++'s strong typing, particularly when it comes to refactoring a big chunk of code. I rarely need to cast pointers any more. I don't spend much time writing or debugging #define macros  because most of that can be done within the language itself with enums and constexpr functions. My code is more readable because namespaces and class scoping means I don't need to prepend module hierarchy into every identifier. References are really handy when it comes to implementing systems without dynamic memory (most of what I do these days). Pure virtual functions and public/protected visibility provide structured ways to write reusable code from the start. And frankly, RAII is a godsend. Etc, etc, the list goes on.

Sure, C++ is a lot more complicated than C. But for me, at least, it's a better tool.


 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #68 on: February 17, 2016, 01:08:02 pm »
I don't spend much time writing or debugging #define macros  because most of that can be done within the language itself with enums and constexpr functions

can give me an example, please?

And frankly, RAII is a godsend. Etc, etc, the list goes on.

yes, I agree with no doubt
 

Offline andyturk

  • Frequent Contributor
  • **
  • Posts: 892
  • Country: us
Re: Which microcontroller should I learn?
« Reply #69 on: February 17, 2016, 01:34:25 pm »
can give me an example, please?
Sure. Here's a bunch of constants defined as a C++ typed enum:
Code: [Select]
      // Commands are offets into the internal RAM of the bq27621
      // These are 16-bit little-endian values in successive locations, N and N+1
      enum command_t : uint16_t {
        CONTROL                         = 0,
        TEMPERATURE                     = 2,  // in 0.1 degrees K
        VOLTAGE                         = 4,  // in mV
        FLAGS                           = 6,
        NOMINAL_AVAILABLE_CAPACITY      = 8,  // in mAh
        FULL_AVAILABLE_CAPCITY          = 10, // in mAh
        REMAINING_CAPCITY               = 12, // in mAh
        FULL_CHARGE_CAPACITY            = 14, // in mAh
        EFFECTIVE_CURRENT               = 16, // in mA
        AVERAGE_POWER                   = 24, // in mW
        STATE_OF_CHARGE                 = 28, // in %
        INTERNAL_TEMPERATURE            = 30, // in 0.1 degrees K
        REMAINING_CAPACITY_UNFILTERED   = 40, // in mAh
        REMAINING_CAPACITY_FILTERED     = 42, // in mAh
        FULL_CHARGE_CAPACITY_UNFILTERED = 44, // in mAh
        FULL_CHARGE_CAPACITY_FILTERED   = 46, // in mAh
        STATE_OF_CHARGE_UNFILTERED      = 48, // in %
        OPERATION_CONFIGURATION         = 58,
        DESIGN_CAPACITY                 = 60, // in mAh
      };

Most embedded C could would use #define macros for those, although C99 (and perhaps older C standards) have enums too. The nice thing about C++ is that you can easily specify the type that these constants evaluate to--in this case uint16_t.

On the constexpr side, here's a C++ function that creates a 16-bit result based on two arguments. It's used inside a low-level Bluetooth implementation:

Code: [Select]
        /**
         * @brief creates a compile-time HCI opcode constant
         * @param[in] ogf HCI OpCode Group Field value (6 bits)
         * @param[in] ocf HCI OpCode Command Field value (10 bits)
         * @return 16-bit HCI command opcode
         */
        static constexpr uint16_t opcode(uint16_t ogf, uint16_t ocf) {
          return ((ogf & 0x003f) << 10) | ((ocf & 0x03ff) << 0);
        }

This would typically be done in C with a "function like macro". Some benefits of the C++ implementation are that it's strongly typed, and in a debug build, I can step into the function as if it were a normal function call. In an optimized build, it's compiled away. The constexpr restriction means that if constant arguments are supplied in a call, then the result will be evaluated at *compile time*, and that I'm only allowed to use things in the body of the function that are available to the compiler (e.g., no global variables).
« Last Edit: February 17, 2016, 01:37:58 pm by andyturk »
 

Offline Roicker

  • Contributor
  • Posts: 11
  • Country: mx
Re: Which microcontroller should I learn?
« Reply #70 on: February 17, 2016, 02:58:05 pm »
"tiva C"

I would can anyone who says that he has experience coding in "Tiva C". Experience coding in C is otherwise welcome.

Tiva C is the name of the board from TI.... you can program it with assembler and C/C++
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #71 on: February 17, 2016, 03:27:49 pm »
Most embedded C could would use #define macros for those, although C99 (and perhaps older C standards) have enums too. The nice thing about C++ is that you can easily specify the type that these constants evaluate to--in this case uint16_t.

understood, good tips :-+
 

Offline Roicker

  • Contributor
  • Posts: 11
  • Country: mx
Re: Which microcontroller should I learn?
« Reply #72 on: February 17, 2016, 04:25:19 pm »
My recommendation? The TIVA C for $12 + shipping
I agree with your points about Arduino w.r.t. an embedded programming career.
I don't. Projects get larger and larger so you have to depend on libraries. Using a higher level programming language which avoids pointers, buffer, memory allocation, etc pitfalls makes a lot of sense to make code more robust. I think we'll see more and more higher level languages being used on microcontrollers in the future.
BTW going for the cheapest development board most certainly isn't a good idea especially when it serves as a dongle for the development tools.

Of course developers don't do everything from scratch, we use many libraries in our development as well.

But what happens when there is an error on a  "tested" function because you are using it on a new generation of the product? are you just going to submit a ticket and pray someone fixes it eventually? I don't think the costumer would be to happy to know you have no clue were the problem is.

My point is... yes, normally you don't need to go deep down (unless you develop Drivers) but that doesn't mean you shouldn't know, because the fact is, you will need it eventually. Maybe you en up working for a company were you have to setup a project with a new chip an a custom BSP with external memory and other stuff like that, or maybe you end up doing a high level graphics Driver that requires for you to know about registers and how to access that peripheral. In the end, a good Embedded SW Dev needs to know the basics to debug the really complex problems when it is needed.

One of the best Embedded SW Devs that I've worked with knew very little about embedded and that was no problem... until he needed to develop a driver for a new peripheral :P

You could "survive" without knowing about low level, but in my opinion it doesn't hurt, because you will understand the system way better if you understand how it works!

And about going with the cheapest board. I really see no problem if you don't plan on doing you own HW, which based on the OP's question I believe is not what it is intended.

If you know cheap board with an ICD that has a free toolchain I would like to know (seriously) because I looked a while ago and I couldn't find one so I went for the Tiva C.
 

Offline Roicker

  • Contributor
  • Posts: 11
  • Country: mx
Re: Which microcontroller should I learn?
« Reply #73 on: February 17, 2016, 04:41:34 pm »


Quote from: tggzzz on Yesterday at 10:18:49 AM


>Quote from: Roicker on Yesterday at 08:31:41 AM
My recommendation? The TIVA C for $12 + shipping



I agree with your points about Arduino w.r.t. an embedded programming career.

A very quick search for "Tiva C" (because I'm only looking for future reference) shows several (many?) boards and many development environments some of which are unnecessarily expensive.

Which free-as-in-beer development environment would you recommend for a medium size (i.e. >>Arduino sketch) project? (Linux preferred)



This is the board I use, the EK-TM4C123GXL:
http://www.ti.com/ww/en/launchpad/launchpads-connected-ek-tm4c123gxl.html#tabs

It's $12 plus shipping and you can get it from TI or other big distributors

On the link you can see all the resources, for example, the Code Composer Studio to develop for the Tiva C. Like I mentioned before, If you use it with their kits the compiler is free and unrestricted. I develop in Windows but there is a Linux version as well.

I see that there is a suite called Energia to develop using sketchs (similar to an Arduino toolchain I think I've heard about) and a cloud based IDE but I haven't used any of these two.

On the bottom of the page you can find the links to the wiki and the workshop. The Workshop is very useful for beginners to learn and it is very well documented (you get slides and a more comprehensive document for each lesson).
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Which microcontroller should I learn?
« Reply #74 on: February 17, 2016, 04:54:29 pm »
First things first... TL; DR; If you want to learn embedded seriously, buy something that is not an Arduino. My recommendation? The TIVA C for $12 + shipping

I think I may be qualified to answer the OP's original question. I have a B.S. in Mechatronics, M. Sc. in Control and I work as the SW Group Leader of a big Tier 1 (we sell to most of the automotive OEMs of the world) that makes ADAS Sensors. I'm not bragging, I just bring this up to try to explain why I think I'm qualified to give a relevant opinion.

I've hired a lot of people over the last years for the position of Embedded SW developer for Instrumentation Displays (Clusters) and ADAS Sensors and one thing that I really don't like to see in a candidate is when they say they know embedded because they have programmed in Arduino. Let me explain this: I don't think arduino is bad, it's actually a great tool (I have one in my 3D printer) for when you want something cheap and that can be reproduced by many, but if you only have used it with the libraries that come with it, or you bought a shield and downloaded code from somewhere... well I don't think I would be very interested in hiring you in that case. The problem in an interview is to separate the people that actually learned with an arduino from the people that only downloaded code and connected some cables.                   

If you have used Arduino for doing something complex (like program Ardupilot or Repetier for a 3D printer :P) well then it's easy for me (and any interviewer) to see that you have potential because you took a simple tool and built something great with it.

For the reasons mentioned above I think using something like a PIC, an ST or TI ARM or even an AVR Mega (I know that is the MCU of the Arduino, but I mean directly without the code base) is better for actually learning Embedded Systems. The current toolchains have the basic startup for the MCUs but after that, you need to analyze examples and read datasheets to understand how to setup and use the peripherals and debug SW by checking how the system is behaving after each step. These things are what we are looking for in embedded SW devs, engineers that can analyze requirements and write code to realize them and if something goes wrong DEBUG IT! With an Arduino most of this has been done, all you have to do is call a function. Also, the toolchain doesn't allow you to do in circuit debugging as far as I know you can only "code and pray" that it works.

The main problem with Arduino for me is: It makes it too easy! that is great if you don't want a career in Embedded SW, but if you do, I recommend something else.

My personal recommendation (because I've bought a couple of kits and worked with several MCUs) is the Tiva C from Texas instruments. Why?

1. The thing is cheap ($12) dlls plus shipping, but if you bundle that with other components you may need it's ok
2. Has good support from a community (it's obviously not as good as arduino but it works)
3. You have an In-Circuit Debugger included for free, which means you can execute your code step by step, set breakpoints, see the memory, etc. and all of this is great for learning and debugging
3. It has code examples and tutorials to teach you the basics because it's aimed at the DIY community
4. As long as you are using that board the compiler and toolchain are free with unlimited code size
5. It has a fast ARM Cortex M4F (with floating point) and it has a lot of peripherals

hope this helps!

Roicker, thank you very much for your answer. That was pretty much the info I was looking for.

I decide learning "real" embedded systems for the exact reason you explained.

I know how to program an Arduino, and I can make more complex things with it, but I don't feel like I'm really programming an embedded system, the Arduino language masks almost everything, limits the control I have over the uC and I'm limited to a small family of uC.

I'll follow your tips, the Tiva seems like a nice choice to start.

Can you tell me what do you look for in a interview? How does a candidate with no experience shows you that he know how to program embedded systems?

I'm current reading Making Embedded Systems by Elecia White, which seems like a good place to start.
« Last Edit: February 17, 2016, 04:57:12 pm by cdonate »
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #75 on: February 17, 2016, 04:57:45 pm »
If you know cheap board with an ICD that has a free toolchain I would like to know (seriously) because I looked a while ago and I couldn't find one so I went for the Tiva C.
There are lots of boards out there with on-board debugging interfaces... For example this one (I have two of these):
http://www.ebay.com/itm/New-NXP-ARM-Cortex-M3-LPC1768-Development-Board-3-2-TFT-LCD-Module-64KB-SRAM-/270962249071

Free toolchain is Eclipse + ARM GCC + GDB

Besides the TI ARM devices are (AFAIK) the old Luminary micro devices with their long errata sheets. Just a random pick: Tiva™ C Series TM4C129x errata sheet is more than 100 pages! NXP's LPC407x (also Cortex M4F) errata sheet is only 9 pages long (including title pages and disclaimers). Based on the dates the NXP LPC407x seems to be older than the Tiva C.

All in all the Tiva C seems like a poor choice because it is obviously slapped together without much thought or testing. That is not a microcontroller you want to invest time in unless it has a very specific advantage not found in other microcontrollers.
« Last Edit: February 17, 2016, 05:07:36 pm by nctnico »
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline Roicker

  • Contributor
  • Posts: 11
  • Country: mx
Re: Which microcontroller should I learn?
« Reply #76 on: February 17, 2016, 05:14:45 pm »
First things first... TL; DR; If you want to learn embedded seriously, buy something that is not an Arduino. My recommendation? The TIVA C for $12 + shipping

I think I may be qualified to answer the OP's original question. I have a B.S. in Mechatronics, M. Sc. in Control and I work as the SW Group Leader of a big Tier 1 (we sell to most of the automotive OEMs of the world) that makes ADAS Sensors. I'm not bragging, I just bring this up to try to explain why I think I'm qualified to give a relevant opinion.

I've hired a lot of people over the last years for the position of Embedded SW developer for Instrumentation Displays (Clusters) and ADAS Sensors and one thing that I really don't like to see in a candidate is when they say they know embedded because they have programmed in Arduino. Let me explain this: I don't think arduino is bad, it's actually a great tool (I have one in my 3D printer) for when you want something cheap and that can be reproduced by many, but if you only have used it with the libraries that come with it, or you bought a shield and downloaded code from somewhere... well I don't think I would be very interested in hiring you in that case. The problem in an interview is to separate the people that actually learned with an arduino from the people that only downloaded code and connected some cables.                   

If you have used Arduino for doing something complex (like program Ardupilot or Repetier for a 3D printer :P) well then it's easy for me (and any interviewer) to see that you have potential because you took a simple tool and built something great with it.

For the reasons mentioned above I think using something like a PIC, an ST or TI ARM or even an AVR Mega (I know that is the MCU of the Arduino, but I mean directly without the code base) is better for actually learning Embedded Systems. The current toolchains have the basic startup for the MCUs but after that, you need to analyze examples and read datasheets to understand how to setup and use the peripherals and debug SW by checking how the system is behaving after each step. These things are what we are looking for in embedded SW devs, engineers that can analyze requirements and write code to realize them and if something goes wrong DEBUG IT! With an Arduino most of this has been done, all you have to do is call a function. Also, the toolchain doesn't allow you to do in circuit debugging as far as I know you can only "code and pray" that it works.

The main problem with Arduino for me is: It makes it too easy! that is great if you don't want a career in Embedded SW, but if you do, I recommend something else.

My personal recommendation (because I've bought a couple of kits and worked with several MCUs) is the Tiva C from Texas instruments. Why?

1. The thing is cheap ($12) dlls plus shipping, but if you bundle that with other components you may need it's ok
2. Has good support from a community (it's obviously not as good as arduino but it works)
3. You have an In-Circuit Debugger included for free, which means you can execute your code step by step, set breakpoints, see the memory, etc. and all of this is great for learning and debugging
3. It has code examples and tutorials to teach you the basics because it's aimed at the DIY community
4. As long as you are using that board the compiler and toolchain are free with unlimited code size
5. It has a fast ARM Cortex M4F (with floating point) and it has a lot of peripherals

hope this helps!

Roicker, thank you very much for your answer. That was pretty much the info I was looking for.

I decide learning "real" embedded systems for the exact reason you explained.

I know how to program an Arduino, and I can make more complex things with it, but I don't feel like I'm really programming an embedded system, the Arduino language masks almost everything, limits the control I have over the uC and I'm limited to a small family of uC.

I'll follow your tips, the Tiva seems like a nice choice to start.

Can you tell me what do you look for in a interview? How does a candidate with no experience shows you that he know how to program embedded systems?

I'm current reading Making Embedded Systems by Elecia White, which seems like a good place to start.

I'm glad I was able to help cdonate!

When you struggle with programming your own routines for a peripheral or any other thing you are working on, you really learn stuff and that shows... with just a couple of questions I can see if someone downloaded a library to do everything or if he actually knows because he suffered several nights to get it to work. This is also true with team projects, it's easy to detect the guy that got everything to work and the guy who just put his name on the report at the end :P.

But to answer more directly to your question, I normally ask what kinds of projects you have worked on and go from there, trying to get details on how you did stuff and on what parts you had the most difficulties. Many Candidates "give me the rope to hang themselves", which means they talk about a project they were involved on, but they didn't really do the actual coding so they don't know it well (or at all).

It's funny but it's something you can't hide when you know and you can't fake when you don't! (at least in my experience :D)

I haven't read heard about the book you mentioned, but I learned embedded like 10 years ago hehehe

My advice would be, do the tutorials and then look for an interesting project and implement it, when you are done, do another one! that way you are learning, but it's fun and you have a bigger motivation than just wanting to learn embedded. In my opinion this is the best way to learn embedded, because each night you will stay up late struggling to get the project to work it will be because you are enjoying it.
 

Offline Roicker

  • Contributor
  • Posts: 11
  • Country: mx
Re: Which microcontroller should I learn?
« Reply #77 on: February 17, 2016, 05:32:04 pm »


Quote from: nctnico on Today at 03:57:45 AM


>Quote from: Roicker on Today at 03:25:19 AM
If you know cheap board with an ICD that has a free toolchain I would like to know (seriously) because I looked a while ago and I couldn't find one so I went for the Tiva C.


There are lots of boards out there with on-board debugging interfaces... For example this one (I have two of these):
http://www.ebay.com/itm/New-NXP-ARM-Cortex-M3-LPC1768-Development-Board-3-2-TFT-LCD-Module-64KB-SRAM-/270962249071

Free toolchain is Eclipse + ARM GCC + GDB

Besides the TI ARM devices are (AFAIK) the old Luminary micro devices with their long errata sheets. Just a random pick: Tiva™ C Series TM4C129x errata sheet is more than 100 pages! NXP's LPC407x (also Cortex M4F) errata sheet is only 9 pages long (including title pages and disclaimers). Based on the dates the NXP LPC407x seems to be older than the Tiva C.

All in all the Tiva C seems like a poor choice because it is obviously slapped together without much thought or testing. That is not a microcontroller you want to invest time in unless it has a very specific advantage not found in other microcontrollers.


I think you are missing the point nctnico, the OP wants something that is less intimidating than a Chinese board with no tutorials and with which you have to setup everything by yourself. I'm sure for a veteran like you that's no problem ;) but for a beginner it may be too much. Plus it's almost $70 and you are buying Chinese quality (which is not always bad, but it's more of a risk). Maybe switching to a better MCU would be a next step, once he has dominated a more basic setup with tutorials, an already configured toolchain and more help from a community that uses exactly the same setup and board.

I understand that the Tiva C has its limitations, but if you wanted to create your own toolchain and do something more professional then you are not the target audience for this board. This board is for beginners, even if you don't end up using it professionally you would be able to extrapolate that knowledge because the compiler is standard and the only difference will be how you set up peripherals.

All that being said, I've been using the Tiva C to develop the control of a balancing Robot and it's more than adequate for the job. I get ICD, a small footprint to be able to fit in the robot, a simple but powerful IDE and IT'S $12!!!!!!!!! I even considered a Teensy (~$20 depending on the version) but the Tiva C has ICD which after developing embedded SW professionally is something you can't live without :D.
 

Offline Sal Ammoniac

  • Frequent Contributor
  • **
  • Posts: 942
  • Country: us
    • Embedded Tales Blog
Re: Which microcontroller should I learn?
« Reply #78 on: February 17, 2016, 05:56:02 pm »
Just a random pick: Tiva™ C Series TM4C129x errata sheet is more than 100 pages! NXP's LPC407x (also Cortex M4F) errata sheet is only 9 pages long (including title pages and disclaimers). Based on the dates the NXP LPC407x seems to be older than the Tiva C.

If lack of errata is the criteria, then take a look at the Kinetis K64. Its errata is only 10 pages and the Eclipse-based Kinetis Development System is free without any code limits.

They have a series of boards called Freedom boards that are in the US$35 range. They have a built-in debugger or you can use an external JTAG or SWD debugger like a J-Link.



If you need something more expandable, look at the Kinetis tower system:

« Last Edit: February 17, 2016, 05:58:01 pm by Sal Ammoniac »
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #79 on: February 17, 2016, 06:00:41 pm »
The board I propose comes with a full software suite and heaps of examples!

BTW I wouldn't be too fixated on ICD. In the past 25 years I have tried to use that several times but gave up on it because it always was slow and unstable. There are far better and easier ways to do debugging and unit testing which result in much more stable code.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #80 on: February 17, 2016, 07:12:41 pm »
Nobody really explained (to me) why it has to be C and why C++ is sooo bad.

See http://yosefk.com/c++fqa/

If you don't understand the points therein, you shouldn't be using the language.
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline Roicker

  • Contributor
  • Posts: 11
  • Country: mx
Re: Which microcontroller should I learn?
« Reply #81 on: February 17, 2016, 07:16:50 pm »
The board I propose comes with a full software suite and heaps of examples!

BTW I wouldn't be too fixated on ICD. In the past 25 years I have tried to use that several times but gave up on it because it always was slow and unstable. There are far better and easier ways to do debugging and unit testing which result in much more stable code.

Alright, I'll take your work for it. In that case it's up to the OP to further investigate these options and see which one is best for him. I still believe that for the price and features, the Tiva C is better than other options (remember many students don't have a lot of money to buy tools and kits  ;D).

While I do agree that having a proper tool like a Green Hills Probe to debug is WAY better than the ICD included in the Tiva C, the price can't be beat. For $12 there are not a lot of options as complete for a beginner. I use this ICD often and I agree it's not super stable, but it gets the job done. It has helped me to debug the errors I had with this project. Would I rather use the Green Hills tools? Of course, but I can't spare the 10k at the moment. I know there are cheaper tools out there, but all this analysis would be the topic of a separate discussion because the question is not what is the best toolchain / MCU combo at the moment.

Remember that when you join a company it is very likely the MCU you use is not the one you have used since many big companies use custom SoCs and MCUs that are not available to the public. I know that is what we use, so I don't expect anyone to be familiar with it.

What I think it's important for someone just starting is to be able to step into his code, see the memory and what the peripherals are doing. I you don't have that, then it's more of a guessing game and it's not what you would do on a professional environment. If you want to do that with other tools you need a bigger investment and although they are better tools, not everyone can afford it.
« Last Edit: February 17, 2016, 07:22:14 pm by Roicker »
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #82 on: February 17, 2016, 07:23:48 pm »
If the designers don't understand their creation, what chance do mere users have?
IMO, the issue for a programmer isn't to enumerate all the weirdest consequences of a language, but to use it well and get work done.

Of course.  But the problem with C++ is that it is so complex that the nasty corner cases often bite even experienced programmers. Subsetting the language helps, but the problem is that every developer/team uses a slightly different subset.

Quote
I first started writing K&R style C more than 30 years ago and probably understand 95% of the language.

So did I. There were only two books on C at that time :)

Quote
Because I'm vastly more productive with C++'s strong typing, particularly when it comes to refactoring a big chunk of code.

C++ data is, of course, untyped. Sure, its variables are typed, but they can and do lie about the data. Consider, for example, the endless unresolved and unresolvable discussions about whether it should necessary (for general purpose libraries) or impossible (for assertions and optimisation) to "cast away constness".

If you want a strongly typed OO language, you have to use something like Smalltalk or Java. The refactoring capabilities of a Java or a Smalltalk environment are decades ahead of C++.
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #83 on: February 17, 2016, 07:32:16 pm »
Can you tell me what do you look for in a interview? How does a candidate with no experience shows you that he know how to program embedded systems?

The simplest technique, which can be very revealing, is to ask them to present what they've done, then to talk about the decisions they made and what they would change now they have 20:20 hindsight.

If they have no experience, they can't show they can program embedded systems. The experience doesn't have to be professional; hobby/amateur can be acceptable - and even desirable.
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline Sal Ammoniac

  • Frequent Contributor
  • **
  • Posts: 942
  • Country: us
    • Embedded Tales Blog
Re: Which microcontroller should I learn?
« Reply #84 on: February 17, 2016, 09:35:52 pm »
Can you tell me what do you look for in a interview? How does a candidate with no experience shows you that he know how to program embedded systems?

A candidate with no experience, by definition, doesn't know how to program embedded systems. Just because you don't have professional experience doesn't mean you have no experience--lots of people have plenty of experience doing embedded programming as a hobby. As a hiring manager, I'd certainly consider hiring someone with hobby-level experience, but I would certainly question them closely to try and get an idea of how much they really know and how much is just BS. I've interviewed plenty of people who's only experience with a language, for example, was reading "Learn XX in 24 Hours" the night before the interview. It doesn't take an experienced interviewer long to root out these candidates and show them the door.

Here are some of the things I ask candidates for embedded software positions:

1. What's the difference between re-entrant, thread-safe, and position-independent code?
2. How would you write a bootloader for a microcontroller with only a single FLASH region?
3. What does the C keyword "volatile" do and when/how is it used? Same for "const" and "static".
4. Draw the state diagram for a simple FSM on the whiteboard (a 4-way traffic signal is a good starting place).
5. What is interrupt latency and why is it important?
6. What's the difference between a semaphore and a mutex and when would you use them?
7. What is a critical section and how would you implement one?
8. Have you used an oscilloscope? A logic analyser? Give me examples of how you've used them.
9. What is a pull-up resistor used for? How about a pull-down resistor?
10. What's the difference between a successive approximation ADC and a Sigma-Delta ADC?
11. What are the differences between SPI and I2C?
12. How fast do you have to sample a 10 kHz signal to faithfully reproduce it?
« Last Edit: August 27, 2019, 08:46:09 pm by Sal Ammoniac »
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #85 on: February 17, 2016, 09:51:20 pm »
Unfortunately there are a lot of people out there which just talk a lot of bullshit so when interviewing I let the candidates make a test with relevant questions. That works really well to get an idea of their capabilities and doesn't take asking so many questions. The test results can also lead to asking more questions about their strong and weak points.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #86 on: February 17, 2016, 11:20:24 pm »
Here are some of the things I ask candidates for embedded software positions:
...

11 of 12 passed, can I have a chance  :D :D :D ?
 

Offline obiwanjacobi

  • Frequent Contributor
  • **
  • Posts: 948
  • Country: nl
  • What's this yippee-yayoh pin you talk about!?
    • Marctronix Blog
Re: Which microcontroller should I learn?
« Reply #87 on: February 18, 2016, 08:04:17 am »
That line of questioning is soo last century. I would look for potential, is this person able to pick up new things quickly, does he/she grasp new concepts quickly, is he/she passionate about this stuff. The rest can be learned and is then real knowledge instead of (read) information.
Arduino Template Library | Zalt Z80 Computer
Wrong code should not compile!
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #88 on: February 18, 2016, 09:17:44 am »
That line of questioning is soo last century. I would look for potential, is this person able to pick up new things quickly, does he/she grasp new concepts quickly, is he/she passionate about this stuff. The rest can be learned and is then real knowledge instead of (read) information.

I have sympathy with that, but I interpreted the questions as being a starting point from which you can probe their level of experience.

If someone attempts to bullshit the difference between I2C and SPI, that's a bad sign. If they say "I don't know in detail, but ISTR...", that's OK.

If someone hasn't heard of re-entrant, thread-safe, PIC code, or scopes/LAs, mutex/semaphores, interrupt latency, then I know I'd have to teach them a lot.

If they don't know what an FSM is, or remembers they are used in compilers (don't laugh), I'd be worried.

If they gave the standard answer about const, I'd ask them whether it was possible to "cast away constness", and the desirability/undesirability of doing it.

If someone thinks they understand the effect of "volatile" in real-world C compilers and code, I'd think they have some experience but haven't been bitten by rare unreproducable "interactions".
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #89 on: February 18, 2016, 12:07:48 pm »
", but I don't feel like I'm really programming an embedded system, "

In case it hasn't been said, the arduino environment you have, the hardware, the ide, and the programmer, can be used to develop "real embedded programming".

So you have all you need right now to do what you want.
================================
https://dannyelectronics.wordpress.com/
 

Offline andyturk

  • Frequent Contributor
  • **
  • Posts: 892
  • Country: us
Re: Which microcontroller should I learn?
« Reply #90 on: February 18, 2016, 03:26:59 pm »
Can you tell me what do you look for in a interview? How does a candidate with no experience shows you that he know how to program embedded systems?

The simplest technique, which can be very revealing, is to ask them to present what they've done, then to talk about the decisions they made and what they would change now they have 20:20 hindsight.
Yep. Ask 'em what they've done, and what they're passionate about--hopefully that's something in the embedded world. Having passion for this kind of work is key. It's the only thing that'll get you through those nasty bug hunts where the gizmo falls over and you have no idea why.

Another great web-era interview technique is, "Show me your public git repos!"
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #91 on: February 18, 2016, 03:42:45 pm »
Can you tell me what do you look for in a interview? How does a candidate with no experience shows you that he know how to program embedded systems?

The simplest technique, which can be very revealing, is to ask them to present what they've done, then to talk about the decisions they made and what they would change now they have 20:20 hindsight.
Yep. Ask 'em what they've done, and what they're passionate about--hopefully that's something in the embedded world. Having passion for this kind of work is key. It's the only thing that'll get you through those nasty bug hunts where the gizmo falls over and you have no idea why.
This line of questioning won't tell you whether the person has real experience or is just telling fairy tales.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline andyturk

  • Frequent Contributor
  • **
  • Posts: 892
  • Country: us
Re: Which microcontroller should I learn?
« Reply #92 on: February 18, 2016, 03:57:30 pm »
This line of questioning won't tell you whether the person has real experience or is just telling fairy tales.
Sure it does. Folks with passion talk about products they've shipped, or projects they've done at home in their spare time. They've got war stories and can defend (or criticize) their own implementation choices.

Ha, can you imagine the interview conversation between me and tggzzz re C++?  ;D
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #93 on: February 18, 2016, 04:22:37 pm »
This line of questioning won't tell you whether the person has real experience or is just telling fairy tales.
Sure it does. Folks with passion talk about products they've shipped, or projects they've done at home in their spare time. They've got war stories and can defend (or criticize) their own implementation choices.
No it won't. From my experience: some people will lie and just tell stories during job interviews. There are those who just lurk around on an R&D department and listen to the stories of real engineers. A test/quiz is the only way to get solid information about someone's abilities.
« Last Edit: February 18, 2016, 04:24:13 pm by nctnico »
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline Sal Ammoniac

  • Frequent Contributor
  • **
  • Posts: 942
  • Country: us
    • Embedded Tales Blog
Re: Which microcontroller should I learn?
« Reply #94 on: February 18, 2016, 04:42:24 pm »
That line of questioning is soo last century. I would look for potential, is this person able to pick up new things quickly, does he/she grasp new concepts quickly, is he/she passionate about this stuff. The rest can be learned and is then real knowledge instead of (read) information.

That's okay for interviewing new college grads, although you still need to ask them technical questions. Case in point: I recently interviewed a candidate who was halfway through his last year of a four year EE program at a well-known and respected local university. This guy didn't know what a diode is.  :wtf:  I kid you not... How can you get through 3-1/2 years of an EE program and not know what a diode is? That's why I ask the technical questions.

When interviewing for positions that require senior people, I look for knowledge and experience in addition to passion and potential. By the time someone has gotten a few years into their careers they'd better have a good measure of knowledge and experience. Passion is important, but can't compensate for experience.
 

Offline andyturk

  • Frequent Contributor
  • **
  • Posts: 892
  • Country: us
Re: Which microcontroller should I learn?
« Reply #95 on: February 18, 2016, 05:54:42 pm »
No it won't. From my experience: some people will lie and just tell stories during job interviews. There are those who just lurk around on an R&D department and listen to the stories of real engineers. A test/quiz is the only way to get solid information about someone's abilities.
Well, if an interviewer can't tell fact from fiction, then that person should be part of the candidate's schedule. At least, not for the technical due diligence part.

To your point though, usually someone on the interview team will have a candidate demonstrate their ability with a quiz/test of some sort. But hopefully, the interview day won't consist solely of such quizzes.
 

Offline boost240

  • Newbie
  • Posts: 3
  • Country: ca
Re: Which microcontroller should I learn?
« Reply #96 on: February 18, 2016, 06:26:34 pm »
I have a similar problem as OP so I hope he doesn't mind if I jump in with my own thoughts.

I've always had an interest in technology/computers and over the last year it has grown immensely.  I've started to learn about the intricacies of the actual hardware and how it works.  I've been also been learning about electricity and electronics since the go hand in hand.  I've had an Arduino for a few years now but never really used it.  So I've decided that I would like to learn how to program microcontrollers for hobby reasons.  Maybe make an GPS/Alarm system for my car.  Or my own smart thermostat.  I want to bypass the Arduino environment because programming the bare metal gets me excited.  Plus it'll help me understand how CPUs work.  My issue is I can\t focus on one thing at a time.

I bought a great C programming book a few months ago but I haven't passed chapter 8 yet.  The reason being that when I get home I jump on the internet and I start looking at cool projects to make, different development boards, datasheets and etc.  In and of itself that's not bad, but I won't be able to do any of those things because I'm not learning C or how to actually program these chips.  Also, I'm in limbo because I decided to just learn to program the AVR 328p that came with the Arduino because it seems simple.  But then I'm like "maybe I should try a different board?".  Hmmm 16-bit?  ARM?  Maybe a TI board? Maybe, maybe, maybe.  I just want to be able to decide on a direction and actually stick to it and get the work done.

Anyone have any tips?  Please and thank you.
 

Online westfw

  • Super Contributor
  • ***
  • Posts: 3111
  • Country: us
Re: Which microcontroller should I learn?
« Reply #97 on: February 18, 2016, 06:46:12 pm »
Quote
I start looking at cool projects to make, different development boards, datasheets and etc.  In and of itself that's not bad, but I won't be able to do any of those things because I'm not learning C or how to actually program these chips. ... I'm in limb...
Having projects that match your current level of expertise is relatively important, and it's probably The Great Myth of self-education that you can learn everything you need by doing only "interesting" things.  Sometimes you just have to do the boring stuff as well.
 

Offline MT

  • Super Contributor
  • ***
  • Posts: 1273
  • Country: fo
Re: Which microcontroller should I learn?
« Reply #98 on: February 18, 2016, 06:53:18 pm »
People who can talk their way into a job often can talk their way out of a job, craftsmen you dont have to tell what to do rather just giving them the direction and they will find their way there and also the solution to the job/problem all in tranquility. Often during the problem solving they improve on the original functionality while reducing overall production cost and increase ease of use for end customer.

They are the very opposite to people with Dunning Kruger effect or regular narcissists.

But craftsmen as all other people can also suffer from not knowing their value and go way to cheap, but knowing your value does not equal to be a nice personality, you might be forced to "act" like a narcissist in a environment who are narcissistic to establish your value. But when 45+ your already obsolete as an engineer anyway! :-//

Dont forget loads of engineers are Asperger's! All engineering professions have a best before day a phenomenon established by HR who newer have a best before day! :rant:

Quote
So, I would like your opinion on which microcontroller should I learn.
Among other things, I would like to know which microcontroller is most in demand now and for the foreseeable future.
I'm a bit green on the subject.

So the answer to your question are, you should not become a engineer but a gardener!
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #99 on: February 18, 2016, 07:04:46 pm »
My issue is I can\t focus on one thing at a time.

Anyone have any tips?  Please and thank you.

Determination, self-discipline, and doing the work where there is no internet to distract you.
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline LHelge

  • Contributor
  • Posts: 21
  • Country: se
    • My project blog
Re: Which microcontroller should I learn?
« Reply #100 on: February 18, 2016, 07:28:32 pm »
Here are my 5 cents...

Stay away from Arduinos! If you would like to learn embedded programming Arduinos is the completely wrong way to go. They are great if you would like to complete a project quickly without really caring for the software or for rapid prototyping when you're already an experienced embedded programmer, but you will not learn very much.

Apart from the obvious, learning C and some assembly, you should also start learning to use the peripheral hardware of a microcontroller. My suggestion is to start with one of the older/simpler models of the PIC/AVR 8-bit mainly because they have quite short and comprehensive datasheets. Your first weeks with this will be 95% reading datasheets and 5% coding, working with a 100 page datasheet is easier than a 1000 page one. When you are comfortable in setting up timers,  uarts and such as well as navigating datasheets you should move up to a 32-bit microcontroller.

My recommendation is one of the ARM Cortex-M based microcontrollers which seems to gain a lot of popularity nowadays, at least here in northern Europe. Even though 8-bitters still are very common the, usually larger, 32-bitters both allow and require more complex software and hence more developer efforts. My favorite is the ST Microelectronics STM32-series but thats probably because I've used them more than the Cortex-M's from other suppliers.
My Project Blog
http://www.lhelge.se
 

Offline meerweten

  • Contributor
  • Posts: 42
  • Country: be
    • Greendigit Electronics
Re: Which microcontroller should I learn?
« Reply #101 on: February 18, 2016, 08:03:39 pm »
Arduino's are nice for small project that needs to be finnished in e very limited time.

as many might have said before, don't just use a micro to let a led blink, thats totaly misusing a µC.

the choice of what to use ( atleast for me) depends on the requirements of the producs.
in some cases i use 16 bitters (like the pic24), but in a recent project i use a efusA9 and program in C#.
don't just learn one type of micro, start with one.

i started with pic's like the pic16f628A, just because it has a large comunity, many diferent ide's and ofcourse a cheap programmer.
if you are staying with developmentboards it might not be a problem as some (like the arduino) have a 'build in' programmer.

the http://www.keil.com/mcbstm32f400/ is a easy board (arm Cortex™-M4) and is much more powerfull than a pic16.
but a pic16 might do a better job then an arm processor. it all depends on the application you are going to make.

Meerweten, Want meten is Weten
 

Offline LHelge

  • Contributor
  • Posts: 21
  • Country: se
    • My project blog
Re: Which microcontroller should I learn?
« Reply #102 on: February 18, 2016, 09:18:00 pm »
I agree completely about the Arduinos, but if you're greater goal is to learn embedded programming it's definitely wrong.

PIC16F648A is an excellent processor to start with, I revisited that one a few weeks back when i needed something in a DIP-package. Simple enough that you spend more time programming than scrolling through hundreds of pages in a datasheet.

That keil board seems really nice, perhaps one of the cheaper STM32 Discovery or Nucleo boards could be used as an intermediate step.
My Project Blog
http://www.lhelge.se
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #103 on: February 18, 2016, 09:43:30 pm »
Oh please no PICs  :palm: :palm: :palm:. Arduino is miles better than hacking assembly on an archaic PIC. If you are getting into embedded programming the experience from Arduino will be way more valuable because a lot of current day embedded programming is high-level.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Online Cerebus

  • Super Contributor
  • ***
  • Posts: 3887
  • Country: gb
Re: Which microcontroller should I learn?
« Reply #104 on: February 18, 2016, 10:25:29 pm »
Determination, self-discipline, and doing the work where there is no internet to distract you.

Pretty tough if you've chosen, or had foisted on you, one of those tools that requires you to be online just to use them!  :(
Anybody got a syringe I can use to squeeze the magic smoke back into this?
 

Offline NivagSwerdna

  • Super Contributor
  • ***
  • Posts: 1844
  • Country: gb
Re: Which microcontroller should I learn?
« Reply #105 on: February 18, 2016, 10:46:26 pm »
IMHO this is a poor question (but there are some good answers!)

It was suggested that you learn programming... that sounds like a very sensible suggestion... Any platform with a C compiler will provide an environment for that.

... then...

which processor you choose will depend on what you are trying to achieve, the onboard peripherals of these devices varies hugely, (there was an example recently with the 3D printer video that said a Quadrature Encoder influenced the choice)... you might need lots of UARTs, RTC, LCD Drivers, lots of timers, who knows what...

So you are better off finding a project of some kind and then going through the thought process of which processor you would select to minimise the off-chip logic etc, think about cost and why that might be important, maybe you need more than one core? who knows what... but it can only be framed in the context of a problem.

Then once you have some context you can start looking at specific IDEs, language implementations and the libraries they come with.

The next step (perhaps related to the previous one) is to understand how the language C or whatever maps to the registers and together with the datasheet how to squeeze the correct behaviour out of the hardware. 

The good thing about Arduino is that it provides a nice capable 328P or whatever hardware platform but the terrible thing is the 'wiring' hides away the hardware so if you don't dig deeper you won't actually understand how it works... just look at the number of PWM/Comparator options on the 328P datasheet if you don't believe me.

But... You can start with an Arduino clone board at almost zero cost, prototype something and when you feel ready drop the 'Arduino' and program it as an AVR using a Dragon or something similar, just don't stop tinkering until you get to the silicon (you should understand what an interrupt is and why it could cause dither or screw things up if it took too long and all those lovely things).

... but that being said... I've just updated my PIC programmer because I need to control a raw LCD display.

 :)

« Last Edit: February 18, 2016, 10:53:04 pm by NivagSwerdna »
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #106 on: February 18, 2016, 11:04:17 pm »
Determination, self-discipline, and doing the work where there is no internet to distract you.

Pretty tough if you've chosen, or had foisted on you, one of those tools that requires you to be online just to use them!  :(

Doesn't affect the first two, which are more important and are applicable to all aspect of life :)
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #107 on: February 18, 2016, 11:37:42 pm »
"Also, I'm in limbo because I decided to just learn to program the AVR 328p that came with the Arduino because it seems simple"

Embedded programming existed long people people invented those fancy 32 bit chips.

You can definitively learn to become a great embedded programmer on the avr, or that pic. No 16 bit or 32 bit chip needed.

Once you have mastered the avr and other chips of more complexity, you will find that the cores make minimum difference.

Your problem seems to be a lack of discipline, or a fear of learning.

Just commit yourself to a chip, any chip, and start with the boring stuff and you will come out the other end as a winner.
================================
https://dannyelectronics.wordpress.com/
 

Offline ea_man

  • Contributor
  • Posts: 23
  • Country: it
Re: Which microcontroller should I learn?
« Reply #108 on: February 19, 2016, 12:30:55 pm »
Anyone have any tips?  Please and thank you.
Get yourself in a course, a teacher will tell you what to do providing the best path to learn things. Ask for a detail course program, resources and examples used, better if there's a forum where the students can discuss.

Check if there's just a beginner level (may be noobs improvising) or if they have different levels and a solid path - vision, check if the lab has the right equipment (laptops and just standard arduino kit = not good. Many boards / uC / loads of components, custom kits for each class level = good) and if you can go there to practice.

As for the parent's question: Arduino (learn basics of programming, electronic, uC programming paradigms) -> learn C++ > learn to program AVR with ATmega328p on a breadboard (combinatory logic, "real" embedded programming) -> buy more Attinys -> step up to MSP432P40 or PSOC 
« Last Edit: February 19, 2016, 12:54:16 pm by ea_man »
 

Online Cerebus

  • Super Contributor
  • ***
  • Posts: 3887
  • Country: gb
Re: Which microcontroller should I learn?
« Reply #109 on: February 19, 2016, 02:11:40 pm »
Anyone have any tips?  Please and thank you.
Get yourself in a course, a teacher will tell you what to do providing the best path to learn things. Ask for a detail course program, resources and examples used, better if there's a forum where the students can discuss.


Classic "Didn't read the question".

The original poster's second sentence was "I'm about to finish college (mechatronics engineering) and I've only worked with arduino".

This guy's just finished what sounds like a degree level course. I somehow don't think he's looking at the level of enrolling on a course at the local technical college/extension college/adult education classes. He's not asking "How do I start" but "Where's best to go next".

Anybody got a syringe I can use to squeeze the magic smoke back into this?
 

Online Cerebus

  • Super Contributor
  • ***
  • Posts: 3887
  • Country: gb
Re: Which microcontroller should I learn?
« Reply #110 on: February 19, 2016, 02:18:37 pm »
Determination, self-discipline, and doing the work where there is no internet to distract you.

Pretty tough if you've chosen, or had foisted on you, one of those tools that requires you to be online just to use them!  :(

Doesn't affect the first two, which are more important and are applicable to all aspect of life :)

Pah! Self-discipline is over-rated. It tends to get between you and all those cream cakes, bottles of beer and other procrastinatory diversions.  :P
Anybody got a syringe I can use to squeeze the magic smoke back into this?
 

Offline captbill

  • Contributor
  • Posts: 37
  • Country: us
Re: Which microcontroller should I learn?
« Reply #111 on: February 19, 2016, 05:43:24 pm »
Arduino's are nice for small project that needs to be finnished in e very limited time.

as many might have said before, don't just use a micro to let a led blink, thats totaly misusing a µC.

the choice of what to use ( atleast for me) depends on the requirements of the producs.
in some cases i use 16 bitters (like the pic24), but in a recent project i use a efusA9 and program in C#.
don't just learn one type of micro, start with one.

i started with pic's like the pic16f628A, just because it has a large comunity, many diferent ide's and ofcourse a cheap programmer.
if you are staying with developmentboards it might not be a problem as some (like the arduino) have a 'build in' programmer.

the http://www.keil.com/mcbstm32f400/ is a easy board (arm Cortex™-M4) and is much more powerfull than a pic16.
but a pic16 might do a better job then an arm processor. it all depends on the application you are going to make.

You have pointed out a very important consideration when you say "a PIC16 might do a better job than an ARM". Very important because, more times than not, an ARM is overkill in the majority of real life scenarios. You just don't need so much processor to do "everyday things". The ARM enables you to do "programming" whereas a PIC(or like) demands you do full scale "engineering" , which I think is what OP (and all of us) is ultimately discussing here.

Ultimately, a well engineered approach is one where you have the right chip for the project, just like you want well fitting clothes. Also, this keeps you on your toes and demands you to become a better programmer whereas with ARM what you end up with the luxury to design without limitations, which invites poor practices, bad habits.

I am quite new to all this myself and don't mean to sound like an expert whatsoever. I am trying to piece together a system to address these same concerns and it's important to be prepared from the starting gate, which is where I am, essentially.



 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #112 on: February 19, 2016, 06:07:49 pm »
Quote
more times than not, an ARM is overkill in the majority of real life scenarios.

Many times, a 4Mhz PIC or AVR is an overkill too.
================================
https://dannyelectronics.wordpress.com/
 

Offline Sal Ammoniac

  • Frequent Contributor
  • **
  • Posts: 942
  • Country: us
    • Embedded Tales Blog
Re: Which microcontroller should I learn?
« Reply #113 on: February 19, 2016, 06:33:21 pm »
You have pointed out a very important consideration when you say "a PIC16 might do a better job than an ARM". Very important because, more times than not, an ARM is overkill in the majority of real life scenarios. You just don't need so much processor to do "everyday things".

That is quite true for commercial work when you have to consider the BOM cost of the product. Using a PIC16 might be indicated if it costs less than an ARM and you're making millions of units.

If you're making a one-off or a limited run, say 100 pieces, of a product, then BOM cost isn't a big deal and you have to trade off cost of the part versus the engineering time required to implement the firmware. Sure, a PIC16 might save you $0.50 over an ARM Cortex-M0, but it's not worth it if your engineers spend many extra hours trying to shoe-horn the required functionality into the PIC.

It might be more fun and more "elegant" to try and make due with a lesser MCU, but this sometimes doesn't make engineering sense.

For Hobby projects, on the other hand, anything goes. The cost differential of even a high-end ARM Cortex-M part versus a PIC16 doesn't matter. Most of my hobby projects take a few hundred hours of work, so spending $12 for an ARM Cortex-M4 gets lost in the noise. Hell, I spend more than that on lunch every day.
 

Offline ea_man

  • Contributor
  • Posts: 23
  • Country: it
Re: Which microcontroller should I learn?
« Reply #114 on: February 19, 2016, 10:32:14 pm »
Classic "Didn't read the question".
Sorry if my quoting was misleading, I'll try again:

I have a similar problem as OP so I hope he doesn't mind if I jump in with my own thoughts.

I've always had an interest in technology/computers and over the last year it has grown immensely.  I've started to learn about the intricacies of the actual hardware and how it works.  I've been also been learning about electricity and electronics since the go hand in hand.  I've had an Arduino for a few years now but never really used it.  So I've decided that I would like to learn how to program microcontrollers for hobby reasons.  Maybe make an GPS/Alarm system for my car.  Or my own smart thermostat.  I want to bypass the Arduino environment because programming the bare metal gets me excited.  Plus it'll help me understand how CPUs work.  My issue is I can\t focus on one thing at a time.

I bought a great C programming book a few months ago but I haven't passed chapter 8 yet.  The reason being that when I get home I jump on the internet and I start looking at cool projects to make, different development boards, datasheets and etc.  In and of itself that's not bad, but I won't be able to do any of those things because I'm not learning C or how to actually program these chips.  Also, I'm in limbo because I decided to just learn to program the AVR 328p that came with the Arduino because it seems simple.  But then I'm like "maybe I should try a different board?".  Hmmm 16-bit?  ARM?  Maybe a TI board? Maybe, maybe, maybe.  I just want to be able to decide on a direction and actually stick to it and get the work done.

Anyone have any tips?  Please and thank you.
Get yourself in a course, a teacher will tell you what to do providing the best path to learn things. Ask for a detail course program, resources and examples used, better if there's a forum where the students can discuss.

Check if there's just a beginner level (may be noobs improvising) or if they have different levels and a solid path - vision, check if the lab has the right equipment (laptops and just standard arduino kit = not good. Many boards / uC / loads of components, custom kits for each class level = good) and if you can go there to practice.

As for the parent's question: Arduino (learn basics of programming, electronic, uC programming paradigms) -> learn C++ > learn to program AVR with ATmega328p on a breadboard (combinatory logic, "real" embedded programming) -> buy more Attinys -> step up to MSP432P40 or PSOC 
 

Offline leftek

  • Contributor
  • Posts: 28
  • Country: cy
Re: Which microcontroller should I learn?
« Reply #115 on: February 20, 2016, 11:09:01 am »
I have started with PIC microcontroller with MikroC compiler. Have many libraries and is easy way for start.
Any microcontroller you will choose is the right choice. There are not bad choice for microcontrollers.
After you will learn, the change of it will be very easy.  :)
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #116 on: February 20, 2016, 02:20:47 pm »
Quote
Any microcontroller you will choose is the right choice.

Absolutely agree. Rather than wasting time worrying about which mcu to learn, you should just pick one and start learning.
================================
https://dannyelectronics.wordpress.com/
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #117 on: February 20, 2016, 02:56:05 pm »
There are not bad choice for microcontrollers.
After you will learn, the change of it will be very easy.  :)
The change won't be easy if you have choosen a microcontroller which is very limited (processing speed, memory, etc). One of the very nice things about NXP's ARM controllers is that NXP works very hard to keep the peripherals the same. The problem you often encounter when changing to a different microcontroller is that you need to rewrite a lot of code which deals with peripherals or the clock setup.
If walk into a dead-end road (for example starting with an 8 bit PIC) then you will need to change to something completely different at some point. It is better to walk into a road with a clear path towards higher end devices without needing to rewrite lots of code you have written before.

Edit: The point is: there is most definitely a bad choice!
« Last Edit: February 20, 2016, 06:14:49 pm by nctnico »
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #118 on: February 20, 2016, 06:17:52 pm »
Quote
Any microcontroller you will choose is the right choice.

Absolutely agree. Rather than wasting time worrying about which mcu to learn, you should just pick one and start learning.

Ever since the late 70s, for questions such as these the key determining factor has been the development environment.

Pick a development environment that is comfortable and offers the right facilities, then choose a MCU/board that works with that environment.
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline cdonate

  • Contributor
  • Posts: 18
  • Country: br
Re: Which microcontroller should I learn?
« Reply #119 on: February 20, 2016, 09:16:30 pm »
Thanks to everybody who gave his 2 cents. I do appreciate every comment and it really changed my views. on the matter.

Quote
IMHO this is a poor question (but there are some good answers!)

Yes, I can see that now, it was the wrong question. But I think that's the point of coming here, now I have a much better ideia how to proceed.

I'm taking a step back and focusing on learning good C programming and the development of embedded systems. I'm starting with these two book: http://www.amazon.com/Making-Embedded-Systems-Patterns-Software/dp/1449302149 and http://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628.

The first one focus on the development of embedded systems, a very nice read. The second I don't think needs explanation.

After that I'll go to an 8-bitter, the Atmega328PB, the new version.  And since a common theme among the answers was that I needed to know multiple uCs, I'll try a ARM also. Maybe the Tiva C or a STM, since I have both here.

I already have a possible project for the 325PB that uses sensors, PWM, interrupts and ADC. I think it'll give an somewhat broad idea how to use various aspects of the IC. The ARM I still have no idea what to do.

What do you guys think? Is this a good enough path?

I'm working as a front-end designer for 3 years now (couldn't work as an engineer until finishing college), since the middle of my bachelors degree and I can't stand it anymore, I need to move on to another area, and working with embedded system is my goal.

Please, any tips are still welcome.
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #120 on: February 20, 2016, 09:38:40 pm »
Thanks to everybody who gave his 2 cents. I do appreciate every comment and it really changed my views. on the matter.

You will find that it is usually relatively easy to give the right answer to a question. But it is much more important - and much more difficult - to determine which is the right question. The right question is one where the answer causes you to go this way or that way.

Quote
What do you guys think? Is this a good enough path?

Whatever you choose and enjoy is a good enough path. (The best is the enemy of the good!)
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #121 on: February 21, 2016, 02:07:12 am »
Quote
What do you guys think? Is this a good enough path?

Once you have a good programming habit, you will find that the mcu cores are for the most part transparent, and peripherals are highly alike in terms of functionality and vastly different in terms of implementation and complexity. Blinking a led for example is roughly the same on an AVR and on a Cortex-M4. Getting the pwm to work on the AVR and a Cortex-M4 involve roughly the same thought process but the actual code will differ significantly.

All this 8-bit vs. 32-bit thing is mostly marketing. The differentiation and steep learning curve is in the peripherals.

As to programming books, well, K&R is very good in my view and personally I like to read up on large companies' programming guide books. Running Lint or MISRA on your code can be quite educational as well.

Also, you will find that it is much easier to learn if you actually code to a chip. In this case, you are fortunate in that you have all the tools to practice your learning on.

The AVRs are a good chip for that purpose as they are simple to set up and easy to get going - minimizing distractions and frustrations a beginner may have with a more complex chip like those ARM chips.
================================
https://dannyelectronics.wordpress.com/
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #122 on: February 21, 2016, 02:18:34 am »
You keep insisting ARM microcontrollers are complicated but it highly depends on which you choose. I can name a few 8 bit controllers with very obfustigated peripherals and ARM controllers with very simple peripherals. For example: NXP's ARM controllers use the 16450/16550 UART which has been the standard on PCs for decades so there is a huge amount of sourcecode and knowledge for that particular UART.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #123 on: February 21, 2016, 03:33:38 pm »
PowerPC and MIPS add more complexity by sever orders of magnitude  :D

ARM ones are the most friendly and comfortable side of the RISC family
while, in my opinion, the bloody-dead MC88K was the most elegant
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #124 on: February 21, 2016, 03:35:19 pm »
take an embedded ARM module by Olimex, be sure it's supported by Keil
and have fun

that's all folks
 

Offline JacquesBBB

  • Frequent Contributor
  • **
  • Posts: 784
  • Country: fr
Re: Which microcontroller should I learn?
« Reply #125 on: February 21, 2016, 05:51:39 pm »
I've had an Arduino for a few years now but never really used it.  So I've decided that I would like to learn how to program microcontrollers for hobby reasons. 
I want to bypass the Arduino environment because programming the bare metal gets me excited.  Plus it'll help me understand how CPUs work.  My issue is I can\t focus on one thing at a time.

I bought a great C programming book a few months ago but I haven't passed chapter 8 yet.  T

Anyone have any tips?  Please and thank you.

It is never easy to work by yourself with books. This needs a capacity of concentration and to be highly motivated.
Studies at school or at the University are more easy.

Now,  you have the possibility to have something in-between, with the MOOC system,  the  free online courses.
But beware, it you zap from one course to another, you will not learn anything.
The only way to go is to  register to one course, and to  follow it  completely and do the assignments.

For what you are looking for, there is a great MOOC that fits exactly your needs.

https://www.edx.org/course/embedded-systems-shape-world-utaustinx-ut-6-03x#!

See my post mentioning it

https://www.eevblog.com/forum/beginners/stepping-out-from-arduino-start-on-january-20-with-keil-ide-and-ti-launchpad/msg845895/#msg845895

It is still time for registering,  and  you will learn a lot on the inside of MCU,  with nice real boards experiments
using a professional  IDE with debugging (Keil).
This will open you the gate to any possible MCU or IDE.
« Last Edit: February 21, 2016, 05:59:31 pm by JacquesBBB »
 

Online westfw

  • Super Contributor
  • ***
  • Posts: 3111
  • Country: us
Re: Which microcontroller should I learn?
« Reply #126 on: February 22, 2016, 02:25:00 am »
 

Offline asgard20032

  • Regular Contributor
  • *
  • Posts: 184
Re: Which microcontroller should I learn?
« Reply #127 on: February 22, 2016, 03:38:25 am »
My advice : Stay away from arduino and API like arduino.

1) They are overpriced. Today, you can get development board for many mcu brand, including some atmega, for around 10$. Getting an arduino at such price is an impossible task, at least, if you want a legit mcu. I don't recommend buying non legit chip, it may just waste your time debugging some "extra non intended feature", not present in the official chip, also know as bug. Those chip are maybe not false mcu, but maybe just either stolen, or one that failed some test and got saved from garbage from some aliexpress seller. Save yourself the effort of debugging non legit chip. Of course, you may get some legit arduino at nice price in some event, like last year arduino day from sparkfun.

2) Lack of debugging : In the official arduino, the only mean of debugging you got is printing over serial. But what happen if the bug has to do with serial? Or the debugging over serial break the realtime of the project? print take lot of processor time. Also, if you intend to really learn embedded system and work your way trough register, how may you debug setting up the frequency and uart with print debugging without being able to print?

3) Using API such as arduino + wanting to get your way at register level = large risk to break some arduino API related stuff. You never know, by setting up pwm or timer or changing frequency which part of the API you may break. For example, by re configuring timer, you may break  the delay function(incorrect delay value). And unfortunately, which feature you may break by changing which peripheral is not the most documented thing. So by wanting to do thing progressively by mixing arduino stuff + your own register level (aka the real way stuff) may be more error prone than going the full register way.

4) Programming on arduino teach some bad programming habbit. Multitasking with delay, no interrupt (except by going to register level and by forcing some handler, see point 3, MAYBE breaking up some API), is not a good thing. What you really need is going sleep + interrupt + state machine. When mcu doing nothing, no delay, but sleep. Some interrupt watch out for some event and guide out the state machine. Another way is to go RTOS, or to mix up RTOS + state machine in each process/thread.

My recommendation, go with a developpment board priced around 10-20$, from a legit source, with either onboard debugger or a porribility to plug your own debugger. (Altought you may plug a jtag to arduino, it require some modification to the board, and debugging the debugger -> mcu interface... no thanks). But yeah, arduino is a good idea. When you design, try to make thing as modular as possible, to make reusable code. Take example on the arduino API, and adapt it to your programming.

Some possible board: Any ST discovery/nucleo board, any launchpad from TI (in TIVA or msp430/msp432, don't touch hercule or c2000, too much advanced/specialized stuff), Freedom board from Freescale, some atmel xplained board (i think its the name), those nice psoc board... Almost every mcu has some affordable board. Just think about which path in the long way you want to follow.

Doing low power stuff? msp430/msp432, stm32l0/stm32l1/stm32l4, some kinetis, ANY silicon labs mcu

Want to get in the big train and get mainstream as much as possible? : arm cortex m0/m3/m4, as your power need rise.

Want to get lot of connectivity? Maybe you like IoT project? arm cortex or pic32 got many connectivity

Your personal project is geared toward DSP or radio frequency? Why not some cortex m3/m4 or pic23/dspic

You are more an hardware guy and thinking with the practical side of the project and don't want to focus too much on the programming aspect? Why not cut off your development time and go with some 8 bit mcu? AVR is the easiest one, very clear datasheet. Except if you need CAN or some other functionality, don't go with pic18. Pic18 is overpriced performance wise. AVR also, but at least you get a nice architecture. But if your programming need is simple enough and just want some more advanced peripheral, why not go with pic16? Not as overpriced as pic18, and include the most recent peripheral from microchip, including hardware PID controller... YEP, a full PID where you just set up 2-4 register, and no software overhead.

Just try to figure out the main area of focus of you future personal project, and we may help you selecting the perfect mcu for your need.
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #128 on: February 22, 2016, 11:56:11 am »
"msp432"

I would like to see anyone taking a stock download of ccs, a stock example downloaded from ti and a stock msp432 and show that they work out of the box.

That project was basically pushed out before it is ready. Shame on ti.
================================
https://dannyelectronics.wordpress.com/
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #129 on: February 22, 2016, 12:02:00 pm »
"register level ="

Like a vortex m chip of your choice, set up the clock, set up uart transmission via the interrupt. All with registers.

And then do the same with the library and you will understand why libraries are used.

This no-library non sense is the same as the no-C nonsense of yesteryear: they never understood that the world have changed and chips are getting so complex that to maintain productivity, you have to rely on libraries, OEM, your own, or a 3rd party.
================================
https://dannyelectronics.wordpress.com/
 

Offline tggzzz

  • Super Contributor
  • ***
  • Posts: 10501
  • Country: gb
    • Having fun doing more, with less
Re: Which microcontroller should I learn?
« Reply #130 on: February 22, 2016, 03:29:10 pm »
This no-library non sense is the same as the no-C nonsense of yesteryear: they never understood that the world have changed and chips are getting so complex that to maintain productivity, you have to rely on libraries, OEM, your own, or a 3rd party.

The buy-vs-build debate is, with good reason, never ending. Decisions must be continually re-evaluated without dogma.

Many many people have been burnt by trying to use a library that had subtle incompatibilites with the way their system was designed. Classic problems areas include re-entrancy, low power, multiple threads/processes, incompatible C compiler flags, and changes/incompatibilities between various vintages of C/C++ compiler standards and implementations.
There are lies, damned lies, statistics - and ADC/DAC specs.
Glider pilot's aphorism: "there is no substitute for span". Retort: "There is a substitute: skill+imagination. But you can buy span".
Having fun doing more, with less
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #131 on: February 22, 2016, 05:28:55 pm »
Libraries usually don;t behave as expected/documented so when using a library it must solve a difficult problem. OTOH investing time into learning how to use a library can be beneficial because you'll have an off-the-shelve solution for a particular problem. IOW don't throw a library out at the first sign of trouble but do careful research with the help fora and other online resources about the particular library to find it's strengths and weaknesses.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline Sal Ammoniac

  • Frequent Contributor
  • **
  • Posts: 942
  • Country: us
    • Embedded Tales Blog
Re: Which microcontroller should I learn?
« Reply #132 on: February 22, 2016, 06:37:44 pm »
MIPS add more complexity by sever orders of magnitude  :D

MIPS is orders of magnitude more complex than what? ARM Cortex?

Nonsense. MIPS is a very simple architecture, even compared to ARM Cortex.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #133 on: February 22, 2016, 06:51:30 pm »
MIPS add more complexity by sever orders of magnitude  :D

MIPS is orders of magnitude more complex than what? ARM Cortex?

Nonsense. MIPS is a very simple architecture, even compared to ARM Cortex.

we are talking about two different things: the HDL complexity, the programming assembly complexity
in my experience yes, if you want to implement a MIPS machine in VHDL (I did), it's the simplest in the RISC family
while if you want to program MIPS in assembly (I have written a lot of assembly code, including a monitor), it adds more complexity in your code
as you have to deal with a lot of troubles which are handled by hardware in ARM
 

Offline nctnico

  • Super Contributor
  • ***
  • Posts: 18331
  • Country: nl
    • NCT Developments
Re: Which microcontroller should I learn?
« Reply #134 on: February 22, 2016, 08:15:06 pm »
MIPS add more complexity by sever orders of magnitude  :D
MIPS is orders of magnitude more complex than what? ARM Cortex?

Nonsense. MIPS is a very simple architecture, even compared to ARM Cortex.
Having written assembly for both they are both equally complicated with MIPS having the one-delay-slot disadvantage because the instruction after each jump gets executed as well. The biggest disadvantage of using MIPS is that when you have cross-platform sourcecode you'll often find an x86 and ARM assembly optimised version but no MIPS assembly optimised version. It gets worse if software depends on pieces of assembly code to work on a certain platform and there is -again- no MIPS support (the older firefox versions for example).

So from a micro perspective there is not much difference but looking at the big picture the difference is huge and MIPS is definitely the lesser choice.
There are small lies, big lies and then there is what is on the screen of your oscilloscope.
 

Offline Sal Ammoniac

  • Frequent Contributor
  • **
  • Posts: 942
  • Country: us
    • Embedded Tales Blog
Re: Which microcontroller should I learn?
« Reply #135 on: February 22, 2016, 09:01:14 pm »
while if you want to program MIPS in assembly (I have written a lot of assembly code, including a monitor), it adds more complexity in your code
as you have to deal with a lot of troubles which are handled by hardware in ARM

That I agree with. You pretty much have to do everything explicitly in MIPS assembly code versus an ARM. A good example is an interrupt: a MIPS CPU just saves the PC and vectors to the handler, nothing more. An ARM will save some of the registers as well, minimising what you need to do in the handler. This extends to other operations as well.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #136 on: February 22, 2016, 11:22:50 pm »
Having written assembly for both they are both equally complicated

mmm, on the linux platform I find more complexity due to the cache and due to all the mips variants, and there are too many variants in the MIPS family (including IDP, Toshiba, NEC, …. and SONY). Attempting to port linux 4.* to SGI Octane (for SMP purpose, Toshiba R14K/MIPS4, now it works) was not so easy due to the cache, which must done in assembly.

When I programmed the playstation2 I had a lot of troubles with the TLB, which was just different from what I was expecting.
 

Offline legacy

  • Super Contributor
  • ***
  • Banned!
  • Posts: 4415
  • Country: ch
Re: Which microcontroller should I learn?
« Reply #137 on: February 22, 2016, 11:28:42 pm »
I am afraid the PowerPC is the worst: the EIEIO nightmare

EIEIO stands for Enforce In-order Execution of I/O, it's a machine code instruction used on the PowerPC computer processor which prevents one memory or I/O operation from starting until the previous memory or I/O operation completed. This instruction is needed as I/O controllers on the system bus require that accesses follow a particular order, while the CPU reorders accesses to optimize memory bandwidth usage.

It usually causes a lot of headaches in avionics (BSP, BPUM, PUM, AUTOMA, … low level behind the hood)
 

Offline dannyf

  • Super Contributor
  • ***
  • Posts: 8229
  • Country: 00
Re: Which microcontroller should I learn?
« Reply #138 on: February 22, 2016, 11:46:19 pm »
To the OP,

This key is not get paralyzed by the fear of picking up the wrong mcu to learn. If you are going to be a great embedded programmer, you are going to find that out on an avr just as well as you will find that out on a cortex m or pic24, etc.

People have long been great embedded programmers in the 1bit mcu days. So just start the journey learning.
================================
https://dannyelectronics.wordpress.com/
 

Offline ez24

  • Super Contributor
  • ***
  • Posts: 3092
  • Country: us
  • L.D.A.
Re: Witch microcontroller should I learn?
« Reply #139 on: February 23, 2016, 12:28:27 am »
If you're interested in ARM, there is an online course from University of Texas that started this January 20:

https://www.eevblog.com/forum/beginners/free-course-ut-6-03x-embedded-systems-on-edx-starting-now/msg846982/#msg846982

Although it already started, I guess you can still enroll. The course is based around the TI implementation of ARM (TM4C123), and you can get the evaluation board directly from TI: https://store.ti.com/Tiva-C-LaunchPad.aspx. I got mine delivered in 4 days, to Sao Paulo.


FYI  As of Feb 22 2016 this course is still open.  I just enrolled and ordered the kit with the wi-fi from Digit Key.  Price about the same as Element 14 (Newark)  With Newark I could see the complete price and with Digit Key I could not see the exact shipping costs.  Digit Key might have cheaper shipping if I knew the shipping weight.

Now to try and get caught up.  Thanks 1xrtt
YouTube and Website Electronic Resources ------>  https://www.eevblog.com/forum/other-blog-specific/a/msg1341166/#msg1341166
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf