Auto-detect FPC-7519rev.b panel so old and new MagTags work without manual configuration#40
Conversation
Newer MagTag units ship with FPC-7519rev.b display panels that need a different VCOM voltage (0x24 vs 0x28), colstart=8, and a different waveform LUT to render grayscale correctly. The example now reads SSD1680 User ID register 0x2E via half-duplex bitbang SPI on the MOSI line (same method as CircuitPython's built-in MagTag board support) to auto-detect the panel before creating the display, so both FPC-A005 and FPC-7519rev.b panels work out of the box without any manual configuration. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Woah, nice PR! Are you going to integrate this into the Adafruit Arduino SSD1680 library too? @tyeth - we do this internally, in the WipperSnapper Display component, take a look at this interesting route! |
| ) | ||
|
|
||
|
|
||
| def detect_ssd1680_panel(): |
There was a problem hiding this comment.
Is there a technical reason this function is sitting in the example?
I feel it'd be best as a method within the SSD1680's __init__ and having it auto-switch to the panel it detects. You'd be able to define the LUTs at module-level, too
|
@brentru - The autodetect with USER IDs is something @dhalbert originally came up with a few months ago when the SSD1680s rev'd. I just dropped in some more init / LUT settings to clean up the fuzz issues (based on GxEPD2). I submitted code in Adafruit_EPD pull #96 to support newer panels with the same initialization used here. I did not include autodetect for that library. How about a |
That's a good idea if you can not automatically switch, but the user will have to always know to call it. |
|
It might be easier to leave detection in the example code for now. Happy to consider other options, but I don't want to break away from the norm of how all other Adafruit display libraries work. One other option to consider would be a wrapper with create_display() calling detect_panel(), but that is kind of funky too. |
|
I'm just not sure if the LUTs should be in the example code, or the module... |
|
Agreed. Let me pretty it up. I'll ping you once I've shuffled some code into the module. |
FPC_A005_LUT, FPC7519_LUT, and detect_ssd1680_panel() moved from the example into adafruit_ssd1680.py. Detection logic now defaults to FPC-7519 settings for any unknown User ID, treating FPC-A005 (0x00) as the legacy exception — forward-compatible with future panel revisions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
@brentru - changes
testing
FPC-A005 (top) |
brentru
left a comment
There was a problem hiding this comment.
Looks great - much cleaner example
|
Thank you. Glad we have something simple to get people going. |
|
ok wanna merge this? |
|
I'm ready to merge if @brentru is cool with it. |
|
Merge away! 🚢
…On Mon, May 18, 2026 at 7:56 PM Mikey Sklar ***@***.***> wrote:
*mikeysklar* left a comment (adafruit/Adafruit_CircuitPython_SSD1680#40)
<#40?email_source=notifications&email_token=AACOW7EBW5VIIYCZO7ZY4OT43OPJXA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTINBYGMZDIOBQGMY2M4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJNLQOJPWG33NNVSW45C7N5YGK3S7MNWGSY3L#issuecomment-4483248031>
I'm ready to merge if @brentru <https://github.com/brentru> is cool with
it.
—
Reply to this email directly, view it on GitHub
<#40?email_source=notifications&email_token=AACOW7EBW5VIIYCZO7ZY4OT43OPJXA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTINBYGMZDIOBQGMY2M4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJNLQOJPWG33NNVSW45C7N5YGK3S7MNWGSY3L#issuecomment-4483248031>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AACOW7HXONJOSXI4HVPFXRD43OPJXAVCNFSM6AAAAACY5FAL22VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DIOBTGI2DQMBTGE>
.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
|
@brentru can you pull the trigger on the merge. I do not have privs. Also will be submitting several more PRs next week for similar models. |
|
Brent's away until Tuesday. Thanks for this Mikey, it'll be absorbed into wippersnapper too soon. |
|
Thx @tyeth. Currently working on SSD1675A - SSD1683 to support grayscale. Just a heads up since you are updating Wippersnapper. Some of these might be of interest to you. I'll be adding updates to this library and Adafruit_EPD. Also a learn guide to explain the process.
|
|
@mikeysklar I was going to ping you on that actually, I did a half understood greyscale implementation for the SSD1683, but wondered which was better having little blinka colour understanding, between swapping the LUT bits around for blinka from the ardu copy, or swapping the ram colour bank commands and using the arduino LUT, both resolved the issue. I figured I'd better grab the tri-color and understand it better before pinging anyone. That's just come into stock 3hrs ago, so next week I'll order one, or hope you tackle it before/for me 😁 |
|
@tyeth - When I was working on the Magtag it came down to five settings. I got lucky since the GxEPD2_4G provided a great starting point with their LUT.
My strategy has been find a decent LUT to get things close and tune from there with Claude and a Webcam closed loop.
|
Updating https://github.com/adafruit/Adafruit_CircuitPython_SSD1680 to 2.1.4 from 2.1.3: > Merge pull request adafruit/Adafruit_CircuitPython_SSD1680#40 from mikeysklar/fpc7519-support



Newer MagTag units ship with a different display panel (FPC-7519rev.b) that needs different settings to render grayscale correctly. This updates the example to automatically detect which panel is installed and apply the right settings, so both old and new MagTags work without any manual configuration.