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) :
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