Day 30: final day

This post is part of the GaSiProMo challenge.   You can read more about this here.

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.

OsRAM write timing
OsRAM write timing

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.

Oh well, what can I say?   I got distracted by another project.  So I can show you what I have so far:

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.

Until next year.

 

GaSiProMo

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.

The deadline this time?  Something called the Galactic Side Project Month  (GaSiProMo) challenge.  You’ve heard of Hackathons or Codefests?  This is similar, but with a more sane schedule of an entire month for completion.

It was tempting to submit one of my more languishing, challenging old projects.  But in the end I decided on something new and fresh, one that is slightly more achievable.

Osram 5x7 display module
Osram 5×7 display module

For GaSiProMo, I’m going to get this display up and running.  It’s an intelligent LED matrix.  I might even throw in a keypad to change the patterns and such.

I’ve had this display module lying in my Big Bin of Parts for… more than 10 years.  At this point:

  1. I’m not convinced it even works.
  2. I don’t know what color the LEDs are (the module comes in yellow, red, and green).
  3. And I’m certainly not convince it will be that cool, but at least it’s a project that I’ve always wanted to do.

So there we go.  I’ll post regular updates here and over at the GaSiProMo website.  It’s time to blow the dust off some of these old projects.

The state of the Arduino ecosystem

*** The following is a “bitter old engineer” rant.  You’ve been warned.

At this ripe old age, I have come to value most the quality of a toolchain. I’ll go a step further and say that the coherency and consistency of the umbrella that toolchain inhabits is a most prized quality.  And what spurred this revelation?  Why the obtuse declaration?

I have seen the other side, brothers and sisters. I have felt the greener grass on the knoll of Arduino, and I’m here to tell you something: it ain’t that green.

My (albeit, limited) experience to date in hacker-friendly Arduino land has been lackluster. It reminds me of another favorite rant of mine: Linux. There are some striking similarities between the two communities of DIY hobbyists and computer enthusiasts.

The Arduino Uno, marvel of electronics enthusiasts.
The Arduino Uno, marvel of electronics enthusiasts.
  1. As soon as something “official” releases, there are half a dozen “forks” that have splintered off. This serves to dilute the overall user experience, causing bewilderment and disorganization.
  2. As a result, newer users aren’t sure where to start to get things up and running.
  3. Knowing where to turn for help is equally difficult. Because the dragon has a dozen heads, you might have to slay them all before you master the thing.

I have on my work bench a handful of Arduino-esque stuff, virtually all of it non-operational hardware (so far):
a) A Pololu AVR programmer
b) A Sparkfun Pocket AVR Programmer
c) A homemade ISP programmer
d) An Arduino UNO
e) A relay development board with ATtiny2313 MCU

a)

This was a replacement for (b), promising to be more better faster. At least this manufacturer’s drivers are self-hosted, i.e., they make their own suite of drivers. It’s not some arcane foreign package, managed by yet another third party, long defunct. And yet… damned if the thing won’t work. I get the dreaded Exclamation Point of Death.

b)

This is a hopeless mess. Sparkfun’s driver link just goes nowhere. After a half an hour of reading and clicking, I stumble over to another vendor’s site and find some hearsay about yet another suite of drivers that allegedly work. Finally this installs, but there’s no COMM port listed in Device Manager. So, none of the software tools can recognized the thing.

c)

I was foolhardy to think I could make my own programmer from scant directions on the interwebz.  That was just a big fail.

d)

My first Arduino dev board, the Uno, does not work. I plug it in, and most of the time no machine will recognize it. No “bonk”, no “ding”, nothing. I took this to my office and gave it to my technicians who are well accustomed to working with QC and microscopes and fancy solder reflow equipment. They found nothing distinctly wrong with it. And yet it clearly doesn’t work.

I found that if I bend the Uno board a bit (yes, bend), I can get Windows Device Manager to wiggle a bit. So there appears to be an inner layer fault, most likely a trace intermittence. Lovely. Another brick for my pile.

e)

To program the AVR chip, I turned to these sprinkling of software tools that purport to do so:

  • WinAVR
  • AVRDude
  • AVRDude-GUI
  • AVR Studio

The top three have been dudes for me so far.  I’m yet to try the gold standard, AVR Studio.  After all, this is published by the manufacturer of the MCU…

The only piece of hardware above that I got to work was the relay I/O board. And you know how I did it? With a Freescale HCS08 dev board. Not an AVR chip or an Arduino board. The S family of chips is simply lovely. It’s soothing. It’s a fresher breath of air, having inhaled the stale aroma from the Arduino “hackerspace”.

But to be fair, Freescale is my comfort zone.  I cut my teeth on the Motorola HC11.  So it stands to reason that I’d favor that flavor.

The uniformity of experience in going from a line of C code to a hex file burned onto silicon is now even more valuable to me. The Freescale “way of doing things” is a much more pleasant thing. One application (CodeWarrior) weighing in at a hefty half gig, published by a single vendor that also happens to design and fab the chip you’re using, is all you need. Start to finish. That’s power.


I should note right here and now that I’m actually the biggest supporter of the Open Hardware Movement and the philosophies that Arduino espouses.  There have been countless amazing creations achieved with this platform.

It’s in the implementation that I’m disappointed.  Frankly, I’m surprised that the masses aren’t as frustrated as I am.  I suspect that this is indicative of a greater public movement: that of DIY culture invading every corner of the marketplace.  The software (or tool, or apparatus) doesn’t work as advertised?  No sweat, just hack it!

And that ethos truly is something to celebrate.  Kudos to the Everyman who fixes something rather than disposes of it, complains, and buys a new one.

But coming from the engineering and product development side of the aisle, I’m forced to side with the philosophies of coherent and esthetically pleasing user experience.  This has value too, just as much (I would argue) as the value of DIY, crowd-sourced electronic hobbyism.

Surround Sound Debug

For some reason, this keeps happening to me. I must be doing it wrong. But I’ve either been too stubborn or too distracted to find the better way to do it.

I’ve installed surround sound wiring into my abodes at least five times (twice in my bachelor days at two different apartments, and thrice in my married days in all three of Sarah’s and my mutual houses. So I have a fair amount of experience with fishing wires down walls and into ceiling joists, cutting in low-voltage single-gang electrical boxes, and wiring up multi-channel audio speakers.

But the one step in this many-tiered project that I haven’t mastered is this: the differentiation of the channels during the final wiring.

home-theatre-speakers-diagramHere’s what I mean. You get all the four main channels mounted and wiring run from the four corners of your media room. Add the center channel and you have five sets of wires coming into a single hook-up junction box near your media center cabinet. Next step: terminate those 10 conductors into speaker lugs, or banana jacks, or binding posts.

But which channel pair goes to which speaker location? Doh!

And it’s not just an accident. I have tried various cable labeling in the past, as I did this most recent installation. But inevitably, my installs have included fish-taping cable down finished walls. Therefore, the labels that I’ve used — such as tape or zip ties, etc. — have always come off the cable in the process. Without that identification, it’s hard to know how to hook the cables up.

So what to do? I haven’t found much on the DIY home audio forums on this topic, strangely, which makes me wonder if I’m going about this installation all goofy. Do the pros do it better? Probably.

My first generation surround sound amplifier had a channel test tone utility that was helpful. It would emit a 1KHz tone into each channel for about 2 seconds and automatically increment to the next channel. But this wasn’t ideal for a few reasons: 1) It wasn’t controllable. Once that 2 seconds had expired, you’d have to race to the other speaker to hear the tone. Not very efficient. 2) The tone obviously required that the speaker cable be terminated between the speaker and the amp to be of any use. It’s an audible tone, therefore you need a speaker to hear it. So that’s not too helpful either since I’d rather hook up all the wire after I determine which set of wires goes to which speaker channel.

So here’s how I solved the problem.

Requirements

  • An LED
  • A 1KOhm resistor
  • A 12 battery
  • Some alligator clip leads

Setup

  1. Wire up the LED indicator with the current limiting resistor attached either to the anode or cathode. A more preferred method would be to use a ready-made indicator LED panel lamp that has a built-in resistor. These assemblies come with red (positive) and black (negative) wires. Here’s one from Digi-Key. http://www.digikey.com/product-detail/en/SSI-LXH312ID-150/67-1190-ND/145097
  2. Connect the anode side (red wire) to your unknown speaker wire positive lead.
  3. Connect the cathode side (black wire) to your unknown speaker wire negative lead.
  4. Back at the junction box end with all 5 channels, connect the 12V battery to the positive and negative wires.
  5. If you don’t see the LED light up, first try switching the battery leads on that same channel.
  6. If the LED still doesn’t light, move the battery to the next set of channel wires.
  7. If the LED still doesn’t light, repeat steps 5-6 until you find it.

Theory of operation

The nice thing about this method is that the LED is unidirectional. In other words, it doesn’t light unless (conventional) current is flowing from positive to negative. This is key, because you don’t want to get the positive and negative terminals mixed up to your speakers. Therefore, using a DC incandescent light bulb would be a mistake, since it will light bi-directionally.

Notes

I’m aware that some speaker wire have knurled, striped, or discolored conductor insulators to help you differentiate between the two. This is helpful in most cases. But in two of my installs, I used some Monster brand cable that had little to no helpful indicators. So the above bailed me out.

Project Gallery

Cell phone connector fix

My good friend James contacted me with an electronics problem.  Seems his daughter’s cell phone was on the fritz.  So I agreed to take a look.

She has a Pantech P7000 flip phone, but it stopped charging.  I asked a few questions first to understand the nature of the problem.  For instance:

  • Has she tried other wall chargers? Yes, all give same symptoms.
  • Has she tried other batteries? Unknown.
  • Has she tried wiggling the cable to see if it makes connection? Yes, and it does.

James gave me some great info, so I knew what I was in for.  My guess was that the charging connector on the phone was going bad.  I’ve seen it before.  James sent it to me to have a look:

The first thing I did was have a look at the charger, just to test out the verbal info I gathered from James.  With a set of helping hands, I probed out the power and ground pins:

charger cable connector

I saw a nice steady +5V, so the charger was good.  Although its plastic shell was a bit wobbly, it seemed to be functional still.  Now, onto tearing apart the phone.

I couldn’t find a tear-down guide online, so I had to figure it out for myself.  There’s one obvious screw above the battery compartment:

reverse without battery

But I had a hard time finding the other hidden screws.  Turns out, there are four hiding underneath a bezel surrounding the keyboard:

bezel

Once those are gone, the assembly comes apart rather easily:

Now the back shell can be removed.  When I did, the charging connector tumbled right out.  So it was no longer even attached to the PCB:

connector gone

Here is a closeup of the connector:

bottom side

You can even make out the copper pads still attached to the pins, which have ripped off of the PCB.  That’s never a good thing!  This type of damage is actually quite common in consumer electronics.  This interface isn’t always well designed on most cheaply produced gizmos.  And yet, it’s an area that is very high-traffic; in other words, the mating cycles of the charger or serial cable to the phone is always quite high.  As a designer, I would prefer these interfaces to be more robust.  But then, I’m more interested in lifespan of my electronics, whereas most electronics companies would prefer you buy new products every 6 months.  I digress.

At this point, I wasn’t yet sure I could repair this.  There was significant damage to the PCB pads (some pads entirely gone!), so I first cleaned off the remaining pads by re-tinning:

damaged pads

Next, I cleaned off the pins of the connector.  Then I re-placed the connector down on the board and soldered it back on.  I got maybe 80% coverage of pins to pads.  The number of pins on this connector is maybe 10-12; obviously only 2-4 of which are used for the power charger.  So all that was strictly necessary were those sets of pins.  As luck would have it, those power pins were still intact.  The phone is back to life!

Reassembled

Full Project Gallery:

iPod jukebox (phase 2): prototype

You remember the first phase of the iPod jukebox, yes? To jog your memory, the basic goal was simple. How do I make these dust-collecting components:

…work with my iPhone in order to have music in my workshop?  Simple concept, not so simple electronics. The project is mostly a connectivity issue, i.e., there are tons of inputs and outputs that must all be managed with connectors and wiring and power regulation.

On paper, the system looks something like this:

system schematic

In Phase 1, I had done a substantial amount of wasted work with one such cable: the audio/power cable for a first & second gen iPod.  Since the project had been shelved so long, several generations of iPods and now iPhones have come and gone.  Well, in that time, Apple has settled on USB as their power bus of choice, rather than FireWire.  Thus, I had to likewise change directions on this project to accommodate my iPhone (rather than the antiquated iPods).  Mounting options naturally have to change as well.  And the overall enclosure gets modified too.  It’s quite a ripple effect when your central component (the music player!) gets the switch-aroo.

I was locked in a brain-freeze for quite a while on this part, the mounting and enclosure.  I had been stuck on the idea of trying to make a “pretty” Apple-esque Plexi box.  But I finally admitted to myself that this is just above my skill set.  I have a hard enough time making ugly black plastic kit boxes look pretty, let alone clear Plexi where blemishes show so easily.

So instead, I’ve decided to embrace ugly.  Why not just make this phase of the project an intermediate step rather than the final step?  My garage is already an acceptable and appropriately dirty place, as is the attached workshop.  Just let this jukebox fit in with that kind of environment.

So I completely re-thought the enclosure phase.  I began cobbling together other old cases, car mounts, and such to make a quick enclosure that would be practical, yet secure.  Such parts included:

Mounts

iPhone gooseneck holderiPhone holder #2

Cables

USB audio iPhone cable

Chargers

USB Car Charger for iPodcharging circuit

In putting all these items together, it now (unintentionally, I assure you) might resemble something else entirely, as you’ll see in the project gallery below.  But hey, this jukebox does reside in the man-cave after all.

What’s in store for Phase 3?  Coming soon, I’ll package all this mess a little nicer.  I have some connections in the machine shop world.  I also will reveal this gizmo’s name, so stay tuned.

Project Gallery:

Video:

References: