Let's split keyboard with LED

I’m modifying an open source project “let’s split keyboard”.

I want to add SK6812/3535 to each key switch.

The LEDs are controlled by the master (left hand side) arduino pro micro

So, the connection will become

left hand: LED pin (pin 1) -> LEDs -> xtradata (TRRS cable)
right hand: xtradata (TRRS cable) -> LEDs -> LED pin (pin1)

left hand side is the normal connection
right hand side - the board is vertically flipped. And the LED is rotated 90deg. And thus, the DIN and DOUT are swapped.

My question is

  • does the schematic make sense?
  • if I connect DOUT of the last LED to the right hand side arduino pro micro pin 1, will there be any problems? or is it recommended to add a jumper?

In case people are wondering what this is about…

The wrinkle here is that two identical PCBs are used but they are reversible, one is used “upside down”. That works because THT components can be mounted either side, and footprints are adapted to give them symmetrical layout. It seems the only reason for doing this is to get the cable connecting the two halves to be near the middle, but it’s a complicated way to solve a trivial problem.

Anyway, this is a typical X-Y problem. Since the SK6812 is SMD, you can’t do the same “flipping” trick, you will have to put duplicate footprints for each LED on the top and bottom. Then, the output of the MCU will be connected to DIN regardless and the question is moot.

1 Like

Thank you for clarifying the SMD. After knowing this, things become easier. (And I feel stupid asking that question :P)

So, on the master side, I should use LED (pin 1 of arduino) as the input. That is bridge JP3 and JP1.
On another side, I should use xtradata (From TRRS) as the input. That is bridging JP2.

For the standard approach, does this look right?


Any smarter ways to reduce the number of jumpers? I’m still thinking the possibility of the LED 90deg rotation for ‘flipping’ DIN/DOUT on the slave side. Probably a 90deg hack requires 1 or 0 jumpers?

I think you need to duplicate that whole block of LEDs, one for each side. The “normal” side will be driven from the CPU, the other LEDs will not be fitted. On the “flip” board the LEDs will be driven from the connector, and ‘CPU driven’ LEDs are not fitted. I don’t think any jumpers are needed, although it’s not a big deal either way.

There are regular LEDs with a bottom mount, they will shine through a hole in the board. I haven’t seen any smart LEDs with a bottom mount, maybe they exist.

How about if I use this double-sided footprint,

I’m not sure if KiCad will allow SMD pads on both sides. It knows that physically an SMD is mounted on one side, and so it has to be on Front or Back. Try it, it might work :slight_smile:

And, is it a bad practice to connect LED DOUT to the CPU output pin? Or should I use a jumper?

I wouldn’t recommend it…

If I use a single-sided footprint, does this schematic make sense?

A single SMD pad on both sides is not allowed.
But 2 pads with the same pin number, one at each side and at the same position, it is allowed.

The double-sided footprint with a different pin position was extracted from https://github.com/MakotoKurauchi/helix/blob/master/Doc/buildguide_jp.md

I guess this might not be the best practice though. What do you think?

08%20PM

It is OK. It only requires more routing.

Great - I’ll use that footprint for now.

For standalone connections, LEDs on each hand are controlled by it’s own Arduino. On both hands the 3PIN 1 and 2 are bridged. JP1 will not be bridged.

For master/slave connection, all LEDs are controlled by a single Arduino. On the master side 3PIN 1 and 2 are bridged. JP 1 is bridged.
On the slave side, 3PIN 2 and 3 are bridged, and JP1 will not be bridged.

Any recommendations? I feel like this can be simplified.

Personally, I would simplify it by doing it as single sided boards instead of the reversible idea. I think you could probably use the same board for both sides, but if not it’s not a big deal to have two different boards.

The GND pads are unconnected.
Is there a way to use trace in FreeRoute, instead of a copper plate? Or are there any other ways to fix this?

I’ve deleted all zones, and run free route.
So, does it make sense to create a board without copper fill like this?

Well first you might need to know why pcb designers use copper fills in the first place.

One reason is that it can reduce the amount of chemicals used to etch the copper.


The far more important reason is that it can help with electro magnetic compatibility (EMC) requirements. If you use a fill for GND it allows low impedance return paths without the designer needing to really think about them. This is especially true if you have a full layer only for GND. (Only possible in very simple two layer boards. Will most likely require at least 4 layers in the design)

If you don’t have a single layer for such a GND plane, then you might need to make use of stitching vias and the trick of restricting one side to mostly horizontal traces and the other side to mostly vertical traces.
This results in orthogonal stripes of copper on top and bottom. By connecting the stripes on the top with the stripes on the bottom you get something similar as a full fill. (But it will of course be worse with regards to EMC then if you have one full fill. It is also more work.)

Even without that trick it might still be possible to get a better result using a split up zone then when using single traces. (But there is no guarantee for it. If the traces are placed carefully it might even result in a better EMC behavior then by forgetting about GND and simply placing a copper pour.)


As you do not design a critical high frequency design, i doubt EMC has a high priority for you. If it would be a priority, you would need to make a specialized board for exactly one purpose with one known configuration.