^pulled from the STP1612PW05 datasheet, icnd2153 and FM6124C are identical.
It seems like the ICND2153 and FM6124C copied the STP1612PW05 datasheet, then they deleted all relevant info. Even the testing circuits, electrical properties and similar is identical.
- for 0th row clear the row indexing shift registers/clock C once more so all 4 shift registers are cleared
- for the first row, set 1 to the A pin then clock the C pin
- for every other of the 30 rows just clock the C pin
inline void stepRow()
{
//row is just a global uint8_t
if (row == 0)
{
HIGH_RC;
HIGH_RA;
CLEAR_RA;
CLEAR_RC;
}
else
{
HIGH_RA;
CLEAR_RA;
}
row = (row + 1) & (uint8_t)31;
}
-
-
- set colors for the current bit(R1,R2,G1,G2,B1,B2), MSB comes first.
- set CLK high, PWCLK(OE pin) high,
- set CLK, PWCLK(OE pin) both low again. (if the panel input pins are not buffered, you can run the PWCLK independantly of the CLK, but at least my panel has all input pins buffered once)
- repeat that for each chip x 16, except the last one, the last chip is special
- clock in 15 led in the last chip
- set LAT high
- set your color pins
- clock once
- LAT low
- this pushes the bits from the input buffers to the intermediate buffers
- repeat for all bits of color depth you want
- advance row pins
-
- repeat the points above for every row
- for the last bitdepth for the last chip in the last row, push 13 bits
- LAT high
- set color bits
- CLK high
- CLK low
- LAT low
- set data bits
- LAT high
- CLK high
- CLK low
- set data bits
- CLK high
- CLK low
- LAT low
this will push the bits from the data buffers to the pwm generatiors and enabled the leds
for (uint8_t y = 0; y < 32; y++) // 32 rows
{
stepRow();
// SET_COLOR(); sets the color bits on the panel
// PWCLK_GCLK; sets LAT, CLK high then LAT, CLK low again
// LATCH_GCLK; keeps latch on, rest is the same as PWCLK_GLCK
// repeat 16 times per chip minus the last three for the last chip, this is a one bit example
// (61 times for a 64 pixel wide panel, 125 for 128px panels in the LSB, 63 and 127 times for all other bits)
SET_COLOR();
PWCLK_GCLK;
// end repeat
// this after every row
// move data from input to intermediate buffer
HIGH_LAT;
SET_COLOR();
LATCH_GCLK;
CLEAR_LAT;
// #########
// this here only in the LSB
// display row once done, so move data from latch registers to pwm modules
HIGH_LAT;
SET_COLOR();
LATCH_GCLK;
SET_COLOR();
LATCH_GCLK;
CLEAR_LAT;
// #########
}
You can find more examples in this library, specifically the header, for 1, 2 and 4 bit of output. The Arduino nano cant do more, thats why i didnt explore more than 4 bits of output.
Hope this helps someone