So, I’m an electrical engineer, and I’ve seen quite a few articles and comments from other engineers going on about how bad Arduino is in practical use. I can’t even fault them much for their viewpoint, colored as it is by their day-to-day world. When an engineer is working for a company that expects to produce thousands or even millions of units of whatever device is being designed, different things come into play. Yes, they will use the minimal cost processor and then squeeze every last bit of performance out of it by working directly with the machine. In that case it’s perfectly justified to spend a week or even a month of engineering time to save pennies here and there.
However, I’m a practical guy. I love the idea of using something to its full potential. But if I’m making something for myself I’m going to churn it out as quickly as possible. It’s not worth it to spend a week figuring out if I can make X algorithm work on Y chip just to save a dollar or two. Or even twenty. I still will do that kind of thing at times, because it can be fun, and I learn a ton every time I try it. I’ve sunk innumerable hours into researching algorithms and just what peripherals a certain chip has, or how many cycles this or that process might take. (Whether I need the hardware multiplier or not, for example.) But it doesn’t really make sense, (or cents. 🙂 ) from a dollars vs. hours standpoint. I have far too many projects that I want to do, and far too little time to get them all done. I need to be pragmatic about it.
So, in that vein, I readily admit that I will use the Arduino environment to program my personal projects. If something I’m doing eventually becomes a commercial project and a company wants to pay me to optimize it for producing 10k units, I’d be happy to do it, but that’s a different story. Even for my personal projects, it’s easy enough to go through the code and tweak it with knowledge of the circumstances of my project to be more efficient, if I find that it’s necessary. Most times it isn’t, though, as these little processors are really very capable for hobby level playing. If needed, they can also be ported over to a more capable processor for a little more money, to really make for a quick transition to more muscle.
I generally use a cheap Nano, but my go-to for more muscle is the Teensy, made by a guy local to me here in the Portland area. (Not that it matters too much, but I like the idea of supporting local, and I’m also proud that things are made here.) For less than $20 you get a true 32-bit ARM chip at 72MHz. It is fully and actively supported in an Arduino environment, so code can be mostly cut-and-pasted. (Pins might need modification, and there are some other gotcha’s, but overall it’s an easy and very powerful step up.) Just as an example, it only takes in the ballpark of a millisecond to run a 1024 point FFT on 16 bit input integers. The Arduino Uno just barely has the memory to store the 1024 16 bit integers, but then it couldn’t do anything with them. If it could handle it, it would take at least 10-20x longer. (Paul just started a kickstarter project to fund a couple higher-end Teensies. The fastest is 180MHz and has a floating point unit!)
So, if anyone wants to tell me that I’m doing it wrong and it could be done so much cheaper/better using XYZ, this is my partial answer to that. Yes, I’m aware of that, but it’s a trade-off. My time is worth far too much to spend an extra hour to save $1, much less spending weeks to learn all the ins and outs of a ‘cheap’ processor that will save me a few bucks. If you want to step up and pay me for my time to do a design, by all means let’s talk. If you just want to make me aware of where I’m not doing it the best it could be, I’d also be interested in talking, but more from a continuing education and general interest viewpoint. I might not change anything.
Oh, as an aside, I also love the idea of using the Texas Instruments MSP430 series of chips. I have a stack of them on Launchpad boards ready to use, but I still haven’t gotten around to using them. Their time is coming, though. They are ideal for low power applications, so I need to spend some quality time with them and get up to speed on their use. They also have a decent showing of user groups and contributed code/projects to build off of, but not in the same league as Arduino, which seems to have gotten that ‘flash in the pan’ quality just right.
I’m also currently working on learning Ada, so this might change how I go about my projects.