rdz_ttgo_sonde icon indicating copy to clipboard operation
rdz_ttgo_sonde copied to clipboard

Prevent OLED from burn in

Open HelmiBeh opened this issue 2 years ago • 13 comments

After some month of operation, some of the OLED shows burn in effects, if the same text is displayed with high brightness. To prevent this, it should be possible to lower brightness or the display is inverted after a couple of hours.

HelmiBeh avatar Apr 22 '22 17:04 HelmiBeh

The latest devel version allows turning off the display automatically after some time (on by button press or when a new sonde is received). This might already help....

dl9rdz avatar Apr 22 '22 17:04 dl9rdz

@dl9rdz a few days ago I noticed that (at least on latest devel release) that in this case screen just stops updating, but the content is retained. Maybe it needs to be blanked first? I'm running T-beam with SH1106 (1,3") screen.

Leo-PL avatar Sep 29 '22 21:09 Leo-PL

Sorry, I cannot reproduce this (on my default v2 board with on-board 0.96" screen).

Also the code has a single code path that calls a function to clear the display and then enters "display is off" mode. So this should work...

dl9rdz avatar Oct 01 '22 00:10 dl9rdz

I think I can try with 0.96" display as well - I have one board with "press-fitted" display, which I did not solder in yet. If it works in that configuration, I'll dig into the code to see what might be the cause.

Leo-PL avatar Oct 01 '22 00:10 Leo-PL

Okay. I double checked with SSD1306 and with it blanking works just fine, regardless of display type setting (0/2). For SH1106 it doesn't - my guess is that SH1106 uses different command for blanking. I'll check that and possibly open a PR with fix.

Leo-PL avatar Oct 06 '22 00:10 Leo-PL

@dl9rdz ~~I figured it out, please see #328. Bumping the display library fixes the issue.~~ Edit: Well, I thought I had, but using shorter delay for testing caused a mistake. If I reduce delay to 60 seconds, it works, if I set delay to 300 seconds (configuration value = 3002), the display just freezes.

Leo-PL avatar Oct 08 '22 12:10 Leo-PL

I've noticed the same, the fix is pretty simple char dispstate; into int dispstate; also when IP changes the display shows the new IP endless add sonde.dispsavectlON();after // update IP in display

mmadela avatar Nov 13 '22 17:11 mmadela

@mmadela yeah, this would make total sense, as 300 seconds is over 255, the range of char - also - wouldn't unsigned type be better here? Would you mind opening a PR with the fix? I can cobble one up as well.

Leo-PL avatar Nov 13 '22 22:11 Leo-PL

I can fix that directly, no need for a pull request. (I am travelling right now and no TTGO with me, so doing this without testing, but its just a small change so I take that risk ... travis is building...)

dl9rdz avatar Nov 13 '22 23:11 dl9rdz

@dl9rdz I can confirm, the fix works.

Leo-PL avatar Nov 26 '22 15:11 Leo-PL

Why not to implement burn in protection in similar way as it implemented on Sennheiser Wireless microphones,rack mount receivers, who are working 24/7? They simply shift whole screen by 1-3 pixels to random position from time to time. For example: At the beginning screen drawing start position is (0,0) after 3 minutes is on position (1,1) then (2,2), then again (0,0).

JDat avatar Aug 03 '23 17:08 JDat