Which microcontroller should I learn? - Page 1
Forum section: electronics / general

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 12:04:19 am
content: 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!

author: nctnico
author_rank: Super Contributor
timestamp: February 08, 2016, 12:05:58 am
content: Did you use the search function of the forum? This has been asked many times!

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 12:15:15 am
content: 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.

author: dannyf
author_rank: Super Contributor
timestamp: February 08, 2016, 01:08:29 am
content: "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.

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 01:25:32 am
content: learn good programming instead

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 01:26:51 am
content: Quote from: legacy on February 08, 2016, 01:25:32 amWell, that's no help...

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 01:28:22 am
content: Quote from: dannyf on February 08, 2016, 01:08:29 amThank for the reply. Tell me, should I focus on a specific one? v6, v7? Is there a big difference in programming different versions?

author: 1xrtt
author_rank: Regular Contributor
timestamp: February 08, 2016, 01:33:26 am
content: 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/#msg846982Although 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.

author: 0xdeadbeef
author_rank: Super Contributor
timestamp: February 08, 2016, 01:34:11 am
content: Weren't all the witch microcontrollers burned?

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 01:36:28 am
content: Quote from: 1xrtt on February 08, 2016, 01:33:26 amThat's awesome! Thanks companheiro.

author: TheCharels
author_rank: Contributor
timestamp: February 08, 2016, 01:42:04 am
content: Quote from: 0xdeadbeef on February 08, 2016, 01:34:11 amThey tried but the engineers involved needed to sacrifice the virgins, none of the engineers survived.

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 02:03:21 am
content: Quote from: cdonate on February 08, 2016, 01:26:51 amIt 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

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 02:04:33 am
content: Quote from: 0xdeadbeef on February 08, 2016, 01:34:11 am

author: Bruce Abbott
author_rank: Frequent Contributor
timestamp: February 08, 2016, 02:15:32 am
content: Quote from: cdonate on February 08, 2016, 12:15:15 amYou 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 AwayQuoteWith 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.QuoteArduino 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 (anyMCU) and try to program it from scratch with your own code. Then do it again with a different compiler.

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 02:18:45 am
content: Quote from: 0xdeadbeef on February 08, 2016, 01:34:11 amWell, that was embarassing...

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 02:30:31 am
content: Quote from: Bruce Abbott on February 08, 2016, 02:15:32 amYou make very good points. But, after reading, I'm still unsure where to start.I get what you are saying, butQuotekinda leaves me the same way.Where do YOU think I should start?

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 02:37:45 am
content: Quote from: cdonate on February 08, 2016, 02:07:55 amsure, 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 ?) instead of caring about important things, and as result their code is usually a fsck crapQuote from: cdonate on February 08, 2016, 02:07:55 amI 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

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 02:40:33 am
content: Quote from: legacy on February 08, 2016, 02:37:45 amIf 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.

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 02:44:27 am
content: Quote from: blueskull on February 08, 2016, 02:37:39 amWell, 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.

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 02:46:25 am
content: Quote from: blueskull on February 08, 2016, 02:37:39 ameven if arduino is good for rapid prototyping, there are at least three negative aspects1) arduino's examples, libraries, etc, are (just to use an euphemism) usually not so good2) arduino call the programming "sketch" instead of "code"3) arduino doesn't have the concept of "module"

author: cdonate
author_rank: Contributor
timestamp: February 08, 2016, 02:53:21 am
content: Quote from: legacy on February 08, 2016, 02:46:25 amWell, since I can use .c, .cpp and .h in ArduinosketchesI 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 athttp://www.visualmicro.com/.Using Arduino to blink a LED is very different than creating a wireless array of sensors.

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 03:01:50 am
content: Quote from: blueskull on February 08, 2016, 02:51:18 amyes, and forget to be employed in avionics, for example

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 03:04:32 am
content: Quote from: blueskull on February 08, 2016, 02:51:18 amoh, duck

author: zapta
author_rank: Super Contributor
timestamp: February 08, 2016, 03:33:38 am
content: Quote from: legacy on February 08, 2016, 02:46:25 amCan 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.

author: Morgoroth
author_rank: Regular Contributor
timestamp: February 08, 2016, 04:24:06 am
content: 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-exp432p401rGood luck.

author: pmbrunelle
author_rank: Regular Contributor
timestamp: February 08, 2016, 04:53:14 am
content: Quote from: Bruce Abbott on February 08, 2016, 02:15:32 amIf 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.

author: westfw
author_rank: Super Contributor
timestamp: February 08, 2016, 04:59:36 am
content: 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.

author: eck
author_rank: Contributor
timestamp: February 08, 2016, 07:56:27 am
content: Quote from: cdonate on February 08, 2016, 12:04:19 amMaybe a bit outdated, but still interesting:http://bd.eduweb.hhs.nl/es/2014-embedded-market-study-then-now-whats-next.pdf

author: obiwanjacobi
author_rank: Super Contributor
timestamp: February 08, 2016, 07:57:26 am
content: 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.

author: nctnico
author_rank: Super Contributor
timestamp: February 08, 2016, 09:13:12 am
content: Quote from: cdonate on February 08, 2016, 01:26:51 amActually 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.

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 10:13:02 am
content: Quote from: westfw on February 08, 2016, 04:59:36 amprecisely

author: Throy
author_rank: Regular Contributor
timestamp: February 08, 2016, 11:48:41 am
content: I agree with learning to program first. The rest is just being able to read datasheets IMO.

author: spudboy488
author_rank: Regular Contributor
timestamp: February 08, 2016, 12:50:46 pm
content: 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.

author: Bruce Abbott
author_rank: Frequent Contributor
timestamp: February 08, 2016, 05:25:59 pm
content: Quote from: pmbrunelle on February 08, 2016, 04:53:14 amSo you think he should just stick with the Arduino?

author: MT
author_rank: Super Contributor
timestamp: February 08, 2016, 05:41:14 pm
content: 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!

author: tggzzz
author_rank: Super Contributor
timestamp: February 08, 2016, 06:20:58 pm
content: Quote from: cdonate on February 08, 2016, 12:04:19 amIt doesn't matter which one you learn for many reasons, including:yourfirstemployer will use a different MCUanyspecificMCU will be obsolete in three years time, and then you will incorrectly think you are back at the beginninghorrifyinglylittle 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.

author: Aodhan145
author_rank: Frequent Contributor
timestamp: February 08, 2016, 06:37:57 pm
content: Quote from: 1xrtt on February 08, 2016, 01:33:26 amI didnt like that course. It was way to long/bulky for the little information in it.

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 07:02:17 pm
content: nostalgia makes itself called 3 3 2Quote from: tggzzz on February 08, 2016, 06:20:58 pmbought for a sentimental affection for the past, for a period with happy personal associationswhen Unix was not linux, and tools were not open source

author: dannyf
author_rank: Super Contributor
timestamp: February 08, 2016, 08:29:02 pm
content: 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.

author: lem_ix
author_rank: Regular Contributor
timestamp: February 08, 2016, 09:55:14 pm
content: 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.

author: westfw
author_rank: Super Contributor
timestamp: February 08, 2016, 11:14:48 pm
content: Quotegcc 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.)

author: pmbrunelle
author_rank: Regular Contributor
timestamp: February 08, 2016, 11:36:50 pm
content: Quote from: Bruce Abbott on February 08, 2016, 05:25:59 pmOP 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.

author: legacy
author_rank: Super Contributor
timestamp: February 08, 2016, 11:55:33 pm
content: Quote from: westfw on February 08, 2016, 11:14:48 pmI got an ANSI C compiler for HPUX/PA1, it was not based on Portable C CompilerIt was made by Avocet Systems, they made a lot of ANSI C Cross-compilers for 8051 family, 68HC11, m68kand their software was supporting a few commercial Unix such as SunOS, SGI IRIX, HP-UX/PA1, HP-UX/PA2, IBM RS/6000 AIXin 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 !

author: Cerebus
author_rank: Super Contributor
timestamp: February 15, 2016, 02:16:42 am
content: Quote from: legacy on February 08, 2016, 02:46:25 amGot 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.QuoteWell 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.QuoteYou 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.

author: legacy
author_rank: Super Contributor
timestamp: February 15, 2016, 08:22:05 am
content: Quote from: Cerebus on February 15, 2016, 02:16:42 amedit: 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)Quote from: Cerebus on February 15, 2016, 02:16:42 amthe Wiring behind the hood makes the difference between "sketch" and "program"which is bad for code analyzers.Quote from: Cerebus on February 15, 2016, 02:16:42 amknowledge 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.

author: legacy
author_rank: Super Contributor
timestamp: February 15, 2016, 08:37:20 am
content: Quote from: pmbrunelle on February 08, 2016, 11:36:50 pmit'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 mechanicsin 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

author: Roicker
author_rank: Contributor
timestamp: February 16, 2016, 09:31:41 pm
content: 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 + shippingI 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) 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 ok2. 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 debugging3. It has code examples and tutorials to teach you the basics because it's aimed at the DIY community4. As long as you are using that board the compiler and toolchain are free with unlimited code size5. It has a fast ARM Cortex M4F (with floating point) and it has a lot of peripheralshope this helps!

author: f4eru
author_rank: Super Contributor
timestamp: February 16, 2016, 10:43:32 pm
content: QuoteAny 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 itFor smaller parts, the mega AVRs are nice.Well structured C is a must to learn (not C++)

author: dannyf
author_rank: Super Contributor
timestamp: February 16, 2016, 10:59:18 pm
content: 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.

author: nctnico
author_rank: Super Contributor
timestamp: February 16, 2016, 11:06:11 pm
content: 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!

author: tggzzz
author_rank: Super Contributor
timestamp: February 16, 2016, 11:18:49 pm
content: Quote from: Roicker on February 16, 2016, 09:31:41 pmI 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)

author: dannyf
author_rank: Super Contributor
timestamp: February 16, 2016, 11:53:53 pm
content: "tiva C"I would can anyone who says that he has experience coding in "Tiva C". Experience coding in C is otherwise welcome.

author: legacy
author_rank: Super Contributor
timestamp: February 17, 2016, 12:00:46 am
content: Quote from: nctnico on February 16, 2016, 11:06:11 pmyes, I agreeeven if I find relaxing its enemy-hc11I mean, 68hc11 is limited, but funnyit's 90s technology, guys, don't look at it

author: nctnico
author_rank: Super Contributor
timestamp: February 17, 2016, 12:54:47 am
content: Quote from: tggzzz on February 16, 2016, 11:18:49 pmI 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.

author: tggzzz
author_rank: Super Contributor
timestamp: February 17, 2016, 01:11:08 am
content: Quote from: nctnico on February 17, 2016, 12:54:47 amThat'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.

author: nctnico
author_rank: Super Contributor
timestamp: February 17, 2016, 01:59:48 am
content: 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.

author: andyturk
author_rank: Frequent Contributor
timestamp: February 17, 2016, 02:05:27 am
content: Quote from: tggzzz on February 17, 2016, 01:11:08 amBack 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.

author: autobot
author_rank: Regular Contributor
timestamp: February 17, 2016, 02:11:27 am
content: C++ 14 is supposed to be as safe as java , through the usage of smart pointers and other new language features , i think.

author: reagle
author_rank: Unknown
timestamp: February 17, 2016, 02:13:48 am
content: 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.

author: tggzzz
author_rank: Super Contributor
timestamp: February 17, 2016, 08:53:01 am
content: Quote from: nctnico on February 17, 2016, 01:59:48 amI'm about to try LUA on an ESP8266 for an ultra-low power sensor, which is about as embedded as you can getAs 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 thecompilerto emit the sequence of prime numbersduring compilation. Yes, their template system was Turing complete, andthe designers didn't even realise it. Seehttps://en.wikibooks.org/wiki/C%2B%2B_Programming/Templates/Template_Meta-Programming#History_of_TMPIf 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++ FQAhttp://yosefk.com/c++fqa/const.htmlI'm particularly fond of the "const correctness" section, in which the reason for "const" is pulled in two completely oppposite and contradictory directions.

author: tggzzz
author_rank: Super Contributor
timestamp: February 17, 2016, 09:08:12 am
content: Quote from: andyturk on February 17, 2016, 02:05:27 amYes, 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 6years(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.QuoteRead 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++designersdidn'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 codehttps://en.wikibooks.org/wiki/C%2B%2B_Programming/Templates/Template_Meta-Programming#History_of_TMPIf the designers don't understand their creation, what chance do mere users have?

author: obiwanjacobi
author_rank: Super Contributor
timestamp: February 17, 2016, 09:13:59 am
content: 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.

author: legacy
author_rank: Super Contributor
timestamp: February 17, 2016, 12:04:18 pm
content: Quote from: tggzzz on February 17, 2016, 01:11:08 amGNAT ? for PPC? for ARM? for MIPS? for AVR8? for AVR32?

author: legacy
author_rank: Super Contributor
timestamp: February 17, 2016, 12:05:28 pm
content: Quote from: obiwanjacobi on February 17, 2016, 09:13:59 amC++ without exceptions, at least

author: andyturk
author_rank: Frequent Contributor
timestamp: February 17, 2016, 01:03:01 pm
content: Quote from: tggzzz on February 17, 2016, 09:08:12 amIMO, 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,RAIIis 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.

author: legacy
author_rank: Super Contributor
timestamp: February 17, 2016, 01:08:02 pm
content: Quote from: andyturk on February 17, 2016, 01:03:01 pmcan give me an example, please?Quote from: andyturk on February 17, 2016, 01:03:01 pmyes, I agree with no doubt

author: andyturk
author_rank: Frequent Contributor
timestamp: February 17, 2016, 01:34:25 pm
content: Quote from: legacy on February 17, 2016, 01:08:02 pmSure. Here's a bunch of constants defined as a C++ typed enum:Code:// Commands are offets into the internal RAM of the bq27621// These are 16-bit little-endian values in successive locations, N and N+1enum command_t : uint16_t {CONTROL = 0,TEMPERATURE = 2, // in 0.1 degrees KVOLTAGE = 4, // in mVFLAGS = 6,NOMINAL_AVAILABLE_CAPACITY = 8, // in mAhFULL_AVAILABLE_CAPCITY = 10, // in mAhREMAINING_CAPCITY = 12, // in mAhFULL_CHARGE_CAPACITY = 14, // in mAhEFFECTIVE_CURRENT = 16, // in mAAVERAGE_POWER = 24, // in mWSTATE_OF_CHARGE = 28, // in %INTERNAL_TEMPERATURE = 30, // in 0.1 degrees KREMAINING_CAPACITY_UNFILTERED = 40, // in mAhREMAINING_CAPACITY_FILTERED = 42, // in mAhFULL_CHARGE_CAPACITY_UNFILTERED = 44, // in mAhFULL_CHARGE_CAPACITY_FILTERED = 46, // in mAhSTATE_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:/*** @brief creates a compile-time HCI opcode constant* @param ogf HCI OpCode Group Field value (6 bits)* @param 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).

author: Roicker
author_rank: Contributor
timestamp: February 17, 2016, 02:58:05 pm
content: Quote from: dannyf on February 16, 2016, 11:53:53 pmTiva C is the name of the board from TI.... you can program it with assembler and C/C++

author: legacy
author_rank: Super Contributor
timestamp: February 17, 2016, 03:27:49 pm
content: Quote from: andyturk on February 17, 2016, 01:34:25 pmunderstood, good tips

author: Roicker
author_rank: Contributor
timestamp: February 17, 2016, 04:25:19 pm
content: Quote from: nctnico on February 17, 2016, 12:54:47 amOf 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 peripheralYou 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.

author: Roicker
author_rank: Contributor
timestamp: February 17, 2016, 04:41:34 pm
content: Quote from: tggzzz onYesterdayat 10:18:49 AMThis is the board I use, the EK-TM4C123GXL:http://www.ti.com/ww/en/launchpad/launchpads-connected-ek-tm4c123gxl.html#tabsIt's $12 plus shipping and you can get it from TI or other big distributorsOn 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 isfreeand 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).

author: cdonate
author_rank: Contributor
timestamp: February 17, 2016, 04:54:29 pm
content: Quote from: Roicker on February 16, 2016, 09:31:41 pmRoicker, 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.

author: nctnico
author_rank: Super Contributor
timestamp: February 17, 2016, 04:57:45 pm
content: Quote from: Roicker on February 17, 2016, 04:25:19 pmThere 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-/270962249071Free toolchain is Eclipse + ARM GCC + GDBBesides 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.

author: Roicker
author_rank: Contributor
timestamp: February 17, 2016, 05:14:45 pm
content: Quote from: cdonate on February 17, 2016, 04:54:29 pmI'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.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)I haven't read heard about the book you mentioned, but I learned embedded like 10 years ago heheheMy 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.

author: Roicker
author_rank: Contributor
timestamp: February 17, 2016, 05:32:04 pm
content: Quote from: nctnico onTodayat 03:57:45 AMI 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 problembut 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.

author: Sal Ammoniac
author_rank: Super Contributor
timestamp: February 17, 2016, 05:56:02 pm
content: Quote from: nctnico on February 17, 2016, 04:57:45 pmIf 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:

author: nctnico
author_rank: Super Contributor
timestamp: February 17, 2016, 06:00:41 pm
content: 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.

author: tggzzz
author_rank: Super Contributor
timestamp: February 17, 2016, 07:12:41 pm
content: Quote from: obiwanjacobi on February 17, 2016, 09:13:59 amSeehttp://yosefk.com/c++fqa/If you don't understand the points therein, you shouldn't be using the language.

author: Roicker
author_rank: Contributor
timestamp: February 17, 2016, 07:16:50 pm
content: Quote from: nctnico on February 17, 2016, 06:00:41 pmAlright, 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).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.

author: tggzzz
author_rank: Super Contributor
timestamp: February 17, 2016, 07:23:48 pm
content: Quote from: andyturk on February 17, 2016, 01:03:01 pmOf 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.QuoteSo did I. There were only two books on C at that timeQuoteC++ 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++.

author: tggzzz
author_rank: Super Contributor
timestamp: February 17, 2016, 07:32:16 pm
content: Quote from: cdonate on February 17, 2016, 04:54:29 pmThe 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.

author: Sal Ammoniac
author_rank: Super Contributor
timestamp: February 17, 2016, 09:35:52 pm
content: Quote from: cdonate on February 17, 2016, 04:54:29 pmA candidate with no experience, by definition, doesn't know how to program embedded systems. Just because you don't haveprofessionalexperience 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?

author: nctnico
author_rank: Super Contributor
timestamp: February 17, 2016, 09:51:20 pm
content: 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.

author: legacy
author_rank: Super Contributor
timestamp: February 17, 2016, 11:20:24 pm
content: Quote from: Sal Ammoniac on February 17, 2016, 09:35:52 pm11 of 12 passed, can I have a chance?

author: obiwanjacobi
author_rank: Super Contributor
timestamp: February 18, 2016, 08:04:17 am
content: 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.

author: tggzzz
author_rank: Super Contributor
timestamp: February 18, 2016, 09:17:44 am
content: Quote from: obiwanjacobi on February 18, 2016, 08:04:17 amI have sympathy with that, but I interpreted the questions as being astartingpoint 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".

author: dannyf
author_rank: Super Contributor
timestamp: February 18, 2016, 12:07:48 pm
content: ", 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.

author: andyturk
author_rank: Frequent Contributor
timestamp: February 18, 2016, 03:26:59 pm
content: Quote from: tggzzz on February 17, 2016, 07:32:16 pmYep. 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!"

author: nctnico
author_rank: Super Contributor
timestamp: February 18, 2016, 03:42:45 pm
content: Quote from: andyturk on February 18, 2016, 03:26:59 pmThis line of questioning won't tell you whether the person has real experience or is just telling fairy tales.

author: andyturk
author_rank: Frequent Contributor
timestamp: February 18, 2016, 03:57:30 pm
content: Quote from: nctnico on February 18, 2016, 03:42:45 pmSure 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++?

author: nctnico
author_rank: Super Contributor
timestamp: February 18, 2016, 04:22:37 pm
content: Quote from: andyturk on February 18, 2016, 03:57:30 pmNo 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.

author: Sal Ammoniac
author_rank: Super Contributor
timestamp: February 18, 2016, 04:42:24 pm
content: Quote from: obiwanjacobi on February 18, 2016, 08:04:17 amThat'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.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'swhy I ask the technical questions.When interviewing for positions that require senior people, I look for knowledge and experience inaddition topassion 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.

author: andyturk
author_rank: Frequent Contributor
timestamp: February 18, 2016, 05:54:42 pm
content: Quote from: nctnico on February 18, 2016, 04:22:37 pmWell, 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.

author: boost240
author_rank: Newbie
timestamp: February 18, 2016, 06:26:34 pm
content: 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.

author: westfw
author_rank: Super Contributor
timestamp: February 18, 2016, 06:46:12 pm
content: QuoteHaving 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.

author: MT
author_rank: Super Contributor
timestamp: February 18, 2016, 06:53:18 pm
content: 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!QuoteSo the answer to your question are, you should not become a engineer but a gardener!

author: tggzzz
author_rank: Super Contributor
timestamp: February 18, 2016, 07:04:46 pm
content: Quote from: boost240 on February 18, 2016, 06:26:34 pmDetermination, self-discipline, and doing the work where there is no internet to distract you.

author: LHelge
author_rank: Contributor
timestamp: February 18, 2016, 07:28:32 pm
content: 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.

author: meerweten
author_rank: Contributor
timestamp: February 18, 2016, 08:03:39 pm
content: 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.thehttp://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.

author: LHelge
author_rank: Contributor
timestamp: February 18, 2016, 09:18:00 pm
content: 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.

author: nctnico
author_rank: Super Contributor
timestamp: February 18, 2016, 09:43:30 pm
content: Oh please no PICs. 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.

author: Cerebus
author_rank: Super Contributor
timestamp: February 18, 2016, 10:25:29 pm
content: Quote from: tggzzz on February 18, 2016, 07:04:46 pmPretty tough if you've chosen, or had foisted on you, one of those tools that requires you to be online just to use them!

author: NivagSwerdna
author_rank: Super Contributor
timestamp: February 18, 2016, 10:46:26 pm
content: 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.

author: tggzzz
author_rank: Super Contributor
timestamp: February 18, 2016, 11:04:17 pm
content: Quote from: Cerebus on February 18, 2016, 10:25:29 pmDoesn't affect the first two, which are more important and are applicable to all aspect of life

author: dannyf
author_rank: Super Contributor
timestamp: February 18, 2016, 11:37:42 pm
content: "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.

author: ea_man
author_rank: Contributor
timestamp: February 19, 2016, 12:30:55 pm
content: Quote from: boost240 on February 18, 2016, 06:26:34 pmGet 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

author: Cerebus
author_rank: Super Contributor
timestamp: February 19, 2016, 02:11:40 pm
content: Quote from: ea_man on February 19, 2016, 12:30:55 pmClassic "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".

author: Cerebus
author_rank: Super Contributor
timestamp: February 19, 2016, 02:18:37 pm
content: Quote from: tggzzz on February 18, 2016, 11:04:17 pmPah! Self-discipline is over-rated. It tends to get between you and all those cream cakes, bottles of beer and other procrastinatory diversions.

author: captbill
author_rank: Contributor
timestamp: February 19, 2016, 05:43:24 pm
content: Quote from: meerweten on February 18, 2016, 08:03:39 pmYou 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.

author: dannyf
author_rank: Super Contributor
timestamp: February 19, 2016, 06:07:49 pm
content: QuoteMany times, a 4Mhz PIC or AVR is an overkill too.

author: Sal Ammoniac
author_rank: Super Contributor
timestamp: February 19, 2016, 06:33:21 pm
content: Quote from: captbill on February 19, 2016, 05:43:24 pmThat 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.

author: ea_man
author_rank: Contributor
timestamp: February 19, 2016, 10:32:14 pm
content: Quote from: Cerebus on February 19, 2016, 02:11:40 pmSorry if my quoting was misleading, I'll try again:Quote from: boost240 on February 18, 2016, 06:26:34 pmGet 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

author: leftek
author_rank: Regular Contributor
timestamp: February 20, 2016, 11:09:01 am
content: 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.

author: dannyf
author_rank: Super Contributor
timestamp: February 20, 2016, 02:20:47 pm
content: QuoteAbsolutely agree. Rather than wasting time worrying about which mcu to learn, you should just pick one and start learning.

author: nctnico
author_rank: Super Contributor
timestamp: February 20, 2016, 02:56:05 pm
content: Quote from: leftek on February 20, 2016, 11:09:01 amThe 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!

author: tggzzz
author_rank: Super Contributor
timestamp: February 20, 2016, 06:17:52 pm
content: Quote from: dannyf on February 20, 2016, 02:20:47 pmEver since the late 70s, for questions such as thesethekey determining factor has been thedevelopment environment.Pick a development environment that is comfortable and offers the right facilities, then choose a MCU/board that works with that environment.

author: cdonate
author_rank: Contributor
timestamp: February 20, 2016, 09:16:30 pm
content: Thanks to everybody who gave his 2 cents. I do appreciate every comment and it really changed my views. on the matter.QuoteYes, 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/1449302149andhttp://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.

author: tggzzz
author_rank: Super Contributor
timestamp: February 20, 2016, 09:38:40 pm
content: Quote from: cdonate on February 20, 2016, 09:16:30 pmYou 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 gothis wayorthat way.QuoteWhatever you choose and enjoy isagood enough path. (The best is the enemy of the good!)

author: dannyf
author_rank: Super Contributor
timestamp: February 21, 2016, 02:07:12 am
content: QuoteOnce 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.

author: nctnico
author_rank: Super Contributor
timestamp: February 21, 2016, 02:18:34 am
content: 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.

author: legacy
author_rank: Super Contributor
timestamp: February 21, 2016, 03:33:38 pm
content: PowerPC and MIPS add more complexity by sever orders of magnitudeARM ones are the most friendly and comfortable side of the RISC familywhile, in my opinion, the bloody-dead MC88K was the most elegant

author: legacy
author_rank: Super Contributor
timestamp: February 21, 2016, 03:35:19 pm
content: take an embedded ARM module by Olimex, be sure it's supported by Keiland have funthat's all folks

author: JacquesBBB
author_rank: Frequent Contributor
timestamp: February 21, 2016, 05:51:39 pm
content: Quote from: boost240 on February 18, 2016, 06:26:34 pmIt 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 ithttps://www.eevblog.com/forum/beginners/stepping-out-from-arduino-start-on-january-20-with-keil-ide-and-ti-launchpad/msg845895/#msg845895It is still time for registering, and you will learn a lot on the inside of MCU, with nice real boards experimentsusing a professional IDE with debugging (Keil).This will open you the gate to any possible MCU or IDE.

author: westfw
author_rank: Super Contributor
timestamp: February 22, 2016, 02:25:00 am
content: Start a list of useful online classes?https://www.eevblog.com/forum/beginners/reviewrecommendetc-online-classes/

author: asgard20032
author_rank: Regular Contributor
timestamp: February 22, 2016, 03:38:25 am
content: 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 mcuWant 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 connectivityYour personal project is geared toward DSP or radio frequency? Why not some cortex m3/m4 or pic23/dspicYou 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.

author: dannyf
author_rank: Super Contributor
timestamp: February 22, 2016, 11:56:11 am
content: "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.

author: dannyf
author_rank: Super Contributor
timestamp: February 22, 2016, 12:02:00 pm
content: "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.

author: tggzzz
author_rank: Super Contributor
timestamp: February 22, 2016, 03:29:10 pm
content: Quote from: dannyf on February 22, 2016, 12:02:00 pmThe buy-vs-build debate is, with good reason, never ending. Decisions must be continually re-evaluated without dogma.Manymanypeople 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.

author: nctnico
author_rank: Super Contributor
timestamp: February 22, 2016, 05:28:55 pm
content: 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.

author: Sal Ammoniac
author_rank: Super Contributor
timestamp: February 22, 2016, 06:37:44 pm
content: Quote from: legacy on February 21, 2016, 03:33:38 pmMIPS is orders of magnitude more complex than what? ARM Cortex?Nonsense. MIPS is a very simple architecture, even compared to ARM Cortex.

author: legacy
author_rank: Super Contributor
timestamp: February 22, 2016, 06:51:30 pm
content: Quote from: Sal Ammoniac on February 22, 2016, 06:37:44 pmwe are talking about two different things: the HDL complexity, the programming assembly complexityin my experience yes, if you want to implement a MIPS machine in VHDL (I did), it's the simplest in the RISC familywhile 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 codeas you have to deal with a lot of troubles which are handled by hardware in ARM

author: nctnico
author_rank: Super Contributor
timestamp: February 22, 2016, 08:15:06 pm
content: Quote from: Sal Ammoniac on February 22, 2016, 06:37:44 pmHaving 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.

author: Sal Ammoniac
author_rank: Super Contributor
timestamp: February 22, 2016, 09:01:14 pm
content: Quote from: legacy on February 22, 2016, 06:51:30 pmThat 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.

author: legacy
author_rank: Super Contributor
timestamp: February 22, 2016, 11:22:50 pm
content: Quote from: nctnico on February 22, 2016, 08:15:06 pmmmm, 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.

author: legacy
author_rank: Super Contributor
timestamp: February 22, 2016, 11:28:42 pm
content: I am afraid the PowerPC is the worst: the EIEIO nightmareEIEIO stands forEnforce 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)

author: dannyf
author_rank: Super Contributor
timestamp: February 22, 2016, 11:46:19 pm
content: 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.

author: ez24
author_rank: Super Contributor
timestamp: February 23, 2016, 12:28:27 am
content: Quote from: 1xrtt on February 08, 2016, 01:33:26 amFYI 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