• TI Thinks Resolved

DLP4710EVM-LC: External video pattern question

Intellectual 480 points

Replies: 17

Views: 210

Part Number: DLP4710EVM-LC

Hi TI,

I have some questions regarding DLP4710EVM-LC, could you please give me a hand?

I want to project a series of 2D images (not vertical or horizontal lines) and want to know my option is with 4710EVM-LC.

(1) Can 4710 EVM-LC store more than 4 splash images (GUI only shows 4 but how many images or size can it store)?

(2) If I project a series of  images (single color, I think I can set bit depth to 1, frame by frame from PC), using external pattern mode (via HDMI). Will projector detect the image (frame) change and set trigger 1 to high at the beginning of each new frame? How many frames can I project in 1s? 

Thanks!

Derlin

 

  • Derlin,

    The DLPC3479 chipset can store any number of splash screens so long as the flash memory implemented in the system is large enough. In the case of the 4710-LC EVM, however, it is set up to only accept four splash screens. If you were to design a custom board you could use a larger flash memory with more splash screens.

    As for the frame rate, the DLPC3479 chipset supports high-speed pattern rates up to 1440 Hz (1- bit) and 180 Hz (8-bit) in external video mode. This is accomplished by inputting standard 60 Hz frames over the HDMI input with the 24 bits of RGB data packed with encoded patterns. For example, with 8-bit pattern mode you would have each color (R,G,B) present an 8-bit pattern during the 60 Hz frame, which is decoded by the DLPC3479 to result in an effective pattern rate of 180 Hz on the DMD output.

    I hope this helps.

    Regards,

    Philippe Dollo

    --------------------------------------------------------------------------------------------------------

    If a post answers your question, please click the "Verify Answer" button.

    Have questions about DLP Pico Chipsets? Check out the DLP Pico Universal FAQ for quick answers: https://e2e.ti.com/support/dlp/f/94/t/946506 

  • In reply to Philippe Dollo:

    Hi Philippe,

    Thanks for your answer.

    I know the patterns will be fed from HDMI port, however I don't understand how to compress several patterns in one frame? How can projector know when to send out trigger 1 (between frame) or trigger 2 (between pattern) as below.

    We are using OpenCV "imshow", is that correct tool to do it? 

    Thanks!

    Derlin       

  • In reply to Derlin Chow:

  • In reply to Derlin Chow:

  • In reply to Derlin Chow:

    Hi Derlin,

    Thank you for your patience on the coming support.

    Your inquiry on pattern compression is important to us, but our team will likely be unable to reply until the new year.

    Kind regards,

    Austin

    --------------------------------------------------------------------------------------------------------

    If a post answers your question, please click the "Verify Answer" button.

    Have questions about DLP Pico Chipsets? Check out the DLP Pico Universal FAQ for quick answers: https://e2e.ti.com/support/dlp/f/94/t/946506 

  • In reply to Austin Snyder:

    Derlin,

    I recommend you start by looking at section 8.3.1.1 of the DLPC3479 datasheet for discussion on this topic:

    https://www.ti.com/lit/ds/symlink/dlpc3479.pdf 

    Next, you should look at our FAQ on Light Control EVMs:

    https://e2e.ti.com/support/dlp/f/94/t/729968

    Each of the 24 bits in an RGB888 video signal in your case are being repurposed to encode/represent the 24 individual patterns being displayed. Instead of displaying each bit for a different amount of time, the DLPC3479 chipset will present each bit as an individual pattern for the set exposure time. By encoding the patterns as individual its (from R[0] to R[8], G[0] to G[8], B[0] to B[8]) it becomes easy to transmit the patterns over a standard HDMI transceiver.

    The DLPC3479 knows the timing it needs to provide for each bit, so it thus knows (based on your GUI configuration) when to issue each trigger out signal.

    Let me know if you want to go into any depth on the above topic. I hope this helps.

    Regards,

    Philippe Dollo

    --------------------------------------------------------------------------------------------------------

    If a post answers your question, please click the "Verify Answer" button.

    Have questions about DLP Pico Chipsets? Check out the DLP Pico Universal FAQ for quick answers: https://e2e.ti.com/support/dlp/f/94/t/946506 

  • In reply to Philippe Dollo:

    Hi Philippe,

    Thanks for your reply.

    I still don't have any clue on how to project external 2-D patterns via HDMI . Do you have an example on how you do it?

    We usually send out pictures to projector using OpenCV imshow() function, but I don't think it is correct. How do you encode 3 patterns in one frame?

    Thanks!

    Derlin     

  • In reply to Derlin Chow:

    Hello Derlin,

    Thank you for your patience. We will respond to your questions by the end of the week.

    Regards,

    Austin

    --------------------------------------------------------------------------------------------------------

    If a post answers your question, please click the "Verify Answer" button.

    Have questions about DLP Pico Chipsets? Check out the DLP Pico Universal FAQ for quick answers: https://e2e.ti.com/support/dlp/f/94/t/946506 

  • In reply to Derlin Chow:

    Derlin,

    Having 3 8-bit patterns (or 24 1-bit patterns) per 60 Hz frame is feasible because with a DLP Light Control system, each of the 24 bits are displayed on the DMD as individual bit planes discretely. For example, the entirely of the DMD will at a point in time be displaying the contents of Green Bit 0, and another time will display Red Bit 7.

    In order to send your 8-bit patterns through the HDMI interface (with OpenCV or whatever video source you choose to use) you will essentially be encoding each of the three patterns as one of the three RGB LED colors. You would generate an image with an 8-bit Red pattern, 8-bit Green pattern, and 8-bit Blue pattern within the same image frame and sent it all at once as a single RGB888 24-bit packet to the DLPC3479 system.

    I hope this helps.

    Regards,

    Philippe Dollo

    --------------------------------------------------------------------------------------------------------

    If a post answers your question, please click the "Verify Answer" button.

    Have questions about DLP Pico Chipsets? Check out the DLP Pico Universal FAQ for quick answers: https://e2e.ti.com/support/dlp/f/94/t/946506 

  • In reply to Philippe Dollo:

    Hi Philippe,

    Thank you for your reply, I tried the following code but nothing happen, could you please take a time to look it?

            CY_I2C_CONFIG cyI2CConfig;
            CY_DATA_BUFFER cyDataBuffer;
            CY_I2C_DATA_CONFIG cyI2CDataConfig;
            unsigned char readBuffer[4096], writeBuffer[4096];
          
           // TI projector address

            cyI2CDataConfig.slaveAddress = 0x1B;
          
            memset(writeBuffer, 0x00, 4096);
            cyDataBuffer.buffer = writeBuffer;

            cyDataBuffer.buffer[0] = 0x52;  // LED disable
            cyDataBuffer.buffer[1] = 0x00;  //
        
            cyDataBuffer.length = 2;
        
            rStatus = CyI2cWrite(handle, &cyI2CDataConfig, &cyDataBuffer, timeout);
            
            if (rStatus != CY_SUCCESS)
            {
               printf("LED Diable fail \n");
            }
            sleep(0.5);
           

            // Load image to code   

            cv::Mat test_1 = cv::imread("1.png");
        
            
            memset(writeBuffer, 0x00, 4096);
            cyDataBuffer.buffer = writeBuffer;

            cyDataBuffer.buffer[0] = 0x96;  //   
            cyDataBuffer.buffer[1] = 0x00;  // 1 bit mono
            cyDataBuffer.buffer[2] = 0x01;  // One patten  
            cyDataBuffer.buffer[3] = 0x01;  // Red
            cyDataBuffer.buffer[4] = 0x10;  // Illuminatiom time 1st byte  10ms
            cyDataBuffer.buffer[5] = 0x27;  // Illuminatiom time 2nd byte  
            cyDataBuffer.buffer[6] = 0x00;  // Illuminatiom time 3rd byte   
            cyDataBuffer.buffer[7] = 0x00;  // Illuminatiom time 4th byte
            cyDataBuffer.buffer[8] = 0xB8;  // Pre-Dark 1st byte                 3ms  
            cyDataBuffer.buffer[9] = 0x0B;  // Pre-Dark 2nd byte
            cyDataBuffer.buffer[10] = 0x00; // Pre-Dark 3rd byte   
            cyDataBuffer.buffer[11] = 0x00; // Pre-Dark 4th byte
            cyDataBuffer.buffer[12] = 0x03; // Post-Dark 1st byte               3ms
            cyDataBuffer.buffer[13] = 0x96; // Post-Dark 2nd byte
            cyDataBuffer.buffer[14] = 0x03; // Post-Dark 3rd byte
            cyDataBuffer.buffer[15] = 0x03; // Post-Dark 4th byte
            cyDataBuffer.length = 16;
        
            rStatus = CyI2cWrite(handle, &cyI2CDataConfig, &cyDataBuffer, timeout);
            
            if (rStatus != CY_SUCCESS)
            {
               printf("Write  Fail \n");
            }
            sleep(0.5);

        
             memset(writeBuffer, 0x00, 4096);
            cyDataBuffer.buffer = writeBuffer;

            cyDataBuffer.buffer[0] = 0x05;  // light control-external pattern
            cyDataBuffer.buffer[1] = 0x03;  //
        
            cyDataBuffer.length = 2;
        
            rStatus = CyI2cWrite(handle, &cyI2CDataConfig, &cyDataBuffer, timeout);
            
            if (rStatus != CY_SUCCESS)
            {
               printf("External pattern setting fail \n");
            }
            sleep(0.5);

            memset(writeBuffer, 0x00, 4096);
            cyDataBuffer.buffer = writeBuffer;
            
            cyDataBuffer.buffer[0] = 0x92; // trigger out setting
            cyDataBuffer.buffer[1] = 0x03; // selete trigger 2 (bit0=1)  enable (bit1=1) Not inverted (bit2=0) 00000-011
            cyDataBuffer.buffer[2] = 0x00; // Not delay 4 bytes
            cyDataBuffer.buffer[3] = 0x00;
            cyDataBuffer.buffer[4] = 0x00;
            cyDataBuffer.buffer[5] = 0x00;
           
            cyDataBuffer.length = 6;

            rStatus = CyI2cWrite(handle, &cyI2CDataConfig, &cyDataBuffer, timeout);
                  
            sleep(0.5);


            cyDataBuffer.buffer[0] = 0x52;  // LED Enable
            cyDataBuffer.buffer[1] = 0x07;  //
        
            cyDataBuffer.length = 2;
        
            rStatus = CyI2cWrite(handle, &cyI2CDataConfig, &cyDataBuffer, timeout);
            
            if (rStatus != CY_SUCCESS)
            {
               printf("LED Enable fail \n");
            }
          

             //Project pattern
             cv::imshow("1",test_1);

    The pattern is as below, I tried 1bit mono (on or off) in red. 



     

    Is there anything I need to add?

    Thanks!

    Derlin