The new guy has a question!!

I'm not going to push a kit or something like that, but I think you'll find the Arduino more to your liking for Linux.

I started out a project using a Basic Stamp 2 I had lying around; for me, the coding wasn't an issue (I grew up on BASIC), but I was kinda wary that Parallax only provided a bytecode compiler for the Stamp series under Linux as a binary, with no source. At the time, I thought "well, somethings better than nothin'!".

When I decided to upgrade my system to a 64-bit box (ubuntu, BTW), that's when I hit a brick wall with the Stamp.

Their bytecode compiler wasn't just a binary - it was a statically-linked binary! That meant there was -no way- to use it on a 64-bit box; it would only work (at best) on a 32-bit box. Nothing possible could be done on a 64-bit box to get it to run (like IA32 wrappers). After discussion with Parallax, I learned that they weren't going to update the compiler, because they didn't have the source code, they lost contact with the original programmer (who had the source code), and didn't really seem to care about the product (Basic Stamp 1 & 2, at least) because it was being EOLd (in favor of the SX and the Propellor). They also didn't seem to give a darn about Linux users.

Oh well. I ended up looking around, and somehow happened upon the Arduino. I honestly couldn't be happier with the decision. Some may tell you "well the Arduino isn't a real microcontroller" or some other such nonsense; there seems to be a lot of people in the PIC world who think if you program in something higher level than assembler, you aren't getting the most out of your chip. I can't completely argue against that, having some experience with assembler, but really, I think they're approaching it from the wrong way (the proper way to write any application - whether for a microcontroller or a PC or whatever - is to first diagram and design the application, then code in whatever language suits you for that application; the higher-level the language, the better. If you find areas where you need speed increases, look toward the inner loops in those areas, and fix those, then work outward. If you are still facing issues after those optimizations, look again, and see if you need to tighten up the code, or develop those areas in lower-level code (check to see what opcodes your compiler is spitting out - maybe you can do better, depending on the compiler, and what optimization flags you have set - or don't!).

Ultimately, approaching such applications from the bare-bottom-up, on a microcontroller, from assembler, can really turn into the "wrong way" to do it. You might get it done, and it might work fast, but unless your only eatin-n-drinkin' is in assembler, you likely will be able to get something working faster using a higher-level language. This becomes especially true if you are doing the coding for a client; they don't generally care what you work in, or that it is "blazing fast" - first and foremost, they want something to work, then worry about speed and other issues. Steak before sizzle, ya know?

The Arduino (well, really the ATMega) is just as much a microcontroller as anything else. Think of the Arduino as actually a "carrier board" for the ATMega - that's a terminology you might be familiar with from Parallax products. Sure, it has a bootloader to make things simpler, so you don't need a fancy programmer or anything to start off with. I think that's a great thing; others look down their noses at it. Not that it can't be used (you can ditch the bootloader, gaining back 2K of program space, and use a real programmer with the Ardunio and IDE if you want - if you really want, you can go all AVRFreak and drop the IDE as well!)...

Welcome aboard. As one Linux fan to another, I hope the Arduino turns out to be fun for you like it has for me.

:slight_smile: