GFX HAT niggles

After using the GFX HAT for a few days I have, unfortunately, noticed a few hardware/software problems and niggles.

The backlight LEDs get very hot at full brightness. My pibowed Pi3B+ plus GFX HAT would make a good pocket hand warmer! After a couple of hours the heat also, in my opinion, starts to affect the LCD panel and the contrast isn’t as good, see next problem.

The display contrast is set to a fixed value during init in the st7567 driver. I suppose this is very easy to change in the software and bring it into the GFX library, but it’s annoying that it can’t currently be changed at runtime.
For example, full blue swamps the display and the contrast is, in my opinion, very poor.

There is an enormous amount of light “leakage” around the display, which actually makes it harder to see what’s being displayed! Whatever you choose as a backlight setting, the border is always brighter, particularly the top edge.
I have the impression that the LEDs are shining parallel to the display, and are mostly going straight through the top of the display housing, instead of properly illuminating the display diffuser. The actual display is relatively dim compared to the border.

EDIT: The more I squint at it, the ‘diffuser’ appears to be mostly a mirror, I hope I’m wrong.

The transparent border seems to be ‘standard’ for this display. The displayotron LCD has that black perspex border, for minimal light leakage at the sides.
I’m just wondering if here we’ve finally got the situation of actually having too many LEDs. I know it’s a shocking thought, but maybe this time it’s true?!

1 Like

With the GFX HAT LCD we actually had custom diffuser plastics created to house our particular LED arrangement. It’s the standard reflective-surface + diffuse white plastic style and ended up working so much better than Dot3k/HAT where we had to cut individual plastic parts out on the lasers and hand assemble them.

Contrast control should be possible to expose to the user- and I suspect temperature may have a bearing on the contrast. It sounds like the LEDs could use a brightness limit, though, since even at low brightness they work great in the dark. In lit rooms the backlight is slightly unnecessary unless you’re using it for notifications.

We’ve probably hit peak LEDs! But this is only the same number as on Dot HAT.

I’ve raised an issue to track the contrast setting feature addition here:

1 Like

Thanks for the detailed explanation, Phil. Makes sense.

EDIT: And if I’d watched and properly paid attention to Bilge Tank 127, all the technical details were already there to see!

The ability to change the display contrast would be a nice feature. It would allow fading effects too!
I’m slowly getting used to the GFX experience, rather than always doing a direct comparison to the DOT HAT.
I expected a pixel-based displayotron because of your product description. But it is really a different look and feel. The six backlight zones are much more blendy and subtle on the GFX than the vibrant and saturated colours on the displayotron LCD.

Any chance of a GFX LCD breakout like the displayotron LCD breakout? It might then be possible to mess around with the LEDs and diffusion if you really wanted to, perhaps, maybe?

EDIT: Or, like Sandy managed in Bilge Tank 127, can you open up the display, diffuser and reflector (preferably without wrecking it all) and then make minor mods to the diffuser?

1 Like

Hi Veryalien, forgive me this off topic …

I’ve read this conversation, I’m also playing with GFX Hat + Espruino Pico:

I have some problems, could you help me?

  • Is there any documentation or sample code for backlighting (SN3218) LED RGB? I can only illuminate the blue LEDs :-(

  • The LEDs (CAP1188) are badly mapped (touching the + turns on the LED of ^), how did you solve it?

  • Did you have stability problems with 3v + 5v of GFX with Pico’s only 3v pin?

Thanks for the attention!

This is my test code:

var i2c = new I2C();
i2c.setup({scl:B6, sda:B7});

i2c.wl = function(reg, data) {this.writeTo(84, reg, data);}; // ???
i2c.wl(0, 1); // ???
i2c.wl(0x13,[0x3F, 0x3F, 0x3F]); // ???

function setLeds(a) {
if (!a) a = new Uint8Array(18);
i2c.wl(1, a);
i2c.wl(0x16, 0x00);
}; // ???

setLeds(100); // 100 ???

var cap = require(“CAP1188”).connect(I2C1);

var spi = new SPI();
spi.setup({ sck: B10, mosi: B1 });


var g = require(“ST7565”).connect({ spi:spi, dc:A7, cs:A5, rst:A6 }, function() {
g.setColor(255, 255, 255);
g.drawString(“World 1”,20,20);
g.drawString(“Hello World 2”,50,50);