This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DLPDLCR230NPEVM: Increasing the luminosity from 100 - 350 lumens.

Part Number: DLPDLCR230NPEVM
Other Parts Discussed in Thread: DLPC3436, DLPA2005

Hello,

We have multiple DLPDLCR230NPEVM units and are looking to increase the luminosity from 100 to 350 lumens.

TI specifies the optical engine and the chipset on the EVM are capable of 350 lumens.

We're using "DLP 230NP python API" to change the max LED current values but have not been able to change the brightness.

Please let us know the best method to increase the brightness for the DLPDLCR230NPEVM model.

  • Hello User,

    Welcome to the E2E forum and thank you for your interest in DLP technology!

    Adjusting the LED currents is our typical recommendation for adjusting brightness. Is any difference in light intensity seen when adjusting the LED current? If not, what is returned with the ReadRgbLedCurrent() function? Does this match your input?

    It may be that the max current is limiting the drive strength. Please also check this parameter with ReadRgbLedMaxCurrent().

    Regards,

    Austin 

  • Thank you Austin,

    We have adjusted the max LED current from 810 to 1600 "WriteRgbLedMaxCurrent(1600,1600,1600)". However, there is no noticeable change in brightness from the preset 810 value.

    The ReadRgbLedCurrent() function does match our input of 1600 but the projectors brightness does not increase past 810.

    IDAC 1600

    Below is the script we've tried testing with but no luck yet. Please let us know if there is something we're missing.

            gpio_init_enable = False          # Set to FALSE to disable default initialization of Raspberry Pi GPIO pinouts. TRUE by default.
            i2c_time_delay_enable = False    # Set to FALSE to prevent I2C commands from waiting. May lead to I2C bus hangups with some commands if FALSE.
            i2c_time_delay = 0.8             # Lowering this value will speed up I2C commands. Too small delay may lead to I2C bus hangups with some commands.
            protocoldata = ProtocolData()

            def WriteCommand(writebytesprotocoldata):
                '''
                Issues a command over the software I2C bus to the DLPDLCR230NP EVM.
                Set to write to Bus 7 by default
                Some commands, such as Source Select (splash mode) may perform asynchronous access to the EVM's onboard flash memory.
                If such commands are used, it is recommended to provide appropriate command delay to prevent I2C bus hangups.
                '''
                # print ("Write Command writebytes ", [hex(x) for x in writebytes])
                if(i2c_time_delay_enable):
                    time.sleep(i2c_time_delay)
                i2c.write(writebytes)      
                return

            def ReadCommand(readbytecountwritebytesprotocoldata):
                '''
                Issues a read command over the software I2C bus to the DLPDLCR230NP EVM.
                Set to read from Bus 7 by default
                Some commands, such as Source Select (splash mode) may perform asynchronous access to the EVM's onboard flash memory.
                If such commands are used, it is recommended to provide appropriate command delay to prevent I2C bus hangups.
                '''
                # print ("Read Command writebytes ", [hex(x) for x in writebytes])
                if(i2c_time_delay_enable):
                    time.sleep(i2c_time_delay)
                i2c.write(writebytes)
                readbytes = i2c.read(readbytecount)
                return readbytes

            # ##### ##### Initialization for I2C ##### #####
            # register the Read/Write Command in the Python library
            DLPC343X_XPR4init(ReadCommandWriteCommand)
            i2c.initialize()
            if(gpio_init_enable):
                InitGPIO()
            # ##### ##### Command call(s) start here ##### #####  

            print("Performing DLPC3436 LED Test...")
            Summary = WriteDisplayImageCurtain(1,Color.Black)
            Summary = WriteFpgaTestPatternSelect(Set.Disabled,  FpgaTestPatternColor.Black,   FpgaTestPattern.ColorBars,  0)
            Summary = WriteSourceSelect(Source.FpgaTestPattern, Set.Disabled)
            Summary = WriteInputImageSize(19201080)
            time.sleep(1)
            Summary = WriteDisplayImageCurtain(0,Color.Black)
            time.sleep(2)
            Summary = WriteLedOutputControlMethod(LedControlMethod.Manual)
            Summary = WriteRgbLedMaxCurrent(1600,1600,1600)

            print("Testing RED LED...")
            Summary = WriteRgbLedEnable(1,0,0)
            for led_dac_value in range(60,1600+1,30):
                Summary = WriteRgbLedCurrent(led_dac_value,60,60)
                print("IDAC Value: ",led_dac_value)
                time.sleep(1)

            print("Testing GREEN LED...")
            Summary = WriteRgbLedEnable(0,1,0)
            for led_dac_value in range(60,1600+1,30):
                Summary = WriteRgbLedCurrent(60,led_dac_value,60)
                print("IDAC Value: ",led_dac_value)
                time.sleep(1)

            print("Testing BLUE LED...")
            Summary = WriteRgbLedEnable(0,0,1)
            for led_dac_value in range(60,1600+1,30):
                Summary = WriteRgbLedCurrent(60,60,led_dac_value)
                print("IDAC Value: ",led_dac_value)
                time.sleep(1)

            Summary = WriteRgbLedEnable(1,1,1)
            Summary = WriteRgbLedCurrent(1600,1600,1600)
            time.sleep(1)

            print("Restoring Raspberry Pi Video Display")
            Summary = WriteDisplayImageCurtain(1,Color.Black)
            Summary = WriteSourceSelect(Source.ExternalParallelPort, Set.Disabled)
            Summary = WriteInputImageSize(19201080)
            Summary = WriteExternalVideoSourceFormatSelect(ExternalVideoFormat.Rgb666)
            time.sleep(1)
            Summary = WriteDisplayImageCurtain(0,Color.Black)

            # ##### ##### Command call(s) end here ##### #####
            i2c.terminate()
  • User,

    You are welcome.

    This script should seemingly work looking it over. I would like to test this on an EVM myself, but I do not have one currently available to me. It me be next week before I am able to test this script on an EVM for you.

    In the meantime, I have a few questions to attempt a debug:

    1. From you description it sounds as though the IDAC value increments from 60 to 810, but does not exceed this. Is this the case? Are you seeing the brightness increase before reaching the 810 IDAC value?
    2. In this script you print the value that you are passing into the WriteRgbLedCurrent() function. If you issue a ReadRgbLedCurrent() command, does this match this value?
    3.  Are you able to confirm that the max current registers have been set by issuing a ReadRgbLedMaxCurrent() command after the WriteRgbLedMaxCurrent() command?

    Regards,

    Ausitn

  • Thank you for looking into testing on a actual EVM. Well noted you currently don't have one available.

    1. Yes, the IDAC value increments will not exceed the preset value of 810 as far as physical brightness coming from the projector. We do see brightness increases all the way to 810 coming from 60 but nothing past it.

    2. Yes, it matches the value.

    3. Yes, but this did not increase brightness past the 810 value.

  • User,

    You are welcome. Please allow me until the end of next week to test this on my hardware.

    Regards,

    Austin

  • Hi Austin,

    Just wanted to check in with you.

    Will you still be able to perform testing on the hardware by the end of this week?

  • Hello User,

    I have found that the WriteRgbLedMaxCurrent is not being maintained by the system. If you add the following commands into your Python script you will likely see the same on your system.

    ## Command Call Starts Here ##
    Summary, MaxRedLedCurrent, MaxGreenLedCurrent, MaxBlueLedCurrent = ReadRgbLedMaxCurrent()
    
    print("Max red current: ", MaxRedLedCurrent)
    print("Max green current: ", MaxGreenLedCurrent)
    print("Max blue current: ", MaxBlueLedCurrent)
    
    print("Setting all max currents to 1200..")
    Summary = WriteRgbLedMaxCurrent(1200, 1200, 1200)
    
    ## Command Call Starts Here ##
    Summary, MaxRedLedCurrent, MaxGreenLedCurrent, MaxBlueLedCurrent = ReadRgbLedMaxCurrent()
    print("Max red current: ", MaxRedLedCurrent)
    print("Max green current: ", MaxGreenLedCurrent)
    print("Max blue current: ", MaxBlueLedCurrent)

    I am currently trying to find the root cause as to why this is the case. It may be set in the embedded software or due to an algorithm that is overriding. I hope to have more information for you soon.

    Regards,

    Austin

  • Hello User,

    After some digging I found that the current is limited in the image firmware to an IDAC value of 810. This roughly corresponds to 2A through the LEDs.

    My question then became, "Why is this the limitation when the DLPA2005 is capable of outputting 2.5A?" I reached out to members of our team that were involved with the development of this EVM. They have informed me that the reasons behind limiting the current to 2A are primarily based in thermal considerations for the DLPDLCR230NPEVM. Designing for a form factor module limited the cooling solution. There is also protection circuitry on the board to protect the system from over-driving.

    The good news is that this would not be a limitation for a custom board design if you were to decide to create one. If this were to be done, the current would only be limited to the DLPA chosen. In the case of the DLPA2005 the maximum would be the 2.5A (IDAC value of 1023).

    I hope this was of value to you.

    Regards,

    Austin