• @Gordon, the device you are talking about - http://www.espruino.com/LPD6416 - is equipped with a full set of shift registers each pixel has its own SR register, which means that refreshing is only needed when update is required. Updating then as quickly as possible and then idle it the way to go.

    In my case, I have only one SR register for each column - two 595 for max 5 columns of RGB LEDs. The rows - with one 595 for max 8 rows - is TIME MULTIPLEXED (not address multiplexed). Therefore, I have to constantly drive drive row after row and have to go through all rows about 50..60 times a second to make the eye to perceive that the LEDs are continuously on. With my particular setup of LEDs having Anode a the columns and Cathodes at the rows Therefore, the 2 595 for the columns source the LED with high (3.3 .. 5V), where as the single 595 for the rows sinks with low (0V) only the row that is currently loaded in the 2 595 for the columns (see 3rd byte in dbuf for each row... lines 19 thru 23 in code of post #3).

    Isn't that not called Charlieplexing? (but not using the fact that LEDs show only with current flowing in one direction - may be it is then just normal time multiplexing...).

    ...and Espruino IS the Multiplexer.

    You may have been misled by the fact that for the 3x5 matrix I'm using 3 8-bit shift registers... but even that should trigger, why 3 and not just 2 which are more than sufficient to non-multiplexed drive a 3x5 matrix. My 3 8-bit shift register can though drive a matrix of the size up to 5x8 of RGB LEDs (color depth 3). Even in my original use of the monochrome 3x8 matrix display I had to charlieplex: I used the single available 8-bit parallel port with 3 bits sourcing the columns and the remaining 5 bits draining the rows row by row over time, one row of LEDs at the time on.


Avatar for allObjects @allObjects started