DLP2000: How to remove/hide DLP splash screen ?

Part Number: DLP2000
Other Parts Discussed in Thread: DLPA1000, , DLPC2607

Tool/software:

Hi everyone!
I'm contacting you because I recently used the DLP2000 to project a green line. I also used the DLPC2607 and DLPA1000 modules (among others) in a custom PCB and I use an STM32 microcontroller under STM32CubeIDE for the code. I do manage to project my line, but the splash screen and a red screen appear briefly before projection.


Here's how I display my image :
- I calculate the position of my line and store it in memory on a QSPI PSRAM.
- I activate the projector with "HAL_GPIO_WritePin(PROJ_EXT_GPIO_Port,PROJ_EXT_Pin, GPIO_PIN_SET);" for 1ms.
- I do a park mirror (1ms) then a software reset (250ms). (Ps: I think this is where the splash screen shows up most during projection).
- I set the resolution (1ms) and pixel format (1ms).
- Select parallel input source (1ms). This is where the red screen appears.
- Finally, I display the image of my line in memory.


The result of the real-time operation is as follows (video) :

Click here to play this video

I read on the SW programmer guide for the DLP2607 that it was possible to switch off the projector LEDs (page 23). I tried it, and indeed, it does turn off the image, but the splash screen comes back on after the next command.
I was also able to read on this forum "DLPDLCR2000EVM: change or delete splash screen" that it was necessary to change the firmware of the DLP2000 in order to put a black image on it. However, this would not solve the problem of the red screen and I would need clarification on the method.

For more details, here's a snippet of the code (freeRTOS) I use to display the line :

HAL_GPIO_WritePin(PROJ_EXT_GPIO_Port,PROJ_EXT_Pin, GPIO_PIN_RESET);
stopDisplayImg();
DisableOctoSPI();

EnterQuadMode();
osDelay(5);
EraseAllPixel();

DrawLine(piezo_nb, green);
DrawCross(piezo_nb, green);

osDelay(1);
EnableMemMappedQuadMode();
osDelay(1);
HAL_GPIO_WritePin(PROJ_EXT_GPIO_Port,PROJ_EXT_Pin, GPIO_PIN_SET);
osDelay(1);

transmit_I2C(0x2D,0x01);
//sendMessage("Park Mirror\n\r", sizeof("Park Mirror\n\r"));
osDelay(1);

transmit_I2C(0x1F,0x01);
//sendMessage("Software Reset\n\r", sizeof("Software Reset\n\r"));
osDelay(250);

//freeze (doesn't work)
//	transmit_I2C(0xA6, 0x01); //black screen
//	osDelay(20);
//	transmit_I2C(0xA3, 0x01); //freeze on black screen
//	osDelay(1);

transmit_I2C(0x0C,0x13);
//sendMessage("Resolution  840 * 480\n\r", sizeof("Resolution  840 * 480\n\r"));
osDelay(1);

transmit_I2C(0x0D,0x00);
//sendMessage("DataPixel\n\r", sizeof("DataPixel\n\r"));
osDelay(1);

transmit_I2C(0x0B,0x00);
//sendMessage("Select Input Parrallele\n\r", sizeof("Select Input Parrallele\n\r"));
osDelay(1);

// unfreeze (doesn't work)
//	transmit_I2C(0xA6, 0x00);
//	osDelay(20);
//	transmit_I2C(0xA3, 0x00);
//	osDelay(1);

displayImg(QSPI_BASE_ADDR);

I hope you can help me.
Yours faithfully
--
Brieuc CLAQUIN

  • Hello User,

    Welcome back to the E2E forums and we hope to assist you with your question. 

    Please give our team some further time to look into this issue. 

    Regards,

    Alex Chan

  • Hello Brieuc,

    Thank you for your patience. 

    Please try reversing the order following i.e. display the output first before switching input source

    Select parallel input source (1ms). This is where the red screen appears.
    - Finally, I display the image of my line in memory.

    Try selecting input source either parallel or internal test pattern (black screen) before turning on LED.

    I read on the SW programmer guide for the DLP2607 that it was possible to switch off the projector LEDs (page 23). I tried it, and indeed, it does turn off the image, but the splash screen comes back on after the next command.

    regards,

    Vivek

  • Hi Vivek !

    I tried to do what you said, but without success. The projector only takes into account commands entered when it is switched on.

    However, I finally managed to hide the red screen and splash screen with this code :

    HAL_GPIO_WritePin(PROJ_EXT_GPIO_Port,PROJ_EXT_Pin, GPIO_PIN_RESET); // Shut down projector
    stopDisplayImg();
    DisableOctoSPI();
    
    //'0002'
    EnterQuadMode();
    osDelay(5);
    
    //'0019'
    EraseAllPixel();
    
    DrawLine(piezo_nb, green);
    DrawCross(piezo_nb, green);
    
    osDelay(1);
    EnableMemMappedQuadMode();
    osDelay(1);
    HAL_GPIO_WritePin(PROJ_EXT_GPIO_Port,PROJ_EXT_Pin, GPIO_PIN_SET); // Power up projector
    osDelay(200);
    
    //freeze
    transmit_I2C(0xA6, 0x01); //black screen
    osDelay(1);
    transmit_I2C(0xA3, 0x01); //freeze on black screen
    osDelay(1);
    
    //'0011'
    transmit_I2C(0x0C,0x13); //Resolution 840 * 480
    osDelay(1);
    
    //'0012'
    transmit_I2C(0x0D,0x00); //Pixel format RGB565 16bits
    osDelay(1);
    
    //'0013'
    transmit_I2C(0x0B,0x00); //Select Input Parrallele
    osDelay(60);
    
    displayImg(QSPI_BASE_ADDR); //Complete image
    
    // unfreeze
    transmit_I2C(0xA3, 0x00);
    osDelay(80);
    transmit_I2C(0xA6, 0x00);
    osDelay(1);


    There seemed to be a problem with the timers, but I didn't quite understand what it was. This code works but leaves me puzzled. In fact, I'm obliged to leave a minimum of 200ms when calling the spotlight on function. Why, when I used to leave only 1 ms, did this not seem to be a problem? Also, with a 200ms timer, the human eye should notice and still see a brief splash screen, but this is not the case.
    A lot of unanswered questions...

  • Hello Brieuc,

    One of the explanations for higher delay could be - it takes few video frames for display to sync up with change in input port. If you are running at 30Hz then frame time is around 32 ms and it could 2-3 frames before correct content is displayed.

    regards,

    Vivek