Wondering if this setup would work for through pixel charging?

Excuse the crude wiring diagram, I am attempting to figure out how to do through pixel charging since I’ve not yet done one (base lit on previous) and the hilts I am looking at getting do not have a spot for a charge port and they do not have chassis’ that can slide in or out.

This is using the USB C Charge board for protection and the Through Pixel Charging board all from TCSS store. I intend to use the plug design that baldusi posted up for making a plug in order to charge it with. I’m just unfamiliar with FETs and a few of the other additions he has done for his to work since I’m still a novice at electronics. I know how to wire things up, but dealing with much more than a standard resistor is still new to me. Hoping this would work overall since I would like the charge board as extra protection even though I do get protected 18650’s usually

I’m not familiar with how the TCSS Through Pixel Charging works, so I can’t really advice you about how to use it. You don’t really need that board to charge through the blade with a proffieboard though.

The circuit diagram looks wrong in a couple of ways:

  1. blade PCB - is hooked up directly to the battery, which is not good (should be hooked up to LED2/3)
  2. the TCSS through pixel charge board looks like it’s hooked up weird
  3. the USBC board will not do anything, any form of protection only works if you charge through the board, just hooking it up to the battery doesn’t do anything.
  4. I recommend hooking up the switch LED to Free1 instead of 3.3v, that way you can use styles to control when it’s lit up.

Thank you for the information again, Profezzorn. I’ll make the changes, but question regarding the blade PCB, I the one I was looking at has two negative on one side, data, two positive on the other side. The plug I was struggling with since I didn’t quite get it to well since its the first time dealing with one. It is essentially this one (https://www.thecustomsabershop.com/Blades/Pixel-Blades/Pixel-Blade-Components/TCSS-Style-Connector/Pre-Soldered-Pixel-PCB-connector-and-11-pin-set). So I would probably need to take the battery connection and change that to LED2/3 instead then from what I am understanding. Or should I go to LED 1/2?

As for the through pixel charging board, I was attempting to not make it look at mess, but I guess I didn’t succeed, B- Is in line with the battery negative and P- is in line with the negative to the blade plug. I tried to have P- go out the side and over instead of trying to cross through the others.

First of all: terminology

When I hear “in line” it means a break in the wire, and a component bridges the gap. The resistor you have for the LED switch is in-line. A component that just connects to a wire without a break is not in-line. For instance, the USB-C board is not inline (unless you count both + and - as “the line”).

Second, battery negative and pogo pin negative are connected in your diagram, making them the same thing. So B- and P- are connected to the same thing.

Third, in normal operation, the proffieboard needs to be able to turn the power off to the blade. It does this by disabling the negative side. In fact, the proffieboard should be in-line between battery negative and pogo pin negative. Battery negative connects to BATT- on the proffieboard, then LED2/3 connects to pogo pin negative. When the blade is supposed to be on, the proffieboard will conduct power between the two, when not, no power will flow that way.

Now, the TCSS through pixel charge board does something similar. It connects BATT- to blade- conditionally. What that condition is, I’m not quite sure, and I’m also not sure what the PD (pixel data) connection is for. Since TCSS is not a company that tends to open-source things, it’s unlikely that they will tell us how this works, and I’m not going to pry. It’s likely that the proffieboard can do the same work that the TCSS board does, but without knowing what the triggering condition is, it’s hard to know.

I think you may be making this more complicated than it needs to be. You can achieve blade plug charging without needing to make any wiring modifications to the hilt. All you need to do is make a simple blade plug using a TP4056 charge PCB (pennies from amazon or ebay) and then alter the config file a little bit to make charge mode easy to access (basically another blade preset set to stay ‘live’ without the LED timeout).

This link shows how to build the plug and provides STL files to 3D print the parts, kindly supplied by Baldusi:

In the design shown, he has added some accent strips inside the charge plug, but you don’t actually need these for it to work. The TP4056 has its own LEDs built in - red for charging, blue for fully charged - so all you need is two wires - TP4056 Batt+ to plug disc + and TP4056 Batt- to plug disc -.

I can send more details when I get home later on, but for now this video clip shows how you would use it:

OK, back home now.
So a few things you need to do to make this work nicely:

The first is at the top of the config, just above where it says

Preset presets[] = {

Paste this bit of code:

class BlackPower {
  LayerRunResult run(BladeBase* base) {
    return LayerRunResult::UNKNOWN;
  SimpleColor getColor(int led) {
    return SimpleColor(Color16(0,0,0));

Then in your preset array, use the following blade style for the main blade:


This ensures that the neopixel blade adapter will stay ‘live’ during charging and not shut off like the rest of the LEDs after the #define IDLE_OFF_TIME delay kicks in.

The idea is you can then simply switch to the charging preset, pop the charge plug in and connect it and it will just work.

You don’t need any resistors or anything like that unless you plan to use BladeID to automatically detect when the charge plug is fitted. To do this though, you will need to jump through a few more config hoops to make it work, and you’ll also need to make sure that your normal blade also has a BladeID resistor fitted of a different value to the charge plug resistor so that the Proffie can tell the difference - I’ve found that relying on the absence of a resistor in the regular blade can be slightly unreliable.

In terms of safety, the TP4056 board is intelligent enough to know when the battery is fully charged and prevent over-charging. And as long as you use decent quality batteries with a protection pcb fitted, like the ones from The Saber Armoury here, then you shouldn’t run into any problems.


Thank you so much for this, I’ll have to work on it once the new boards arrive. Greatly appreciate it!

With that being said, this is the new wiring setup. Does this look correct overall? And, according to the configurator it states to cut the trace between Batt- and Gnd on the Proffie, is this really needed?

No, you can leave that trace - it won’t affect anything. I believe that cutting it is only for very specific installs using the Proffie to control much higher power stuff.

Everything else looks fine to me. :slight_smile:

How did you get it to say that?
(Because that is wrong.)

The wiring diagram looks right, and with a little configuration you can charge through the blade plug. If you’d rather not do that configuration, you could still add the TCSS through pixel charging board back.

The resistor could be a lower value (65 ohm) which would make the switch a bit brighter, but 100 ohm will work just fine. (Note that you can always configure the switch less bright in software.)

Okay, so I was playing with the configurator and then copied the stuff over from there and added what you were saying, so… hoping this is right, I have:

#include "proffieboard_v3_config.h"
#define NUM_BLADES 1
#define NUM_BUTTONS 2
#define VOLUME 1000
const unsigned int maxLedsPerStrip = 144;
#define ENABLE_WS2811
#define ENABLE_SD

class BlackPower {
  LayerRunResult run(BladeBase* base) {
    return LayerRunResult::UNKNOWN;
  SimpleColor getColor(int led) {
    return SimpleColor(Color16(0,0,0));

Preset presets[] = {
   { "Charging", 
   { "TeensySF", "tracks/venus.wav",
    StyleNormalPtr<CYAN, WHITE, 300, 800>(), "cyan"},
   { "SmthJedi", "tracks/mars.wav",
    StylePtr<InOutSparkTip<EASYBLADE(BLUE, WHITE), 300, 800> >(), "blue"},
   { "SmthGrey", "tracks/mercury.wav",
    StyleNormalPtr<RED, WHITE, 300, 800>(), "red"},
   { "SmthFuzz", "tracks/uranus.wav",
    StylePtr<InOutHelper<EASYBLADE(OnSpark<GREEN>, WHITE), 300, 800> >(), "green"},
   { "RgueCmdr", "tracks/venus.wav",
    StyleNormalPtr<WHITE, RED, 300, 800, RED>(), "white"},
   { "TthCrstl", "tracks/mars.wav",
    StyleNormalPtr<AudioFlicker<YELLOW, WHITE>, BLUE, 300, 800>(), "yellow"},
   { "TeensySF", "tracks/mercury.wav",
    StylePtr<InOutSparkTip<EASYBLADE(MAGENTA, WHITE), 300, 800> >(), "magenta"},
   { "SmthJedi", "tracks/uranus.wav",
    StyleStrobePtr<WHITE, Rainbow, 15, 300, 800>(), "strobe"}
BladeConfig blades[] = {
 { 0, , CONFIGARRAY(presets) },

Button PowerButton(BUTTON_POWER, powerButtonPin, "pow");
Button AuxButton(BUTTON_AUX, auxPin, "aux");

And Profezzorn, I did selected blade plug in the options which is when it gave me the cut trace on the board. Screenshot attached:

I just adapted my wiring to the one that TCSS sells that I was planning to get obviously, unless that is incorrect for the configurator for this setup?

Edit: I think I read your thing wrong as far as where to put the charging code… I’m assuming it needs to be moved down to the BladeConfig section and be { 0, , ChargingStlePtr<BlackPower>() } instead of where I have it?

Also, being you said 65ohm for the switch LED, would it still be 65ohm 1/8w or would that requirement change as well?

But you don’t have an 8-pin blade connector. Don’t use this setting in the configuration generator.
This setup is something that almost nobody uses anymore. It cuts the power to the board when no blade is inserted, but it uses an 8-pin aviation-style connector for the blade.

For the resistor wattage, anything larger than 26mW will be sufficient. (1/8w is 125mW, so more than sufficient.)

Gotcha, I was just trying to use whatever was closest to the blade plug on there. I don’t think it has any bearing on the actual configuration code file though, which is why I said I just adapted it to what I was planning on using.