Take the 2-minute tour ×
Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts. It's 100% free, no registration required.

I've developed an interest in electronics, more specifically getting to the very root of how my operating system functions. My goal over the last few years has been to learn as much as I can about how the OS works so that I might one day contribute to an open-source project, or perhaps begin a project of my own. However, over the last few months, I've taken an interest in a more bottom-up approach, and I really want to start getting into the hardware side of things. The problem is that I lack any vocabulary to describe what it is that I'm interested in learning about.

I have quite a bit of experience dealing with microcontrollers from my High School robotics days, but the particular model we used left much to the imagination in regards to more fundamental processes (assembly, dealing with CPU's, etc.) I learned nothing about capacitors, transistors, resistors, etc. My aim is to remedy this.

From my understanding, Arduino would be a good starting point, but based on what I've heard, their philosophy is to obscure the more technical details with the intention of streamlining the developing process. This is of no interest to me. I've also heard of Rasberry Pi, but the OS layer seems like more of an additional obstacle for what I have in mind. Is there some sort of all-in-one solution that will expose me to all the most important concepts, but at the same time allow me to make practical use of my projects?

What is a good starting point for someone in my situation? Is the microcontroller world tangential to my overall goals? If Arduino and Rasberry Pi aren't my best options, are there any no-bullshit alternatives? What about virtual alternatives? General tips are welcome!

share|improve this question

closed as primarily opinion-based by Passerby, Nick Alexeev, PeterJ, placeholder, Dave Tweed Oct 5 '13 at 1:46

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.

    
Pickup an electronics book at your local library. Go for passive logic circuits, not programmed controllers/mcu/computers. –  Passerby Oct 4 '13 at 23:12
    
You can still use an Arduino on the bare level. It is an ATMega328 device that you can program in C if you like –  Gustavo Litovsky Oct 4 '13 at 23:14
    
Both an Arduino and a Pi can be used bare-metal and without any 'obscuring' IDE. I would suggest you start with some ARM or Cortex based system. (Pi is ARM-based, some Arduino variations are ARm or Cortex based). If you google for 'Raspberry pi bare metal' you will oa. find people who are builing and running their own OSes for the Pi. –  Wouter van Ooijen Oct 4 '13 at 23:26
    
And if a ATmega328 is still too much (or too little), there's an entire family of AVR MCUs for almost every purpose possible. –  Ignacio Vazquez-Abrams Oct 5 '13 at 0:35
1  
With Arduino it is really easy to ditch a lot of the "obscuring". I think it is really good for your self confidence to be able to make an LED blink with Arduino and from there work to understand how you can access the hardware directly. Arduino does support that out of the box, but you are not required to. Baby steps: first see that it works then improve the program (eg. by not using the standard libraries) and figure out why your program works or doesn't work. Same with switching from C to assembler. Things are much easier if you have a working program, then change parts to assembler. –  jippie Oct 5 '13 at 7:55

1 Answer 1

Since you really want to learn the low level details, don't get ready-made systems which are intended in part to obscure those details.

Start by getting a bare microcontroller and wiring it up on a breadboard. I think one of the 16 bit PICs (24, 30, or 33 series) in a 28 pin package is a good start. Program it in assembler, not in C. Compilers are again intended to hide the low level details you want to learn about. You will also need some sort of programmer/debugger. The PicKit3 is probably the best current choice for this. With the PicKit3 between the micro and your PC, you can single step at the source code level in the free IDE called MPLAB.

Just getting the chip up and running at a known instruction rate will take more digging and learning that you probably realize. Once you have that, you can write a loop to toggle a output pin, and watch it on the scope. If you did everything right, it will oscillate at the predicted frequency.

After that, try using a timer to set up a periodic interrupt every 1/2 second in which to toggle the state of a output line. Have that line drive a LED and see that it is actually blinking at 1 Hz. Starting from scratch, this is not as easy as it may sound.

After that, things will become easier. Now try your first real project. What that is depends on what you want to build.

share|improve this answer
1  
Blinking an LED is the "hello world" of the embedded world. –  tcrosley Oct 5 '13 at 0:10

Not the answer you're looking for? Browse other questions tagged or ask your own question.