Hi,
we are currently suffering Image Burn in with our TFT Display.
We called the Display manufacturer regarding this problem and he told us, that this problem lies within the display technology. We were told that the Problem is usually solved by inverting every 60th frame sent to the Display and that it would not be visible.
We are driving the Display using LVDS.
Display Type: TM070JVHG33-00
The question now is, if there is a way to Invert every 60th frame using the Display driver or some other method.
I don’t think that the Display we use is particularly slow (35ms).
According to the Manufacturer, the reason for the Burn-in is charging up of the pixel structures and he told us, that it is a common practice to invert frames and that it would not be visible if 1 out of 60 frames is inverted.
Unfortunately, our application is Industrial and needs to show values for a long time. But even If you change after one minute from a text-based screen to a grey screen, the text persists in the grey screen.
Would it be possible to use the GPU shaders to invert the screen regularly for one frame?
Well, inverting the framebuffer can be done, with or without hardware support, but it is not an easy task, and hard to impossible to guarantee that your inverted frame is never shown longer than 1 frame.
If you are using Win32 APIs to draw your graphics, it would be an option to render all graphics into an intermediate frame buffer which is not visible, and blit this buffer either inverted or not-inverted to the actual framebuffer.
Hardware inversion
While writing this message, I checked the T30 Reference manual and might have found an easier solution:
There are hardware registers to invert each digital display signal: DC_COM_PIN_OUTPUT_POLARITY0_0 (@ 0x54200c18 or 0x54240c18) and following.
You can try to run a parallel application which does continuously
while(1)
{
Sleep(60);
Configure Display signals to be inverted
Sleep (59 * 60);
Configure Display signals to be non-inverted
}
To write to the registers, you can use the MapMem Library, which is part of our Toradex CE Libraries.
There’s no simple way to synchronize this operation to the frame-sync, so you might change the polarity in the middle of a frame. However, if your display is slow enough that such an effect is not visible, the synchronization should not be necessary anyway.
I’m afraid there is no such option in the display driver. I think the solution with inverting the frame would anyway work only with very slow displays. On a “regular” display you would notice a flickering.
I don’t know your application, but in general I suggest to make your application more dynamic, so that elements are moved around over time, or the screen is blanked to black, in order to avoid the burn-in.