I'm going to skip over some of the prototyping and code for the front panel and move on to making the PC board. Many (many!) years ago, I tried making PC boards using etch-resistant tape and dry transfer markings but the results were, to say the least, amateurish. Things have improved dramatically since I was a teen-ager.
Some time ago I posted the rev B schematic. We're now up to rev D for the front panel. I've also rendered it as a board, using Eagle.
I was going to use SparkFun's service for manufacturing, but right when I was ready, they sold that business to OSH Park. Submitting the board to OSH Park was easy (once I worked through some issues with the silk screen overlapping the solder mask.) Wait a couple of weeks and, yay!, three copies of the board arrive.
They look corre... oh crud, I put the board name in the top copper layer, but reversed. I meant to put it in the bottom one. Gotta be a bit more careful about this.
Next step is to populate the boards. Since I'm using through-hole for everything, that's not a very tough job. Until I got to the square RG LEDs. Getting them to line up square and even is a major pain. In the future, I'll need some kind of jig to hold them in place.
Time to test. First, I tried loading the stand-alone test driver, but AVRdude is complaining that it can't talk to the board. Double-crud. It turns out that when I first designed the board, I put the programming/bus header on the bottom, along with the LEDs and the reset button. But then I realized that the header really should be on the top with the rest of the componets. That way, the header is not forcing the LEDs further from the outside of the case than necessary. I hadn't flipped the header back to the top in the board design, so I had to un-solder it and put it on the bottom with the LEDs. I ended up having to destroy the header and replace it with a new one.
Ok, with the header on the right side, AVRdude is happy and the self-test loads. It even works! Woo hoo! The next step is to try driving it from another MCU. I put another ATtiny84 on the breadboard and hooked it up. After some struggles with the driver software, both on the FP and on the test driver it works!
One physicial design issue (two, really): The RGB LEDs are very bright, so I probably need to change the current resistor on the TI5916 from 1K to something else. In a related issue, the square RG LEDs are close enough together, and dim enough, that they bleed into each other. I have to double-check but I think that the resistor on the MAX7219 is as high as I can go for these LEDs. What would really help would be some kind of bezel that isolates the bulbs. That would probably be able to serve as the soldering jig as well. 3D printer, anyone? Time to re-learn Blender!
Other problems: Space is tight so attaching logic analyzer leads to the ATtiny84 is a pain. The ATtiny84 doesn't have on-board debugging capabilities so debugging consists of monitoring the data pins. There are a couple of spare data pins and I can wiggle those at various points in the program. What I really need, though, are some header pins that I can easily attach the logic analyzer to.
I'd like to reduce the size of this board a bit. It's 1.5 inches wide and I'd like to get it down to closer to an inch, and perhaps a tad shorter as well. That means using SMD components and learning how to solder those. SparkFun has an SMD Simon kit that I'll try.
So, the next version of this board will:
- Use SMD components;
- Put the header on the top, LEDs and reset switch on the bottom;
- Use revised current resistors for the LEDs;
- Include pins for testing;
- Incorporate a bezel.
All-in-all, though, I'm pretty happy with the board. Not too many mistakes and only one of them required some real re-work. No green wire the first time out! I've assembled two of these now, one with 8 RG LEDs and one with 16. I'll wait for the next version to do a full 32-LED board.
Next stop, the CAN commuications controller.