SolderedElectronics / Inkplate-Arduino-library

Inkplate family Arduino library. The easiest way to add e-paper to your project.
https://inkplate.readthedocs.io/en/latest/arduino.html
GNU Lesser General Public License v3.0
251 stars 78 forks source link

Bad display module? #193

Closed fridgecow closed 1 year ago

fridgecow commented 1 year ago

I bought an Inkplate 10 (with battery and case) from Soldered but I've been struggling to get it to display anything. The first thing I did when I got the board was flash one of the Deep Sleep examples, but when I couldn't get it to work, I flashed the Inkplate 10 Peripheral Mode example. I'm using the board definitions from: https://github.com/SolderedElectronics/Dasduino-Board-Definitions-for-Arduino-IDE .

I can interact with the board, e.g I have no problem receiving OK, temperature, display mode, battery voltage. Eventually I tried turning the panel on and off with the #Q(0)* and #Q(1)* commands, which resulted in this:

image

However, clear commands (#K(1)), draw commands, etc, all do nothing. The more I turn the panel on and off, the worse the bands get.

It did look fine when it arrived:

image

However I have not done anything except remove the case to check the hardware.

I had to pay quite a lot of import duty so would love to get this fixed :)

fridgecow commented 1 year ago

I finally got something displaying (the first examples weren't working I guess because of https://github.com/SolderedElectronics/Inkplate-Arduino-library/issues/191 , then peripheral mode wasn't working because I never sent #L(1)* to flush the buffer.

However, the stripes have remained, so I still think the display module is bad: image

The lines persisted during & after the Burn-In fix example.

fridgecow commented 1 year ago

As it happens, the lines don't appear immediately on flushing to the display, but creep in over time (maye 30s-1m). I tried reseating the flex ribbon but it did not help.

fridgecow commented 1 year ago

The slow appearance of the lines can be seen even if the board is completely disconnected from battery & 5V after updating the display.

fridgecow commented 1 year ago

The lines appear in both 1BIT and 3BIT mode.

KarloLeksic commented 1 year ago

Hi @fridgecow,

We are sorry for the problem. We suspect that the problem is in the Vcom voltage. Can you please run an Inkplate10_Factory_Programming_VCOM but before, comment on the lines that I also commented:

    //if (isFirstStartup)
    //{
        // Test all the peripherals
        //testPeripheral();

        do
        {
            // Get VCOM voltage from serial from user
            uint8_t flag = getVCOMFromSerial(&vcomVoltage);

            // Show the user the entered VCOM voltage
            Serial.print("Entered VCOM: ");
            Serial.println(vcomVoltage);
            display.print(vcomVoltage);
            display.partialUpdate();

            if (vcomVoltage < -5.0 || vcomVoltage > 0.0)
            {
                Serial.println("VCOM out of range!");
                display.print(" VCOM out of range!");
                display.partialUpdate();
            }

        } while (vcomVoltage < -5.0 || vcomVoltage > 0.0);

        // Write VCOM to EEPROM
        display.pinModeInternal(IO_INT_ADDR, display.ioRegsInt, 6, INPUT_PULLUP);
        writeVCOMToEEPROM(vcomVoltage);
        EEPROM.write(EEPROMaddress, 170);
        EEPROM.commit();

        display.selectDisplayMode(INKPLATE_3BIT);

        // Select the waveform via serial
        // Write "OK" to confirm input
        int result = 1;
        //do
        //{
        //    result = getWaveformFromSerial(&selectedWaveform);
        //} while (result != 0);

        // Write waveform to EEPROM
        //waveformEEPROM.waveformId = INKPLATE10_WAVEFORM1 + selectedWaveform;
        //memcpy(&waveformEEPROM.waveform, waveformList[selectedWaveform], sizeof(waveformEEPROM.waveform));
        //waveformEEPROM.checksum = display.calculateChecksum(waveformEEPROM);
        //display.burnWaveformToEEPROM(waveformEEPROM);
    //}
    //else
    //{
    //    display.einkOn();
    //    vcomVoltage = (double)(readReg(0x03) | ((uint16_t)(readReg(0x04 & 1) << 8))) / -100;
    //    display.getWaveformFromEEPROM(&waveformEEPROM) ? waveformEEPROM.waveformId : -1;
    //}

This is the sketch that we program to our Inkplates when we make it. It tests it, writes VCOM voltage to the TPS PMIC, and also writes waveform to EEPROM memory. With these comments, we skip testing. It only writes VCOM voltage to the TPS.

Open the Serial Monitor and enter -1.8. If the VCOM is programmed successfully, you will see a message on the Serial Monitor and you will get the initial screen as when you bought it.

If that was the problem, the lines will no longer be shown across the screen.

Edit: It is important that you can do it only about 100 times and EEPROM in the chip (TPS) will be unusable and it won't work anymore. Keep the use of it to a minimum.

fridgecow commented 1 year ago

Thank you for the help. The panel actually improved slightly after leaving 24 hours, and then healed completely after running the VCOM programming as suggested.

On Tue, 11 Apr 2023, 13:44 KarloLeksic, @.***> wrote:

Hi @fridgecow https://github.com/fridgecow,

We are sorry for the problem. We suspect that the problem is in the Vcom voltage. Can you please run an Inkplate10_Factory_Programming_VCOM but before, comment on the lines that I also commented:

` //if (isFirstStartup) //{ // Test all the peripherals //testPeripheral();

do
{
    // Get VCOM voltage from serial from user
    uint8_t flag = getVCOMFromSerial(&vcomVoltage);

    // Show the user the entered VCOM voltage
    Serial.print("Entered VCOM: ");
    Serial.println(vcomVoltage);
    display.print(vcomVoltage);
    display.partialUpdate();

    if (vcomVoltage < -5.0 || vcomVoltage > 0.0)
    {
        Serial.println("VCOM out of range!");
        display.print(" VCOM out of range!");
        display.partialUpdate();
    }

} while (vcomVoltage < -5.0 || vcomVoltage > 0.0);

// Write VCOM to EEPROM
display.pinModeInternal(IO_INT_ADDR, display.ioRegsInt, 6, INPUT_PULLUP);
writeVCOMToEEPROM(vcomVoltage);
EEPROM.write(EEPROMaddress, 170);
EEPROM.commit();

display.selectDisplayMode(INKPLATE_3BIT);

// Select the waveform via serial
// Write "OK" to confirm input
int result = 1;
//do
//{
//    result = getWaveformFromSerial(&selectedWaveform);
//} while (result != 0);

// Write waveform to EEPROM
//waveformEEPROM.waveformId = INKPLATE10_WAVEFORM1 + selectedWaveform;
//memcpy(&waveformEEPROM.waveform, waveformList[selectedWaveform], sizeof(waveformEEPROM.waveform));
//waveformEEPROM.checksum = display.calculateChecksum(waveformEEPROM);
//display.burnWaveformToEEPROM(waveformEEPROM);

//} //else //{ // display.einkOn(); // vcomVoltage = (double)(readReg(0x03) | ((uint16_t)(readReg(0x04 & 1) << 8))) / -100; // display.getWaveformFromEEPROM(&waveformEEPROM) ? waveformEEPROM.waveformId : -1; //}`

This is the sketch that we program to our Inkplates when we make it. It tests it, writes VCOM voltage to the TPS PMIC, and also writes waveform to EEPROM memory. With these comments, we skip testing. It only writes VCOM voltage to the TPS.

Open the Serial Monitor and enter -1.8. If the VCOM is programmed successfully, you will see a message on the Serial Monitor and you will get the initial screen as when you bought it.

If that was the problem, the lines will no longer be shown across the screen.

— Reply to this email directly, view it on GitHub https://github.com/SolderedElectronics/Inkplate-Arduino-library/issues/193#issuecomment-1503261592, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB5A64GMO3GWEPQHLWLDU7DXAVG3JANCNFSM6AAAAAAWW3XNNM . You are receiving this because you were mentioned.Message ID: @.*** .com>

KarloLeksic commented 1 year ago

The issue is closed because the problem is solved and there is no more activity