• Assembly and Demo Video

    sjm430601/03/2022 at 21:15 0 comments

  • In the Beginning ...

    sjm430601/03/2022 at 21:14 0 comments

    Before you can run you must first learn to crawl ... so before going right into the microscopic I decided to design 5x7 matrices around the larger WS2812 5050 LEDs. This decision was threefold: I already had a few hundred WS2812's I amassed during a late night online shopping spree from a few years ago I never got around to using, I wanted to make something I could easily solder with my recent meager stenciling and reflow skills, and finally debugging a larger board with less components would be far easier than the opposite.

    So I threw these together and assembled a prototype.

    ... and shortly after a few more lol. RGB matrices are like potato chips, you cant have just one! Something I learned is that while the reference circuit for the WS2812 shows a series resistor on the data line and a decoupling cap on each LED these aren't really necessary in practice (well at least I got away with omitting them on later prototypes, with many more LEDs).

    Ok so that turned out pretty ... well pretty. So now I was comfortable with moving on to the much tinier SK6805-EC15. This really tested my pcb design and layout skills, especially considering I limited myself to double layer and the requirement that the boards had to be soldered side by side with no visible gap. I ended up pushing JLCPCB almost right up to their limits in terms of minimum via and trace dimensions.

    After about a week I had a batch of 10 of the new boards in hand. I also ordered a solder stencil ... I'm insane but not the hand solder 64 1.5mm RGB LEDs kind of insane! Quarter for scale (sorry I was fresh out of bananas).

    Kind of regretting my life choices up to this point ...

    And for the most part they looked fine ... except I cut very close to the top right edge with a single via which the edge route ate into. I've since modified the board to move the via as close as I could away from the edge so we will see how it turns out next time.

    I threw together some fast test code using Adafruit's Neopixel library and here's the first demo.

    And now to show off something more colorful (and the display exhibited asexual reproduction between coding sessions at that point).

    ... yet again doubling by the end of the night!

    So how about two rows?

    It was at this point that I stopped and realized I'd used all 10 pcbs and most of the roughly $65 of SK6805 LEDs I ordered. Oh yeah and I was starting to hear voices and have nightmares about hand placing the little devils.

    So here's where I sit at the moment. I ported my text library but ran into a tiny problem ... get it TINY? The astute of you may have noticed how there's a pixel missing from the character 'b' in the pic above. This is because with my current set up trying to drive 640 of these LEDs I've found that I cant control more that exactly 564 LEDs! I don't know if it's a RAM limitation of the ATMEGA328P I am using or the Adafruit library but looks like I'll need to do some more testing. At any rate I've found that trying to use only 1 serial IO to drive this many LEDs causes noticeable refresh delay when updating the display. So it may be just as well to just using one IO pin for each row to solve both of these problems in one fell swoop.

    Anyway this is only the beginning of this journey, I have big plans in the future ... erm or should I say tiny plans ... nano plans?

    [Quick Update] The issue with the 564 LED limit was in fact the Atmega's limited RAM. Moving to the slightly larger Atmega32u4 with half a kilobyte more RAM allowed me to write to the entire display. This is because the neopixel library allocates a buffer containing 3 bytes per pixel within the function that writes to the LEDs (it has to be done this way since the ws2812 protocol is asynchronous and requires pretty tight timing), so the programmer has to be aware of this so as not to run into issues.