Early days... 2017-06 to 2018-05

A project log for 336-digit 7-segment display with per-segment PWM

Using 14 panels with ISSI IS31FL3733 I2C matrix controllers, this artwork can show 8-bit grayscale on 2,688 individual LED segments.

Chris CombsChris Combs 12/31/2019 at 18:580 Comments

How I got started on this project:

After finding a few 0.2" SMD LED 7-segment displays on Sites of Dubious Provenance, I got excited about using many of them to build a pixel display (given enough squinting).

There were a bunch available in blue for a fairly steep price. I ordered a few of these and fell in love with their appearance, and set up an eBay saved search to see if others would become available.

I cast about for a way to make a huge array of them. At first I started speccing out a solution with lots and lots of shift registers... That was not particularly appealing to me, especially given that the boards would probably be double-sided, so there'd be all this silicon on one side and all the displays on the other? I was doing all of my surface-mount soldering on a rework station, so double-sided stuff was tricky/bad. (Or if I kept everything on one side, I'd need to space out the LEDs to fit in all the chips, which would make it harder to perceive the "pixel" displays and make the boards larger, driving up costs.)

So I somewhat reluctantly decided to seek out more integrated controllers.

I looked at some existing commercial LED matrix modules available for sale on the finer maker-type webstores. I noticed that one was using IS31FL3731 in a "Charlieplexing" arrangement. That got me excited, since it would accept data over i2c and only require connecting the LEDs properly. Big drawback, though, Charlieplexing makes my brain hurt. 

This might be a sort of noobish way to find parts, but I started googling for the same part number, wiggled by one. IS31FL3732 was much better, an 8x8 matrix array without any Charlieplexing required. (Take that, Chaz.)

But I felt that I really hit the jackpot with IS31FL3733. This is a 12x16 matrix array, no Chaz, I2C, with full 8-bit pwm per pixel.

I read through the datasheet, thinking about how it could work. Earlier I had looked into software, came up pretty dry. I poked around at aforementioned Maker Webstore's offerings and it seemed fairly straightforward to write an i2c driver in userspace Python. Was it possible for me to come up with some kind of driver on my end?

Spoiler alert, YES, and I was able to whip together a simple Python library that updated the entire display memory of the device. Some back-of-the-envelope math suggested I could hit my targets of 20fps for all of the panels on one 2MHz i2c bus. 

Around this time, a massive lot of amber/orange 0.2" Kingbright 7-segment SMD displays (APSC02-41SEKWA) showed up on eBay. I negotiated with the seller and landed a huge lot for a little more than I meant to spend (oops).

I worked up a crappy little 4-display board to try out the IS31FL3733 (forgive my terrible component placement, routing, silkscreen, etc.), signing myself up to write some kind of driver--that'd be a problem for Future Chris.

The TQFP version of this part is only available to my U.S. location via Mouser, so I placed an order, hit up OSH Park, and crossed my fingers.