« Back to home

Babyduino Boards - Some Lessons Learned

I had enough time to solder up one of the boards yesterday - it was a mix of good news and bad news. I'll start with the good news first.

Component Side

The boards are very nicely made and I'm pretty happy with the design that I came up with (especially as this is the first board of my own design that I've had made up by a professional service). I'm glad they are a bit larger than I had originally planned - it makes it very easy to place and solder the components which makes this a suitable board for a beginner.

I used a 28 pin DIP socket rather than solder the CPU directly onto the board - these boards are designed to be fairly flexible so using a socket means I can switch out the CPU for one of the alternatives fairly easily.

Solder Side

Looking at the solder side you can see that the placement of the pads for the pin header that exposes all the CPU pins is placed nicely so you can either solder the pin header in it's normal orientation or in parallel with the board (as I did in this example) so it can function as an edge connector. Once again the spacing is comfortable enough to work with so this isn't a difficult process for a beginner. The only concern I had was the size of the pads and holes for a generic pin header that Fritzing uses in it's footprints - they are a little too large for my liking. This makes it hard to orient the pin header vertically and could lead to an accidental solder bridge being formed between the two pins.

Once the board was made up it was time for some testing. This is where things fell apart a little. To make the test verifiable I first put a bootloader on an ATMega88, set it up on a breadboard and loaded a simple blinky light sketch onto it. Once I confirmed that it worked I moved the chip over to my new Babyduino board and powered it up. No luck, not even a single blink of the LED.

My first thought was that I had created a short across the reset header but a quick test with a multimeter showed that this wasn't the case. I then checked the continuity between all my solder points and and the intended outputs - everything checked out.

ATMega8 Pinout

After doing a detailed comparison between the schematic, the breadboard layout and the PCB I finally realised that the footprint for the IC was incorrect. The pins of an IC are numbered as shown in the image to the left - pin 1 is in the top left corner and the numbering increments down the left hand side and then increments up the right hand side of the chip. The software I've been using to generate my custom Fritzing parts is generating the wrong pin assignments for PCB footprints. Instead of counting the pins up from the bottom on the right hand side of the chip it is reversing the numbering on that side. In the case of the ATMega8 this means that what should really be pin 15 is being associated with pin 28, pin 16 with pin 27, etc. This seems very odd at the moment as the pin associations for the breadboard footprints for the parts are all correct.

I'm very dissapointed with myself over this, I obviously should have done more vigorous manual verification of the board layout before sending it out to be made. All is not lost though, if I drop the decoupling capacitor - adjust where the link wires ago and perhaps add a few additional wire links I should be able to use the boards I already have for non-clocked versions of the Babyduino. I'll have to give this some thought before moving forward.

More immediately, I need to fix the bug in the software I use to generate part footprints. This also means that that any of the custom parts I have up on my site at the moment cannot be trusted for use in PCB layouts (they work fine for schematics and breadboard though). Once I have that sorted I can redo the board design and have some more made up. On the plus side this gives me an excuse to make some minor design changes to the board as well.