Here's my story: I got my electrical engineering degree BUT I do not have a lot of experience with circuits (OMG, right? O_O). Most of my education was about communication theory, so I really feel incomplete and want to apply my knowledge somewhere and start making something on a microprocessor. It would also be a good skill to develop for the workforce. Do you folks have any recommendations as to what type of microprocessor I should be working with? PIC? Arduino? Others? What is used most in the market and for production purposes? Does it matter? I hear Arduino has a very good community for help, but I hear it is more for "hobbyists"? Is that necessarily a bad thing? Any insight is much appreciated. Thanks!!
Hey, great timing! This week I've been interviewing E.E. students for an intern position. Here's what I can say with 100% certainty: Students from the big schools, even Juniors working on their Bachelors, have almost ZERO useful knowledge. One guy I interviewed couldn't calculate the value for a current limiting resistor for an LED. Yup, that's what $30k/year will get you for an education. The point is, any practical experience or knowledge you have will put you above your classmates when it comes to landing a job! Seriously, it's that bad out there.
Ok, on to your question. From an employers perspective it doesn't matter which uC you use. Odds are that whatever you choose, it'll be wrong. What's more important is the experience and knowledge you gain will apply to most uC's. That being said, stick to the common ones.
The Microchip PIC's are my least favorite. The hardware is fine, but writing software for them is a super pain in the you-know-what. I've used them in the past, and never again. I've also used the Cypress pSoC 1. It was nice at first, but their software is buggy and documentation is very lacking. A current project of mine uses an MSP430, but it's too early to say how well it works. The TI ARM based uC's are also nice, but might be too much for you at this early stage.
The msp430 has a very nice instruction set. And you can currently get an msp430 board to play with for about five bucks. ARM dominates the processor world, nobody is even close, almost everything you use is arm based. Also a good instruction set, many variations can be had for under $50, goto sparkfun. the reduced arm instruction set is called thumb and the expanded thumb instruction set is called thumb2 and there is now a core that is thumb2 only (each thumb instruction mapped one to one with arm instructions so it was easy to just insert the arm instruction in the pipe when a thumb instruction was found, but thumb2 changed that they made a new core). ST, who I like more than LPC and perhaps the other arm based micros, now has a value line discovery board for about 12 bucks (you want the 12 dollar stm32s not the 7 dollar stm8s or whatever that is a completely different processor, has a 6502 feel, I bought the wrong ones but have not played with it yet). The PIC instruction set, the old/real one (not the mips PIC32) is very educational, and actually elegant, but dreadful for compilers, wont ever touch msp430 or arm from that perspective. Microchip and pic was the Atmel AVR (butterfly and now Arduino) of its day but just doesnt really "get it". Atmel "gets it" and their customers are very happy and very loyal. I do like my sam7 arm boards, quite a bit. The AVR instruction set is dreadful, but that has not stopped it from being insanely popular with hobbyists. Depends on if you want to learn to program or not have to worry about it. If you dont want to get into programming very much the arduino is probably your first choice. If you want to get into programming, I have a couple of emulators at github, thumbulator a thumb emulator and an msp430. You can get a feel for what is going on.
My recommendation is get a few, many different ones can be had for under 50 bucks. sparkfun.com for many of them, direct from TI for the ezusb (the 5 dollar launchpad is cheaper, but the ezusb has additional boards, 3 for $10). Also direct from TI (or do you have to go to digikey/mouser?) the stellaris boards, packed with stuff so much that you cant really get at the I/O without cutting traces. but at the same time lots of datasheets to read and understand as well as a lot more schematics to read and understand. The stellaris boards are more in the sub 100 dollar category. the 811 is super easy to brick, be careful.
knjn.com has some affordable fpga boards, pluto I think. I think everything you need for that after the hardware is free (from xilinx or altera). At one point altera had a modelsim version, but I prefer verilator and icarus verilog. Would like to spend more time on ghdl but I dont know enough to connect it to a C test bench. With verilator it is somewhat trivial to build a test bench using C with which you can write code/drivers that can later talk to the hardware or run on the hardware depending on what you are making...here again assumes you have some programming interest...I am a big fan of cyclicity-cdl.sf.net a hardware design language that I feel is verilog done right. It has its own, free, simulation environment as well. Basically, you can do logic designs for $50 bucks or so, whatever the board costs. Or if you dont want to buy the hardware can do tons of designs with all free tools. gtkwave is your friend when it comes to looking at the vcd waveforms, even with modelsim now I simply create a .vcd and use gtkwave's viewer.
I found things like decoding IR remotes using an IR receiver (Radio Shack used to have them, now digikey or mouser or sparkfun), bit banging rs232, i2c, spi, dallas one wire (dallas semi is now maxim). x10, etc. if there is a hobby/hacker space where you can hang out and solder and use an oscilloscope that would be really useful. Learning to read protocols like these and debug your logic/software with a scope is very useful (dont use the software package that lets the scope decode it for you, learn it the old fashioned way).
Learning to program the various peripherals in the various microcontrollers (timers, pwm's, etc) is very educational. lcd and oled displays, etc. (stellaris or arduino is good for this).
the mbed is not a bad platform other than the painful blue leds.
lattice has the brevia for not much money and the mico8 I believe will fit in there and is in source form so you can simulate it. The lattice tools are not as bad as the others. So you can get a little microcontroller and logic and electronics if that is what you are after.
the primary problem with Arduino and the ST primers lxpresso and some others is the strong desire to hold you in their sandbox. The Arduino is easy to erase and reprogram and take over the board and abandon the sandbox, the other two are not. dont buy them. Where this may help or hurt what you are trying to do is that by wrapping up all the "hard" stuff into a package or api or whatever basically hides it from you. And if you are interested in learning this protocol (spi, i2c, etc) or how to wiggle the signals on an lcd to make it work, or pwm a motor the easy way or hard way. You might want to not be tied to the sandbox. At the same time using the Arduino sandbox you dont have to get too much into the programming side and can spend more time wiring electronics up to the board and debugging or playing with those circuits, not having to worry about the Arduino itself.
There are places that sell 2 or 3 pcboards for like $50, and use the eagle I think it is layout software which you can download and use for free. Probably worth downloading and trying to do some layouts even if you arent ready to purchase any boards or even have an idea of something you want to build.
Granted you may still be on a college budget, and I understand that, but I would say try as many of these different platforms you can get your hands on. You probably have more time than money right now so you can certainly go with free software that simulates much of this stuff, also you can research the datasheets and schematics and software and hardware tools for the various boards before you pull the trigger to purchase.
The real education that you need to know here is reading datasheets and schematics. And you dont want to read only datasheets from one vendor, some are good, some are horrible, and in the real world with a real job in this area you have to deal with the good and the bad. The other skills are soldering and using the oscilloscope, soldering you can afford (well a good iron, probably not just yet), a scope, the kind you would really use at a job, not affordable. When you get that first job, get as much scope time as you can. Watch how other engineers use it as they all have their own way to navigate through the menus and features. Debugging is critical to your career. If you lean toward logic, get some hours on the xilinx and altera tools as well as the others I mentioned and get real comfortable looking at waveforms on modelsim or gtkwave. The pay-for tools are all horrible, about the worst software you could imagine, and for some reason cost tens of thousands. (and the software gets worse every year/version). But that pain is the key to that career path, "know your tools".
Every microcontroller has its realm where it is really able to thrive well. For example, the MSP430 is very good for low power. If you really want to prepare yourself for all of industry you would need to learn everything you can get your hands and so when you have a situation that you come across you know the best microcontroller to use.
Ardunios are not microcontrollers, they essentially are a development board built around Atmel AVR as their microcontroller. Ardunios are very hobbyist orientated, which is not a bad thing for starting off, but you will need to learn more in depth about the Atmel that is being used if you want to do anything with them in industry.
You should use the right microcontroller/microprocessor for the task at hand.
Pick a project, then pick your processor.
I have programmed on Atmel, PIT, microchip and TI, and I personally like TI's IDE the best. They have put a lot of effort into making their microcontrollers as easy it use as possible. Not to mention their documentation and tutorials are well above par. Try getting an MSP430 development kit. It's a microcontroller with a decent amount of memory and processing power, it has multi-channel A/D and D/A converters, and even comes with an on-board 2.4 GHz transceiver for experimenting with wireless networks. The development kit comes with 2 MSP430 modules, a USB programmer and a battery pack, and it's less than $100.
Microchip is the market leader in 8-bit MCUs so you won't go wrong if you learn on them. ARM Cortex devices are replacing 16-bit and 8-bit devices in many applications, so familiarity with them will also be useful.
I would recommend getting started with Arduino, doing a few projects, then teaching yourself how to program the AVR ATMega. The two reasons to use AVR are:
- huge online support network between AVR Freaks, Arduino Forums, SparkFun forums and Adafruit forums
- Free, open source tool-chain (unlike PIC AFAIK)
I good device to get is the Bus Pirate, which works as an ISP programmer for AVR chips + does lots of other things: http://dangerousprototypes.com/bus-pirate-manual/
A great first project is to build an LED array. Start with an Arduino prototype, then re-do it with an AVR ATtiny chip (plenty of tutorials available).
I would strongly argue that you should start you experience in C, not Assembler. It has many advantages, among them that it is much easier to take your experience to a new processor. If you choose Assembler you should have a good reason for taking on the additional pain (in some cases it may be reasonable).
You should be able to get your hands on free software tools to start, if not move to a different processor. It is hard to see how you could go wrong starting with an Arduino and use that experience to consider other environments.
If you want something well supported by free (as in freedom) tools, Atmel's AVR line is probably the way to go. A working development environment is packaged in every major Linux distro, Mac OS packages are easily available, and I bet Windows packages are, also.
I'd advise that you stay away from Arduino. It's a platform designed to appeal to the amateur computer programmer who wants to make LEDs blink, not aspiring engineers. The software libraries and development tools will shield you from learning anything (except possibly how to get a JVM working on Linux...have fun!) and probably teach you some bad habits in the process. It's also very expensive. It's little more than an AVR with the reference circuit in the datasheet, a USB programmer attached permanently, and a pair of headers for "shield" modules which are for some reason not mounted at an interval of 100 mil, so you can't connect it to a breadboard. Of course, there's a breadboard shield you can buy, and it's expensive. Get yourself a reusable USB AVR programmer for the price of an Arduino and buy a $1 ATMega instead.
Select a common microcontroller and use it for a project.
There is a lot on this topic on this forum, I think I would recommend the avr:s.
If you want to learn something commercially useful I would not bother with Arduino or even PIC (although PIC do crop up for simple jobs in commercial devices). The world these days is running on ARM, everything from your TV remote to your smart-phone.
Whatever you do, I'd start with something you can code in C - yes there are other languages, but C is still universally popular & will stand you in good stead.