I recently ran a batch of my Neo Pixel clock boards through the factory here. It’s an Arduino UNO-based design that I made for myself not long ago. It sports an Atmega328P, with bootloader, an FT231X USB chip, and a DS3231 real time clock (RTC) chip. Pretty standard stuff. It doesn’t even use small parts. All the passives are 0805 size. There’s nothing exotic here. So, where did I go wrong?
I also used my 3D printer to make a clock frame to hold this board and a 60-pixel ring of NeoPixels, from Adafruit. I found that with the micro USB connector on the top of the board, it’s a little awkward to plug in the USB cable, so I put pads for the connector on the back side of the board. Depending on exactly where and how the board will be used, the micro-USB, button switches, and clock backup battery can all go on either the front or back surface of the board.
Programming the bootloader worked as expected, so I assumed it was just a job well done. Except it wasn’t. When I plugged in the micro USB cable, the RX and TX LEDs flickered briefly, but the board wasn’t recognized by my PC.
Take a look at the back side of the PCB and see if you can find my mistake (spoilers after the photo).
I ran a 24 mil trace around the back side of the board to supply power to the NeoPixels. That’s not a problem, except that I closed the loop on that trace, and didn’t put a path for the ground to get across the trace.
Follow it around, and notice that the ground connections to the u-USB connector don’t go anywhere except to this part of the plane. Ugh.
Cassini’s gone now.