4 RGB LED Controller Update

I recently began working on a consulting project that required the creation of some PCBs.  Since I have had such great success with BatchPCB.com in the past, I decided to use them again to fab the custom PCBs.  The BatchPCB purchasing system adds a few static fees (set-up, handling, and shipping), so I felt that this was as good a time as any to make some additional of my PIC16F628 4 RGB LED PWM Controller boards with a couple of modifications.

As I noted in the previous post, there was an error on the first revision of the board and a pull-up resistor on RA5 (pin 4 in the schematic above) was necessary.  I added the MCLR resistor to the board along with a couple of other modifications:

  • Removed the extraneous capacitors, we only need one.
  • Added a breakout for the one remaining I/O pin.
  • Added a small perfboard to the PCB with +5V and ground lines.
  • Relocated the resistors to make them much easier to solder.  I may use a SIL resistor array in the future.

I kept the LED locations exactly the same because, hey, if I put all of the time and effort into the 4 boards that I previously ordered, then I might as well keep the same form factor.  My scheme for the short-term is to create a 4×4 array of the 4 RGB LED Controller boards, which will give me a 20cmx20cm 8×8 RGB LED display.

Here are some pictures of the boards:

Here is the updated schematic and board (note, you can open the BRD and SCH files in Eagle Layout Editor):

And finally, here is an updated firmware that improves the PWM performance:

I will make sure to post when I have the full array put together (I currently only have 12 of the 16 boards I need for the 4×4 array).

13 thoughts to “4 RGB LED Controller Update”

  1. Version DR1r8.hex don’t works by my? while version DR1r7.hex do it alright….

    what do i wrong?

    i have 8 PCB with adress 1 to 8… change visualbasic program a little… and everting works, only i the communication is to fast , than the PCBs stopt ,one by one, with the communication….

    help please….

  2. By the way, have you looked at National Semiconductor LP8501 driver; drives 3x RGB LEDs, up to 25 mA per LED, has charge pump to work from <3V, does lots of interesting stuff, I2C interface, 4 selectable addresses …

  3. I have just sent away for a slightly modified version of the PCB to be manufactured. I will send you some pics etc once they arrive.

    I have changed the LED pinoputs slightly to allow for easier routing, Im hoping i can adjsut the software to suit,
    Also have you looked at using the smaller 18f series pic’s? they have a faster internal osc and I think they would allow full 8 bit dimming i believe. Hopefully i can make some modifications ot the software, I will keep you informed.

  4. Is this dynamic unducation with PWM?
    Where are you use this device, because i can’t find to this use)))
    Sorry for bad EN.

    How many $ you gives for PCB, it’s from China?

  5. Hi,

    Im wondering about the interface between the PC and the boards. what are ypou doing there, how are you powering the boards etc.

    its one thing to have a few running on a project board. i think its a different story to get em running in a 4×4 grid thats standalone.

  6. Just got my boards back, and i have found that the holes for the pic pins are to small. Looks like your boards are the same. ah well. next time i will need to change the part

  7. @Peter: You are absolutely correct. It turns out that the EAGLE library I was using to generate the boards had drill sizes that were just too small. I was able to solder the sockets onto the board, it just was a little bit awkward because they are not placed through-hole!

  8. @Peter: The boards are currently being powered by my franken-supply, which is a PC power supply that I cannibalized. The modules themselves are wired in parallel, so they share common +5V, GND, and serial RX bus.

  9. @Peter: I’ve actually run into a speed barrier with the current generation of boards. The problem is that 4MHz internal oscillator will only allow a maximum of 19200 baud (due to the SPBRG settings). I can only achieve a maximum of ~12 FPS on the display due to the slow RS-232 speed. This is because I am transmitting 144 bytes to update the entire display, so the maximum theoretical throughput at 19200 baud would be 16 fps. If I could run these at 115200, I could have a theoretical max of 100 fps. If you plan on using these in a very timing-dependent manner, then you might want to consider increasing the clock speed to 20MHz (using a crystal or resonator) and increasing the RS-232 baud rate to 115200. The newer 18F series would be even better, but frankly, the cost could be prohibitive for a larger-scale display.

  10. @Alan Parekh: (I’m addressing all of these messages in the wrong order, I’m sure…), I hand-routed the board. It’s more time-consuming but tons of fun.

  11. 16F628 Serial 4 LED PWM – 4-bit exp DR1r8.c



    andreas ioannides

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.