# Tips for an old previous and renewed embedded programmer

Background -

I programmed my first SBC on an MEK6800D2 evaluation Kit (that I had build) in the late 70's and other boards of that time like the Rockwell 6502 Kim-1, 8085, etc. Now I'm a 61 a Big Box MS C# vs2010 programmer, but my real interest has always been embedded, but it's been oh so many years. Now that I'm close to retirement I would like move to recreation programming back to my roots of embedded. C, objective C, ASM, other? (OK I draw the line at forth).

Inquiry -

So now I'm looking at the latest embedded chip sets and oh wow I only understand about half of it. Is there a resource, you might recommend for someone like me? Books, Sites etc. ?

BTW - I've found this particular stack exchange style site very useful. many Thanks

• Welcome to Electronics.SE, glad to hear this site is useful :P I'm afraid this question is a duplicate of a few others however, try checking them: How to become an embedded software developer?, Steps to learning Arduino Programming out first. If you have a particular target in mind as far as what you want to do or specifically on what, that might be useful to add to your question. Dec 10 '10 at 22:08
• @Nick T: not sure those are exact dupes. the 1st one you cite is a starting-from-scratch, the 2nd one is arduino specific, whereas this seems to be asking, "what among the current offerings would be most in line with 8 bit stuff circa 1980" Dec 10 '10 at 22:38

You may want to start with an arduino to get an idea of what the AVR chips are capable of, then perhaps ditch the custom interface and work with more generic tools.

For somewhat larger systems, ARM cores from a number of vendors are pretty popular and scarcely more expensive.

Additionally, while I don't find it of personal interest, and am generally uneasy with the marketing idea of transitioning desktop programmers to embedded without a major change in thinking habits, there are some tiny ARM boards running a version of .NET that might leverage some of what you have been doing lately - examples would be netduino and fez panda.

• Thanks - this has been very helpful. In the 80's I wrote a lot of embedded 80xx family applications professionally, but the industry was moving to more formal languages and I needed to keep a job. Now I want to twiddle bits for fun, I do not plan to make a living out of it.
– ddm
Dec 11 '10 at 16:02

I've been doing embedded system design for the last 35 years (I'm just a couple of years older than you), and currently have projects going on using 8-bit (Silicon Labs 8051 and Freescale 68HCS08), 16-bit (Microchip 24FJ and dsPIC33FJ), and 32-bit (TI TMS320DM365) processors.

The 8-bit chips are probably going to be what you will initially feel the most comfortable with, and are still fun to program in assembly in addition to C. The 68HCS08 is an update of the Motorola 68HC05 line, and I particularly like its instruction set (not as nice as the old 6809, which was a wonderful processor to write assembly code for).

Compared to the old days when development boards and associated ICE's cost hundreds or even thousands of dollars, you can now get pretty decent evaluation boards for under $100, and free compilers. Just for fun, I recently bought a development board for the Parallax Propeller chip, which has 8 cores (Parallax calls them "gogs") that run in parallel. All I/O is done in software, which means with very little external hardware the chip supports things like PS/2 keyboards and mice, and VGA output. There is a demo board available for$80. (I have its big brother, which is currently on sale for $150.) • +1 for mentioning the 6809, probably the most beautiful 8-bitter ever. Dec 11 '10 at 15:48 • Thanks this is great information. I've been studying the 24FJ's the last few days as with the dsPIC. The lead on the 68H is great as I fell more comfortable with the (old) 68xx instruction set. – ddm Dec 11 '10 at 16:07 What sounds like fun to you? What's your budget? There are many 8/16 bit controllers that would likely feel very nostalgic for a bit. (since they really are basically the same as what you used to play with). You'd be surprised how many professional embedded systems still use 8051s. An Arduino would give you a lot of interesting add-on choices, but to me it really seems geared more for hobbyists who have to program to accomplish a task... not to people who like to get down and dirty with C and ASM. If you want a lot of embedded control options, this is good though. Be sure to check out SparkFun. Propeller looks fun... although it never seems to fit anything I'm doing. I restarted my electronics interest maybe ten years ago with Parallax's Basic Stamp II (VERY quickly moved to their SX stuff (PIC-like system, now Ubicom)) ARM processors vary widely. On the low end, they're powerful but the tools usually cost too much. On the medium and high end, they can run a full Linux system and do amazing things. (Just about all phones use them now) I'm moving into the medium end ARM range myself (lowest end capable of Linux, really) My definition of medium fits the chips that are simple enough to design a 4-6 layer PCB for. The big ones can require 8+ layers. If I was to take a guess, I'd say that after a few months getting your sea legs back you might find FPGAs really interesting. You can get nice FPGA demo boards for$100-\$200. The vendor tools are free (I'd recommend Altera followed closely by Xilinx) You can have a lot of fun designing your own logic, including small microprocessors. There are a LOT of 'soft' processors for FPGAs, and complete toolchains for developing and debugging them. I'd guess that it best fits the feeling of the late 70s/early 80s (not that I'd know) in that you can design so much of a system yourself from scratch. You can then go find just about any sensor or device whatever you want, and write custom glue logic to talk to it (no matter what bizarre interface they're using) There's also OpenCores, where you can grab functional modules that people have written if you don't want to write it yourself or don't know how. If you're interested, comment and I'll look for a decent starter board for you.

Unfortunately, you can't go TOO far with FPGAs (unless you really like playing with logic alone and not interfacing with things) without also designing PCBs yourself. I think it's a lot easier than it sounds... datasheets these days pretty much tell you how to do everything. However, it's certainly a whole lot more to manage.

• Thanks darron - after your message I started to (re)investigate FPGA's thanks to you and it's not too far out of my technology range (okay at the very egde), but would require some think power (and that is good). This is not out of the realm of possibilities for me and I like being "at" the metal, rather than "on the metal". I need to do more research, do you have some reading you would recommend? many thanks ddm
– ddm
Dec 16 '10 at 22:34
• I'm not terribly happy with what I've got, but this question is about FPGA book recommendations: electronics.stackexchange.com/questions/7163/… Dec 22 '10 at 0:10

8/16 bit flash micros (PIC/AVR etc) are probably the way to go. You can program these in C or assembler, you have control of the entire machine, and you basically get a whole system on a chip. Not to mention they're inexpensive. The biggest difference between programming these and, say, a 6502 is that they have separate code and data spaces.

There are lots of single-boards that use more sophisticated processors, that are way more powerful, but you don't really get the most from these without full-blown operating systems. Programming on these sorts of platforms are quite a bit different from bit-banging on a 6800. This can be a blessing or curse depending on your point of view. On the one hand, you can't just bang a port, you have to work through a device driver (or write the device driver) but on the other hand, you get nice things like multitasking.

• Thanks - good info - I have written device drivers for earlier version of Windows, it was not my strong point but I also had deadlines to meet.
– ddm
Dec 11 '10 at 16:10

1) Get a good reference book for C programming. I have really liked this book:

Let us C - Y. Kanetkar

2) Get a good reference book that goes through some of the building block concepts of Embedded systems.

An Embedded Softfware Primer - David.E.Simon

3) Get a good dev kit, such as the beagle board that has a very active and supportive online community to help with queries etc. Their website has tons of ideas for projects that you can get your hands dirty with.

4) You can't go past Ganssle's website for excellent Embedded Programming related information. He has excellent articles about the intricacies of Embedded Systems.

The Ganssle Group

5) You can refer to a related question that has been posted:

Embedded C Programming Material

6) At most of all, don't forget to have fun with it. Read, Read and Read, and get your hands dirty! You will run into some challenging issues, that will baffle you for maybe days, but that's the best part. Just keep at it, and you will get there!

• What - My first edition dog eared of K&R's C isn't good enough :-) Thanks these posts have been very useful for someone like me somewhere in the middle.
– ddm
Dec 11 '10 at 15:51
• K&R is the only book good enough for C.
– XTL
Dec 12 '10 at 8:09
• Let Us C cited as worst programming book: programmers.stackexchange.com/questions/6974/… Dec 13 '10 at 17:16
• @Nick - have you had a chance to read it? What is it that you don't like about the book? I have had a chance to read a few books on C in my time, and have to say, that I have really liked this book. It is a really easy read and explains some core concepts really well. But ofcourse it is my opinion, and you are definitely entitled to yours! :) Dec 14 '10 at 0:20
• @Intel: It's not my opinion, just someone else's. I knew I heard of the book before, I was trying to remember where :P Dec 14 '10 at 4:21

I totally understand your desire to hook something up and have a toolkit that just works. As Chris already mentioned, you can go with Netduino, which might be more familiar to you since it uses the .NET 4.0 Micro Framework. I personally haven't used it because I can't get it anywhere! Totally out of stock.

I did, however, just receive an mbed microcontroller to use, and in my opinion, it's way easier to use all around than Arduino and its environment. The compiler is quite nice, the editor is online (which might be the only bad thing if you don't have the local toolchain installed, which I don't know anything about). But you literally plug it in, launch the webpage that's stored in its flash, register it, and you can hop into the compiler and start twiddling bits. I was at least flashing and PWMing its LEDs in about 5 minutes from the time I opened the box.

• Thanks man - I had to laugh, I downloaded and wrote some Ar* compiler/code/emulator and wrote some K&R C for the Arduino emulator and didn't remember that a bool didn't exist yet. (Don't ask me about access to struct members!) Took me an hour with K&R rev. 1 to realize I had to define it. (Back to the future for me :-) Very kewl!
– ddm
Dec 17 '10 at 0:36
• try mbed next! I am relatively new to both platforms, but I find the mbed environment much more familiar and less quirky of an IDE. And the feature set on that micro is very impressive.
– Dave
Dec 17 '10 at 3:10