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.

DLPLCRC410EVM: Inquire about automatic control with API

Part Number: DLPLCRC410EVM
Other Parts Discussed in Thread: DLPC410

Hello Team,

For my application, we would like to control DMD(DLPLCRC410EVM) with our program.

According to User's guide and Programmer's guide, the way to make mirror show assigned patterns is loading the data first and then passing reset signal.

Before running the program, I want to check the correctness of my logic. The followings are functions I am going to used.

1. get_usb_speed --> check the connection of fpga board.

2. load_control --> start controll DMD

3. set_tpge_enable == 0 --> stop sequence

4. clear_fifos --> before passing image to DMD, clear datas in buffer.

5. set_row_md

6.set_row_md_addr --> set the addr of image

7. load_data --> load image (size == 400 * 1280)

8. set_blkmd

9. set_blkad --> give reset signal

Thanks for your help in advance.

David

  • David,

    This looks almost correct except there is one other step.

    After setting any row or block modes/addresses you must call load control.  Step 2 may not be needed, but keep it.  If you find that it is not working correctly, try calling load control three times.

    In your sequence try calling it after step 6. and step 9.

    Fizix

  • Hi Fizix,

    Thanks for the updated information.

    After setting any row or block modes/addresses you must call load control.

    Is this mean calling load control is needed if I want to load control values to the DLPC410 controller?

    I have another question about loading pattern.

    If I want to load an image with size equal to 800 * 1080, then I need to cut it in half and load them respectively(400 * 1280 + 400 * 1280) since the load data function can load no more than 500 rows, right? 

    My question is how to set the ROW_MD and ROW_AD value, or should I choose the Set Random mode and give each row corresponding value(i.e. divide the image into 800 equal parts and pass them row by row). If it is how to set the ROW_AD value?

    On the other hand, the function of preloading images onto FPGA board seem not provide in manual, so this mean I should set the row addr and give reset signal to each pattern if I want to change frame?
    Would this way slow the frame rate, or it can still guarantee 32kHz frame rate?

    And just for checking, if I want to set ROW_MD to "10", should I sent arr = [1, 0] in string type?

    David

  • David,

    Sorry for the delay.

    You must load the entire width of the array and load 1/3 of the data to the APPS_FPGA, then send it to the DMD.  Do that two more times letting the row counter increment automatically.  This will result in all of the DMD being loaded, then you can issue a Global Reset. (i.e ROW_MODE "01")

    When you wish to load the next image, you must set the first row (i.e. ROW_MODE "11"

    Fizix

  • Hi Fizix,

    The followings are the codes I wrote in the program.

    1. get_usb_speed --> check the connection of fpga board.

    2. load_control

    3. set_tpge_enable == 0 --> stop sequence

    4. load_control

    5. clear_fifos --> before passing image to DMD, clear datas in buffer.

    6. load_control

    7. set_row_md

    8.set_row_md_addr --> set the addr of image

    9. load_control

    10. load_data --> load image

    11. load_control

    12. set_blkmd

    13. set_blkad --> give reset signal

    14. load_control

    And the image obviously not show on the mirror.

    I firstly give row_md with 1 in integer type to make the row counter increment and give give row_ad with 0

    Then, after loading image array with size 1 * 1280 800 times by using iteration(to load the size of 800 * 1280 image),  I set blkmd, blkad with 3(11), 8(1000) respectively.

    By the way, the image could show on the mirror with GUI after click "run one time" button and the setting are row_md = 1, row_ad = 0, blkmd = 3, blkad = 8

    Could you help discover where the problem is?

    David

  • Hi Fizix,

    I have successfully found the bug.

    The issue is the data size. I originally passed 400 * 1280 array two times with load_data function on DMD.

    However, I found that although I pass 50 * 1280 array with full "1" in unsigned char type(i.e. each element is 255), almost half of the mirrors would change its physical type. 

    Then, I shrink the origin pattern(divide X axis value, 1280, by 8) , which make the pattern size from 800 * 1280 to 800 * 160, load it, and the mirrors show the correct pattern!

    If I got it right, this mean each unsigned char element(8 bit) would correspond to 8 mirror instead of 1. Is my idea right?

    David

  • David,

    Sorry for the delays.

    Your understanding is correct.  The data is binary.  So each char element represents on or off for 8 mirrors.

    Great work!

    Fizix