MagTag SSD1680 contrast fix (FPC-7519rev.b only)#10992
Conversation
The FPC-7519rev.b panel (User ID byte 0xca) shows a dark gray background with the default VCOM=0x28. Setting VCOM=0x20 (-1.5V) gives a light gray background with solid black text. Surgical fix: dedicated ssd1680_vcom20_display_start_sequence and DISPLAY_SSD1680_COLSTART_8_VCOM20 type routed to case 0xca: only. The 0x44 and 0x00 panels are untouched.
Testing across 0x28→0x20→0x1c→0x18→0x14→0x10 confirmed 0x14 as the sweet spot: background matches the FPC-7619rev.b panel without the dark halo fringe artifacts that appear below 0x14. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Image for testing on new MagTag 7519rev.b with this patch. |
Rename ssd1680_vcom20_display_start_sequence → ssd1680_vcom14_display_start_sequence and DISPLAY_SSD1680_COLSTART_8_VCOM20 → DISPLAY_SSD1680_COLSTART_8_VCOM14 to match the actual register value being set (0x14, not the earlier test value 0x20). Add comment noting that VCOM=0x14 was independently confirmed by reading OTP register 0x2D on the physical panel — byte 1 of the response is 0x14, matching what the panel manufacturer programmed as the recommended VCOM for this revision. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
The comment mentions a 7619rev.b instead of a 7519rev.b. However, I don't recollect any 7619's. I think that might be a typo. The pictures in the threads and in #10831 (superceded by #10836) only have 7519's, unless I missed one. I tried this patch on my 7519 0x44 board. I'm not sure it's lighter but I would say it's still "blurry". I think the blurriness is easier to see on the weather demo: https://learn.adafruit.com/magtag-weather. Here are a couple of pictures Second is the same boards, but the bottom is running a modified version of this PR that applies your VCOM14 change to both 0x44 and 0xca. |
|
Aha, so you have a board with a "7619" ribbon cable. I have not seen one of these in person or in photos. |
|
I only have two MagTags. Both SSD1680 based:
I don't know if the label FPC-7619rev.b even truly exists, but that is what is the original board.c before I started mucking with it this week. Regardless of ribbon label there are 0x44 and 0xca variants. Both require the coloffset=8 and have some blur / contrast needs. |
|
Have you tried changing the repeat count value? I do this in my During development, I tried all kinds of waveforms: from the Adafruit-driver, from Wasveshare and from Pimoroni. It seems like VCOM is not the only thing to take into account. |
|
@dhalbert - that is a good comparison with the clouds. I'm going to try a few more settings and complex patterns. I have some test code that allows me to quickly drop in different settings without full rebuilds. @bablokb - good point about repeat count. Testing various other parameters now. RP - Repeat Period
|
|
Made some good progress with test patterns and weather example has improved. It is more crisp and the contrast is close. Still some speckle noise. Thoughts? test build used for these examples:adafruit_magtag_2.9_grayscale-fpc7519-vcom24-g2sr04.uf2.zip test pattern
weather example:
Made changes to support both 0x44 and 0xca with these settings. I've only tested on 0xca.
Terminology / Changes in this round: LUT — Waveform table voltage pulses to apply to each pixel per refresh cycle. VCOM — Common electrode bias voltage; higher value = softer drive = lighter output. Raised from G2 — Final settle phase of the LUT that sharpens blacks after the main refresh. Shortened from 2 frames → 1 frame to reduce differential drive between adjacent pixels. G2 SR2 — Bitmask controlling which pixel transition types get driven during G2. Narrowed from |
@mikeysklar: In the weather example, the lower image seems to be 1 bit only?! |
|
@bablokb - I see the same the loss of grey fill inside the clouds. Probably from the G2 change from 2 -> 1. I can try and get that back, but will need to turn some other knobs. |
|
An interesting comment from an LLM:
Looking at the speckles in the cloud in the weather example, they reappear at the same place each time. There are some accidental groups and shapes caused by speckles (e.g., an accidental curved line) that make this clear. I used a magnifier to look closely. EDIT: more discussion, this time with Claude 4.7, after I said it was almost certainly an LUT issue: A few LUT-level levers, roughly ordered by which usually moves the needle most:
|
|
Here is a nice writeup on how LUTs work: https://github.com/antirez/uc8151_micropython#what-i-learned-about-setting-waveformsluts-for-edps. It is for a different driver chip, but it explains the basic principles very well. Does Adafruit have vendor information about the specific SSD1680 and the necessary LUTs for the display? This seems to vary from vendor to vendor and without these specs writing a driver is more like a trial&error experience. And there are so many parameters so it is unlikely to find a correct solution. |
|
Ended up using GxEDP2_4G (GDEM029T94) settings almost entirely. A005 on top and 7519 on bottom with changes applied. All speckle traces are gone and lines are clean. The 7519 is looking crisper at this point than the original SSD1680 A005.
CircuitPython with 0x44 and 0xca (7519rev.b) support attached. |
|
Yes, lines and font characters are much crisper, and there is no "haze" of noise surrounding the lines further out. Grays are still speckled, but I don't know if improving that is possible. |
|
Did some gray smoothing. adafruit_magtag_2.9_grayscale-l1l2fix.uf2.gz Quick comparison of what the 7519 (0x44 / 0xca) looked like when we started: |
|
@mikeysklar Do you feel this is ready to merge? This PR is against |
|
Yes, this PR is ready to be released as part of 10.3.0-alpha.2. I've done zero testing with the 10.2.x stable. I'm okay with doing a testing on that today if you would like to see it get into stable. Your call. |
dhalbert
left a comment
There was a problem hiding this comment.
Thanks for all the research on how to improve the appearance. This is really good for MagTag users.
|
@mikeysklar thank you for the many tests and the insights you provided. I will try to update the Badger2350 as well. It is on my todo-list but not with high priority. Do you plan to update the generic SSD1680 driver (or at least the examples) as well? E.g. there is a |
|
@bablokb - Yes. Need to update two locations. @dhalbert had suggested Arduino lib too. Fortunately the Adafruit_CircuitPython_MagTag is abstracted high-level so no touch there. I'll setup the PRs today. |
|
cc @tyeth - you may want to take a look at this for WS! |













MagTag units with the SSD1680 - FPC-7519rev.b display panel show bold, blurry text with the default firmware. This fix reads the correct VCOM voltage for that panel directly from its manufacturer register and applies it automatically. All other MagTag panels are unaffected.
forum thread
initial difference between earlier SSD1680 FPC-A005 (top) and new rev: FPC-7519rev.b (bottom)


final difference same panels with PR applied: