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.

Compiler/DLPD4X00KIT: programming using D4100_usb.dll in LabVIEW

Part Number: DLPD4X00KIT

Tool/software: TI C/C++ Compiler

Hi, 

I have created the library (lvlib) necessary to control DMD (DLP650LNIR) using DLPLCR65NEVM. My final goal is to load a few images (lets say 10 binary images, each 1280*800 consisting of 0s and 1s) into DMD memory and run it in a loop continuously, so it keeps displaying and generating triggers out simultaneously. I have two questions. 

1. The one I purchased has memory slots available. What is onboard memory size and if I want to load up more images, what memory options are available for me to purchase and accessorize. I would like to load a bunch of images (or an avi) once and let DMD loop itself. I hope I don't have to load image (using multiple "LoadData" calls) each time.

2. Running into issues while loading one image and displaying (resetting) it using section 6 of the manual. First off, manual suggest 64kb for each loading for DLP650LNIR. 64kb can only be 50 rows (50*1280 = 64000) instead of 500 as suggested by the manual. Second, I am having issues displaying it. I load 50*1280 array into function LoadData (6.2.2) 16 times (making up 1280*800).... so far so good, but after that whatever function I use, I am not able to get the display on DMD. Tried "LoadControl", tried setting SW Switch Bit '5' to be '1'  (Table 3 of the manual) using "SetSWOverrideValue" 

Please note the communication is fine. I can get all the configuration values from the board, able to set internal test pattern using "SetPatternSelect" and that seems to work as well. 

Thank you

GM

  • Hello Gopi,

    Welcome to the the DLP section of the TI-E2E forums.

    1.  Memory slot.  I know the kit can support at least a 2 GigaByte module.  Please check the controller board schematic to see the number of address lines.  This will determine the max addressable memory.

    However, please be aware that you will have to write (using Xilinx MIG -memory interface generator) tool your own memory controller and handler.  The GUI has no native memory controller.

    2. Pattern Loading. Please understand that the FPGA has a buffer that should hold about 1/3 or at least 1/4 of a binary pattern.  That would be 200 rows at 1/4 of the DMD.  I know that it can load 1/2 of an XGA device and 1/3 of a 1080p device, which is over 393 kilobits for the XGA.

    Let me look closer to see what other commands you might be missing to send an image.

    Fizix

  • Thank you Fizix,

    The whole idea of me worrying about memory is speed, so that I could load let's say 10 images once, and be able to reuse (DMD keeps displaying these 10 images in an iterative loop fast), in kHz.

    If I understand right, loading images is only possible with Xilinx MIG. 

    I tried the ActiveX methodolgy (.OCX) mentioned under section 5 of the manual. Even with that, loading a bmp (converting to binary) takes at least a second and then when I call "LoadToDMD" function in an iterative for loop ( it displays the same image again and again), it is still running very slow (~10Hz).

    If let's say writing Xilinx is out of our scope, I want a quick answer to know if it is worth pursuing this or not. We want 10 to 20 images be displayed on DMD at kHz rate. So far, it looks super slow, FPGA's buffer cannot even hold one image and loading into it is time taking. So a fast looping through a bunch of images iteratively in kHz is not feasible???

    If it is not possible, we would like to return those. Appreciate a quick idea. 

    Thank you

    Gopi

  • Hello again Gopi,

    You are correct that you will have to build your own memory controller in the APPS_FPGA using the Xilinx MIG tool in order to store and stream images at speed.  

    If you are only going to use this once and is not to develop an end product, you may want to contact Digital Light Innovations (Dli) to see if you can purchase the ViALUX ALP 4.1 HS (high speed) package.  Ask them what is available and that you already have a DLPLCR4x0EVM.  I don't know if they can convert yours.  Most likely they only sell the kit & software.  Look at their Discovery Development kits.

    Their system has a proprietary load for the APPS_FPGA with a memory controller and software that does all of this for you.  The question for you is the headache of attempting to develop this worth the cost of a kit & software dedicated to doing this?

    You can find our partner links on this page:   https://www.ti.com/dlp-chip/advanced-light-control/optics-electronics/optics-electronics.html

    Fizix

  • Thanks Fizix, 

    That gives us a better idea. We are pursuing those in parallel.

    For now, can you tell us what is the best speed that is possible with the dll approach with the current board?. (Section 6 of the manual)

    I still want to try the dll approach I initially started with, to see the speed I can achieve as we can live with 100Hz display rate if that is possible. (Currently with Explorer GUI or ActiveX, I can get a max of 10Hz laoding 64*64 pixel images in sequence)

    Would you mind giving us/correcting the pesudo code I have here. Just the sequence of operations is all I need. I was hoping to have that in the manual at the end of section 6.

    I have DLP650LNIR and DLPLCRC410EVM

    From D4100_usb.dll

    1. GetNumDev - gives 1 (obtain the DeviceNumber)

    2. GetDMDType - gives 7

    3. For loop

    Each loop load 64 kilobits as specified below (50*1280 = 64000 (64kbits)) of data; only 50 rows at a time; not 500 as mentioned in the manual?

     

    Load Data (UCHAR array of 50*1280, length(64000), DMDType(7), DeviceNumber(1))

    Run the loop 16 times for an image to fill all 800 rows

    4. Reset to display the image on DMD (what is the call here?)

    LoadControl?, SetSWOverrideValue(5,1) for 10 global reset?; they don't seem to work; appreciate the right call

    5. Send a pulse out of the board after each image is displayed

    SetGPIO(1, 1) value of 1 should set Bit 1 to have value 1 - GPOI-6 should have a pulse out?

    or SetGPIOResetComplete, to create a 1 us GPIO_A1 to have a trigger out.

    Appreciate if you could be more specific in answering each of the above questions in detail along with a correct pseudo code I could use, to write a program either C or LabVIEW.

    Thank you

    GM

    When I I would like to load a bunch of images (or an avi) once and let DMD loop itself. I hope I don't have to load image (using multiple "LoadData" calls) each time.

    2. Running into issues while loading one image and displaying (resetting) it using section 6 of the manual. First off, manual suggest 64kb for each loading for DLP650LNIR. 64kb can only be 50 rows (50*1280 = 64000) instead of 500 as suggested by the manual. Second, I am having issues displaying it. I load 50*1280 array into function LoadData (6.2.2) 16 times (making up 1280*800).... so far so good, but after that whatever function I use, I am not able to get the display on DMD. Tried "LoadControl", tried setting SW Switch Bit '5' to be '1'  (Table 3 of the manual) using "SetSWOverrideValue" 

  • Hello Gopi,

    It took a little to look this up. 

    First as a side note.  When I tried this in Labview some time back, I set Labview to send LoadControl 3 times in a row each time I called it.

    Here is the sequence for loading with Global Reset used:

    RowMode - NoOp

    BlockAdd - 8 (1000b)

    BlckMode - MultiReset

    Send LoadControl x 3

    Call Load Data (8 blocks worth twice for the XGA, 5 blocks worth 3 times for the 1080p -- for NIR I would try 5 blocks worth 3 times)

    THEN FOR RESET:

    Set BlockMode - NoOp

    Send LoadControl x 3

    See if that works.

    Fizix