Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Beginner Kits for learning microcontrollers

  1. Apr 18, 2014 #1
    Hello,

    I haven't learned anything about micro controllers yet but I wanted to get a head start since I hear that programming is difficult. I have a pretty good understanding of C and Java but my assembly is terrible and I am out of touch with any IC languages by this point.

    I was doing some research and arduino kits tend to be very popular. Is anyone familiar with Arduino? Would it be something that would be beneficial (in a real world job market, when I graduate) to know about?

    If it is something that is commonly used in industry, does anyone have a good kit they can recommend? I found lots of kits all with good customer ratings, but I would trust someone from this forum over someone I don't know online. So I wanted to ask before I made any decisions.

    Someone had told me the Arduino Uno. I took a look at it. But it didnt seem to come with anything... so I wasnt sure what I could build with it or what the purpose of it was. I don't know enough about micro controllers yet to have the creativity to know what I can do with them yet!

    What really caught my eye was the Model RP6V2 - programmable robotic vehicle. I wanted to get some type of kit that I could build the components to (soldering or on a breadboard) and use programming to "do" something (like make a robot move or a car drive or lights to blink)

    Does anyone have any advice or ideas for cool projects?
     
  2. jcsd
  3. Apr 18, 2014 #2
    My personal opinion:
    Arduino is a hobby module that has a lot of support and built in functions which allows you to utilize a microcontroller to control devices connected to the board.

    However, if you want to LEARN about programming a microcontroller, my choice would be a PIC from Microchip.com. There are other microcontroller manufacturers as well that would be on par with this brand, but Microchip is one of the largest and has lots of supporting books, articles etc. They offer free software on their site and their microcontrollers are very inexpensive and an abundance of kits are available. They also have many app notes that show how to use their product to accomplish particular types of functionality such as motor control, audio playback, ethernet connectivity, etc. Also, as a raw chip they require very little supporting parts to work for beginning projects.

    Beyond that I suggest looking at any ARM type controller and supporting software to program said device.
     
  4. Apr 18, 2014 #3

    jedishrfu

    Staff: Mentor

    We've had good success with using the Raspberry PI which is more software based than hardware. The Arduino has many more I/O ports for connecting stuff up than the PI. In some projects, people will program on the PI and have it drive the arduino which in turn drives the hardware, reads the sensors...

    The PI runs a variant of Linux and programming is done using Python on the PI although a C compiler and Scratch IDE is available too and of course you can download your favorite language and config the PI to run it barring memory/sd card limits. With Linux on the PI you have a more complete on machine programming environment. Arduino programming is done on one computer and the binary code is transferred to the Arduino to run.
     
  5. Apr 18, 2014 #4
    I'm a fan of Microchip's PIC processors myself. They're cheap, diverse in capability, excellently documented, and they have a great programming IDE for free. If you ever plan to do your own PCB's using PIC their are good resources for that too. You don't have to use assembly. C works fine.

    Arduino is defenitely targetted towards hobbyists and beginners. Their are message boards with plenty of users where you can post questions. I've never used one myself but I don't think you could go wrong with it.

    One thing I don't like, with Arduino they steer you towards using an API. I wouldn't want to spend time developing skills that wouldn't translate well to other types of chips. On the other hand their library is large and diverse and it's probably more "turn-key" than anything else out there.
     
  6. Apr 18, 2014 #5
    Thanks! I am actually terrible at Python and I never learned anything in Linux really (though I played around with gentoo a bit back in the early 2000s.
     
  7. Apr 18, 2014 #6
    The API comment is invaluable to me. I never really thought of it like that. I was more turned on by the wide variety of features, kits, help services, and robots.

    When I googled electronics kits or micro controller kits, the Arduino dominated the search results so I figured it was the industry standard or something... Thank you so much!

    That is two votes for the PIC. I will have to look into it later this weekend and see if they have what I would like to do with it.

    My goal would be to learn about micro controllers and get a head start on my education (the class wouldn't be till next year) but to also have fun (which is why the Arduino kits were so appealing).

    But as you mentioned, I don't want to waste my time on something that wouldn't really benefit me in the field.

    Thank you so much!
     
  8. Apr 18, 2014 #7
    another low cost option is Micro basic you can program via Basic or pico assembly

    http://www.basicmicro.com/

    edit forgot to mention is that every pin is assignable to digital or analog input or output provided the maximum number is not reached, and yes the chip is a pic lanquage chip, just has basic compiler support
     
    Last edited: Apr 18, 2014
  9. Apr 18, 2014 #8

    meBigGuy

    User Avatar
    Gold Member

    I actually see the availability of an API as a plus for Arduino. An API provides a modular programming approach and is a fundamental concept that needs to be learned, understood, and utilized in any firmware project. To me, counting the API as a negative is like saying pre-designed IO boards are a negative because the knowledge can't be applied to other IO boards.

    My vote shouldn't count as a whole vote because I don't actually use either processor currently, but my vote for Arduino would be based on the large selection of IO boards and large user community. (I've used PIC's in the distant past, and didn't like the programming model, but that may have changed)
     
  10. Apr 18, 2014 #9
    PIC does offer API's for complex things like graphics and ethernet peripherals.

    You'll definitely find more help with Arduino. I'm not knocking it.

    Take a look at this code snippet for Arduino. It makes an LED blink.

    Code (Text):
    pinMode(13, OUTPUT);

    digitalWrite(13, HIGH);

    digitalWrite(13, LOW);
    Now look at the PIC equivalent.

    Code (Text):
    TRISBbits.TRISB7 = 1; // Sets the tri-state of the physical pin to output

    PORTBbits.PORTB7 = 1; // Turn on

    PORTBbits.PORTB7 = 0; // off
    The first code snippet calls a function which adds some overhead. The second one is directly writing values to physical registers. It looks more like hardware programming to me. It seems like overkill to call a function to do a simple register write.


    Here's an ARM code for blinking two LED's

    Code (Text):
    // P0.10, P0.11 output
         IODIR0 = 0x00000c00;    

         // endless loop to toggle the two leds
         while (1) {
              for (j = 0; j < 1000000; j++ )
              {
                   ;//Delay Loop
              }
              //Turn OFF Right LED
              IOSET0 = 0x00000800;
              //Turn ON Left LED
              IOCLR0 = 0x00000400;
              for (j = 0; j < 1000000; j++ )
              {
                   ;//Delay Loop
              }
              //Turn OFF Left LED
              IOSET0 = 0x00000400;
              //Turn ON Right LED
              IOCLR0 = 0x00000800;
         }
     
    It looks alien to Arduino code but not so much to PIC. ARM code credit belongs here.

    You don't have to learn that coding style. It's not a requirement or anything. You can always pick it up later.
     
  11. Apr 18, 2014 #10
    I know you weren't putting Arduino down, but even if the PIC code is harder to learn/read, at least it is more standard to industry than the Arduino specific code.

    At the end of the day, that is what is most important to me. When I graduate, I won't be looking for a job as a hobbiest :)
     
  12. Apr 18, 2014 #11

    meBigGuy

    User Avatar
    Gold Member

    PIC code is not "more standard". For Arduino there is an optional layer between the machine code and the API (called the API). PIC is a microprocessor. Arduino is a SYSTEM using an ATMEL microprocessor.

    For the register write example above, I doubt there are any Extra Instructions generated with the API.

    From wikipedia re Arduino: The hardware consists of an open-source hardware board designed around an 8-bit Atmel AVR microcontroller, or a 32-bit Atmel ARM. Current models feature an USB interface, 6 analog input pins, as well as 14 digital I/O pins which allow to attach various extension boards.

    If you use the Arduino API the code becomes Arduino processor independent. But it is not a requirement to use the API.

    BTW, PIC code is not compatible between all PIC processors. Different processors use different architectures/programming models. There is nothing "standard" about PIC assemly language.

    You should make your decision based on whether you want to program Atmel processors in an Arduino environment or program PICs in a PIC development or breadboard environment. Also, with PIC, you need to buy a PIC programmer. Maybe someone can comment on what it would take to provide a USB or UART based PIC development board, programmer, and an IO bus of some sort. I don't know the available PIC development boards.

    It may seem I am pushing the Arduino, but I'm really just trying to make sure you are making your decision based on correct assumptions. For some projects, PIC is exactly the right choice.
     
  13. Apr 18, 2014 #12
    Tbh if he is just programming PC's then the PIC lanquage is not for him. In the case of programming PC's. IE non MAC PC's then he needs to study the 8085/8086 instruction set. I'm not positive on the instructon set on MAC's. If he is doing PC programming then he can either practice on debug or look for a copy of MASM compiler. There is significant difference between the PIC instruction set and the 8085 instruction set.

    here is a download link for MASM 8.0

    http://www.microsoft.com/en-ca/download/details.aspx?id=12654

    the link above also requires C++, www.Masm.com should have masm32. But the version you will need will depend on your operating system. C++ suppports assembly with the correct library file, however its better to learn assembly with the MASM compiler then learn how other lanquages utilize them as C++ can link assembler programs. So can some versions of Basic

    This is something I do know is that my microprocessor electronics coursing of which I have a bachelors degree in did not teach the PIC language. It taught the 8086 instruction set. I don't imagine that will be any different in the states as compared to Canada

    here is the link for the 8086 instruction set in pdf

    http://www.gabrielececchetti.it/Teaching/CalcolatoriElettronici/Docs/i8086_instruction_set.pdf

    keep in mind trying to do this in debug is possible but VERY clunky
     
    Last edited: Apr 18, 2014
  14. Apr 18, 2014 #13
    Thank you for the great insight everyone.

    So I guess this changes my questioning direction to say... what is the industry like. I am aware that there are many different languages for many different micro processors. I haven't taken any of those classes yet, but I have a motorolla and intel assembly language course in my roster (so they must be different).

    Is there not one language that I can learn/practice, that is most common/will help me in the field?

    From what I know Assembly is company and model specific and C is too high-level of a language to use... Personally, I have done a little assembly before and I could not understand it at all. C, C++, and Java were all very simple to me, but it sounds like those languages are kind of pointless (unless I go with an Arduino kit)
     
  15. Apr 18, 2014 #14
    I recommend talking to your instructor to be, they will meet with you and give you a curriculum. Current industry trends towards the visual lanquages such as visual basic, C++. For PC related hardware on a non mac PC is the 8086 instruction set. Ie designing hardware cards like your video card, myself I now work industrial electronics which uses ladder/relay logic which is completely different. Depends on your goals and your curriculum. You need the basics your curriculum teaches, then you develop from there

    and no there is not one lanquage to study, I had to study close to 12 lanquages just for PC's for ladder I now know 12, however don't get scared most lanquages only need to use 30 instructions the rest is how you use them

    C++ is a strong lanquage to master as you can add code from basic, pascal, fortran, assembler etc with the library file .h if I recall its on in the libraries you include in your program. Been 10 years for me but like I said I deal with plant automation, which uses ladder such as Allen Bradley SLC 500 instruction set. If you watched "How its made" I program the machinery that manufactures the equipment ie Industrial Robotics
     
    Last edited: Apr 18, 2014
  16. Apr 19, 2014 #15
    You can use C to program the PIC. And I would say that the chip architecture is company and model specific. You say that you have done a little assembly before and could not understand it. But you failed to mention what you used it for. I'm guessing it wasn't for a microcontroller. Assembly for a PIC is a lot simpler than for a PC microprocessor. Most PIC chips have only a handfull of instruction sets. It's been a while but I think the last chip I worked with had somewhere around 33 instruction sets. One of their selling points is that they're simple and fast. In my opinion the hard part is learning the chip architecture and learning how to interface with the outside world. The actual assembly language itself is pretty easy.
     
  17. Apr 19, 2014 #16
    agreed its mostly understanding the hardware addressing and capabilities, the programming instructions needed is the easier part
     
  18. Apr 19, 2014 #17
    It doesn't matter what's used in the industry.
    No matter what system you start with, you can transfer most of the things you learn to other systems. What's important is that you have enough good resources - books, forums, etc. to help you learn.
     
  19. Apr 19, 2014 #18
    Thanks everyone!

    Lots of great insight and help!
     
  20. Apr 19, 2014 #19
    PIC, ATMEL, LATTICE, etc. manufacturers as well as any FPGA (and all ARM based) that can contain a microcontroller, will all have a version of C or C++ available to program. Many will have API's that help program different peripheral parts of their specific chips. Industry jobs that utilize any of these will have their method in place of the approach they use. In any case, you stated that you wanted to learn about micros and what would be useful in a job after college. Learning to search through the offerings of the different manufacturers, isolate the necessary functionality of your application to the offerings of the manufacturer's products and looking through the data book on the part to determine how difficult it will be to use that part or how many supporting components are required, as well as things like temp range, power requirements, etc. are all useful bits of knowledge required. Ultimately each company will either have chosen a direction and acquired development tools and hardware to support the main direction they have used in the past. OR if they have never taken that path, you will be tasked with researching and determining the investment of one direction or another.

    I like PIC's and Microchip because they offer a broad offering of support for the low investment up to a high investment and support. Other manufacturers offer similar. PIC programmers can be made at very low cost or purchased from some of the hobby sites like www.sparkfun.com for very little $.

    You may not have liked assembly and I certainly don't suggest that you program a large project with it, BUT a good understanding of what happens at the low level and certainly within interrupts requires a familiarity of the architecture as well as a little understanding of the registers and assembly that is taking place to understand the potential failure points and try to track down bugs/problems. AND assembly is really very portable across micros - at least the concept of what is happening. A move moves data from one place to another, register to register, register to memory, memory to memory (not all can move mem to mem). But once you understand the basics of the type of functionality assembly opcodes offer, most micros offer the same or very similar, just renamed. THIS is very important in using the higher level languages like C/C++ in micros as bits are very important and useful in most micros.

    API's are useful and certainly make using devices easier. BUT what if you are a hardware guy at a moderately small office and you design a device and YOU have to write the API?

    All of the above advice by me as well as everyone else is helpful in your decision choices. Having a taste of many of the different facets of the industry will contribute to making you a more valuable potential hire. Using hobbyist modules is very helpful in understanding what you can do with a micro in a system. Knowing how to build the whole system without the hobby module, but from all the raw parts is extremely valuable. One step at a time. Easiest to harder is usually a good approach. Have fun.
     
  21. Apr 19, 2014 #20

    meBigGuy

    User Avatar
    Gold Member

    There is no doubt you will should become capable in C (maybe C++, but C++ is a tough flexible language), if for no other reason that knowing C provides a foundation for all high level programming. For the most, part learning languages is easy one you have programmed in one object oriented language. You may need to learn a scripting language like python (good general purpose), perl (quick and dirty post processing scripts), or tcl (control EDA tools).

    You should understand assembly since you will always need to occasionally go to assembly code for high performance routines or sometimes just to help in debugging.

    You should understand API's because you need to understand what they provide, how to use them, and maybe how to write your own.

    All this may seem overwhelming, but what it amounts to is that you will begin by programming a uP in assembly and C and learn as you need to from there.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Beginner Kits for learning microcontrollers
Loading...