-
Notifications
You must be signed in to change notification settings - Fork 201
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Question] Detecting broken/smashed epaper displays by TPS65185 VOM kick-back voltage? #393
Comments
They won't be other way than to test this. From the TPS65185 datasheet we can read: 8.3.7.1 Kick-Back Voltage Measurement TPS65185x can perform a voltage measurement on the VCOM pin to determine the kick-back voltage of the panel. This allows in-system calibration of VCOM. To perform a kick-back voltage measurement, follow these steps: • Pull the WAKEUP pin and the PWRUP pin high to enable all output rails. Questions:
Additional notes read on TI website:
How long we need to measure to get correct readings? Depending on the capacitance that is at the VCOM node it can be as high as 60 seconds until the VCOM node stabilizes enough for accurate measurement. The leakage current of the panel is low enough that it takes a significant amount of time to charge the bulk capacitors in a system. Without added capacitors the time is a few seconds for reliable results. |
Sounds like an interesting thing to try! We haven't even implemented kick-back measurement for normal VCOM calibration yet though, so that would be a prerequisite. And we know that there is quite a variance in VCOM from display to display, but detecting a change for the same display sounds pretty plausible. As martin said, you'll need to try ;) |
Yes, I'm going to try it out together with Martin with an experiment. Is there a schematic diagram for epaper displays somewhere that shows the connection between Vcom, Vsource and Vgate? |
Thus, for breakage detection it may be useful to average Vcom reading over some time, while pulsing every single TFT FET. |
I asked eInk if this idea would work. They say yes, and that they applied this already in some applications. |
Awesome, is not a surprise Eink being so friendly and open, the first block to pass here in my opinion is:
To me it seems like a special waveform that is used for this VCOM kick-back voltage measurement.
This point is already working in my demo. VCOM pin is in fact "in the air" and voltage is not assigned to it. |
Hello @zephray maybe you have a more clear idea of what is a "Null waveform" and how we could simulate it here? |
This public Eink document says there ist a "Mode 0 = INIT" Waveform: Some more information on Eink waveforms can be found on the internet in this document published by waveshare. |
Thanks! Yeah actually looks like a gray matrix (waveform) that is just clearing the display. Also WHITE, full black, and white again. I will try that in my next tests to see what comes out of the VCOM readings |
The null waveform (based on my understanding) is just keep sending 0x00 (no operation) to the screen. This should allow doing VCOM kick back measurement |
Thanks a lot @zephray that helped a lot. Ok first tests are due and it's already reading something. Will play with this some days more anyways to see if it's the right way. @cyberman54 I've so far added 3 functions in tps65185 C files: void tps_vcom_kickback(); // Pull the WAKEUP pin and the PWRUP pin high to enable all output rails.
// But do not set VCOM to any voltage!
epd_current_board()->measure_vcom(epd_ctrl_state());
// PLUS Sets the HiZ bit in the VCOM2 register (BIT 5) 0x20
// Adding BIT 3 & 4 Number of acquisitions that is averaged to a single kick-back V. measurement to 8 acq's
tps_write_register(I2C_NUM_0, 4, 0x38); void tps_vcom_kickback_start(); // Set the ACQ bit in the VCOM2 register to 1 (BIT 7)
tps_write_register(I2C_NUM_0, TPS_REG_VCOM2, 0xA0); // BIT 5 + 7
// IMPORTANT To keep in mind that we need to mind leaving other BITs in same state and not overwrite them, that's why here we also leave HiZ bit Set
Just checks if the ACQ bit is set. When it is then the readings should be readable from VCOM registers that we do with the following code: /**
* @brief ACQC (Acquisition Complete) bit in the INT1 register is set
* @return mV 0 is not read!
*/
unsigned tps_vcom_kickback_rdy() {
uint8_t int1reg = tps_read_register(I2C_NUM_0, TPS_REG_INT1);
if (int1reg == 0x02) {
uint8_t lsb = tps_read_register(I2C_NUM_0, 3);
uint8_t msb = tps_read_register(I2C_NUM_0, 4);
int u16Value = (lsb | (msb << 8)) & 0x1ff;
printf("Kickback lsb:%d msb:%d result:%d\n\n", lsb, msb, u16Value);
return u16Value *10;
} else {
return 0;
}
} In my tests so far I've used 2 displays and this is the value that comes out, taking 2 passes of the NULL waveform to get the readings:
Both readings where constant in my tests. Still didn't arrive to the part of breaking first displays since I want to make sure that the procedure is delivering a value we can use. As an important remark: The NULL waveform is full of Zeroes (no-action) but even if it's no action the pixel instruction, it might make the dark tint a bit more gray, so I highly recommend after running the test to refresh the display with the normal setup. Or just do it on the night at a certain hour and then restart completely the device to get last time-tables |
Can you try the same approach, with some other waveform, while measuring? To see impact of waveform on voltage value. Also, could you try to heat or cool display while measuring, and compare value? To see impact of temperature on Vcom. |
Low temperatures do affect the readings a lot: Measuring with the 9.7" 1200x825 at normal room temperature of 21°C gives 270 mV VCOM reading. COLD: HOT weather: So as a resume it seems physics of the display affect VCOM including temperature. It seems very cold temperatures minor than -10°C will make broken displays hard to detect. The good thing is that the TPS65185 is usually tied with a NTC Thermistor that can be read by I2C. Will make tomorrow tests with different waveforms. |
Hello @cyberman54 here some readings with temperature of the Thermistor, same display ED097TC2:
I don't think the thermistor in PCB get's below 0°C since I always get positive values. |
Hmm, that's bad news because it makes things more complicated, meaning some kind of temperature compensation will be needed when comparing Vcom Values. Solution: Always read Vcom and Temp value from TPS chip. Then combine both values in some way before compare. Now depends on Vcom values we see with broken displays. If the variation is smaller than average temperature impact, a breakage detection via Vcom will be difficult or impossible, especially in outdoor environments. |
Totally agree. In the cold winter nights under 0° C will be hard to detect. But also keep in mind I did this test putting the naked Display in the freezer. Such an extreme cold shock won't have when it's in the outdoor enclosure protected by glass. But for for sure VCOM readings will be lower. Tomorrow I will start breaking first a 6" that I've somewhere in the lab and don't use, and will document it in the WiKi, and in video. I'm hoping that when display is completely broken VCOM kickback will be close to 0. Additional tests: Using a different waveform like display original waveform does not change my readings as long as the display is white. Updating the display with the dragon demo image just before the Test changes the VCOM readings. I would say that to make a VCOM lecture that is stable for that seconds the display should be cleared like a white paper. UPDATE: Found a small bug in the way I was doing the update. Because epdiy firmware makes a diff between Front buffer and back buffer the ideal way to do a NULL "active waveform" is: epd_init(&DEMO_BOARD, &ED097TC2, EPD_LUT_64K);
hl = epd_hl_init(&epdiy_NULL);
// We start the Kickback process
tps_vcom_kickback();
// Display starts to pass BLACK to WHITE but doing nothing+
// Since the NULL waveform is full of 0 "Do nothing for each pixel"
idf_loop();
// start measure and set ACQ bit:
tps_vcom_kickback_start();
int isrdy = 1;
int kickback_volt = 0;
while (kickback_volt == 0) {
idf_loop();
isrdy++;
kickback_volt = tps_vcom_kickback_rdy();
} This outputs the following and so far is always the same value, higher and closer to real VCOM:
Now this has to be with the NULL waveform. If we use a normal waveform and the pixel move then affects the VCOM a lot making it closer to the higher possible value with TPS65185 that is around 5060 mV. In case using a NULL waveform is not available the best is to refresh the display using always white over white. |
Not sure, if'm a right (i am NOT an electrical engineer): Regarding to the prinicple schematic on top, i would guess Vcom values will rise (not drop) when TFTs on the substrate break. If so, we have no trade off with temperature impact. Maybe we can even detect how many TFTs break and then guess "n% of display surface is broken". That would be extremly nice ;-) But theory so far. |
Between tomorrow and Friday I will make a real test of breaking and documenting a 6" display. |
Additional note from my side: My theory is that then to do proper readings you need to wait some seconds until this capacitors drain. And then you apply the NULL waveform and read. This time VCOM is in HiZ state also like pin is in high impedance state, ready to get the voltage from the other layers. But it might be your theory is right and goes up when display substrate is broken, let's document it. I'm really curious to see what comes out |
@cyberman54 you where right! |
Thank you very much for this experiment! Looks like a well paved road to go for a remote display health check! Lets go further now! |
I'm looking for a way to detect a smashed / broken epaper display with epdiy, just by software.
The idea is: The TPS65185 can perform a voltage measurement on the VCOM pin to determine the kick-back voltage of the epd panel.
Would it be expectable to detect a smashed epaper display by reading this value and compare it against a certain threshold value?
Has anyone tested this?
/cc @martinberlin
The text was updated successfully, but these errors were encountered: