To some, the smell of solder is like the smell of fresh cookies. I can’t help tinkering with LEDs, microcontrollers, and computers. It’s what I’m paid to do, but also what I love to do with my free time.
The volume knob in my wife’s Toyota Highlander behaved weirdly. As you turned it up or down, the volume setting would jump up or down, sometimes in the wrong direction and by an unpredictable amount. It didn’t give a linear output as you would expect.
I’ve got most of the bugs ironed out in my display interface, but not all have been squashed in the driver portion. In other words, the method in which I can input text into the OsRAM is working nicely (I’m using a serial port console), but the nuts and bolts of how strings are sent to the display — arguably the most important part of this project — remains broken slightly.
The problem is that I was lazy. I should have paid more attention to the WR and CE lines for proper data latching into the display at the right times.
But this challenge has been fun. It’s always fun to work under a deadline to see what you can do. This forced me to learn more about Arduino. And despite my first impression, I’ve come to see that it’s pretty great. I especially love the C++ class support. For instance, its string and bitwise libraries are awesome. There are things that aren’t so great, like the editor. I had consistent undo (CTRL+Z) wonkiness that scared me (I was afraid of code-eating), so I switched quickly to Notepad++ with a good syntax language profile.
Things are progressing nicely. I have the display fully wired now to the Mega. It’s a spaghetti mess, but it’ll work. I have the serial port on the Arduino working nicely for debug. I also did a fair amount of thinking with regards to data and address packetizing. It quickly became apparent that doing a bunch of digitalWrite calls for all this pins (8 data, 5 address, per character of the display) would be a nightmare.
Here is the character map for the display.
So I came up with a character array method to do this. I tested tonight with the serial port debugger to verify correct character parsing.
The good news is that for my new project (which has a deadline), my new Arduino Mega is not in fact defective. I can attest its functionality tonight, at 10:45pm.
This platform is pretty slick. They cleverly have positioned it between full language control and GUI-only. The syntax is mostly C strict. But there are abstracted functions and methods that keep the very low-level hardware constructs from mucking up the works. In a word, Arduino has “de-engineered” the sometimes maddening experience of working in firmware on any given microcontroller.
In mere minutes, I had a PWM signal outputting a nice fade on an LED. This would have taken me a chunk of time on the Atmel micro that is used on the board.
The IDE lacks a lot of polish, but then I suppose that’s not unintentional. IDEs are precisely where a lot of engineers get cranky (see above), and IDEs are not the point of hardware design.
So I don’t have much to update for my project, but this little stepping stone is encouraging and enlightening. Get it? Englightening?
I got the display mounted to a breadboard. How about that, it’s green!
The display has a self test diagnostic mode built in, which is incredibly handy. Saw little cute LED bits flashing and twinkling. So the thing appears to be alive, after all these years! Here is some video too:
The majority of my project frustrations seem to revolve around toolchains. I hate changing tool sets because the learning curves are so steep. After a few hours, I finally sided with an Arduino Mega board.
Next step: wire up the display to the Arduino. This will be a big trek into the unknown for me. I haven’t done much with Arduino yet.
I’m a notorious task-starter, and not a great task-finisher. My garage is littered with old projects that are collecting more dust than accolades. I can lean on the old, dependable excuses but really that’s lame. If every moment is the new normal, then there aren’t any excuses. Our hobbies define us, and I love my hobbies. So it’s time to get serious about some side projects.
One thing that I’ve always responded to positively when it comes to my side projects is a good deadline. Nothing motivates like external pressure.
Last time, I talked about two key aspects of technology that tend to make loyal customers: platform ecosystem and user experience.
It was a natural transition from owning Macs for the better part of a decade to iPods and then finally iPhones. Apple has done well to keep the user experience very fairly consistent between all the platforms. That is probably their single greatest contribution to the technology world: coherent ecosystem. In other words, the way you work on a Mac tends to be naturally the way you would work on an iPhone. And that’s a good feature. It makes for loyal customers.