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.

DMD Programming

Other Parts Discussed in Thread: DLPA200, DLPC200, DLP5500

Hello

I am a newbie to DLP200. I am trying to program DMD directly and am not quite sure if I should program DLPC200 or DLPA200 DMD driver(seems it is like a reset)?

Also is there any material that I can look at?

Thanks,

Haixing

  • Hello Haixing,

    Welcome to DLP&MEMS forum. 

    Since you have mentioned yourself as a beginner. To start with I would recommend your to opt for EVM platforms offered by our Design Houses. 

    Here are the links

    CEL5500 https://www.dlinnovations.com/wp/?page_id=759

    X3-PM55 http://keynotephotonics.3dcartstores.com/X3-Machine-Vision-Solution-with-DLP-5500-X3-PM55_p_14.html

    Regards,

    Sanjeev

  • Dear Sanjeev.

    Thanks for your reply.

    I mean I have got DLP200 and decomposed it into several modules.

    Also it there a tool to convert ordinary a bunch of jpeg pictures into dbi format? Since I need to convert 960 pictures, that's too long using the development software to convert one by one.

    Thanks,

    Haixing

  • Hello Haixing,

    The JPEG is not good format for patterns. You can consider having you your patterns in BMP format. Here is the link talks about converting BMP to DBI format

    http://e2e.ti.com/support/dlp__mems_micro-electro-mechanical_systems/f/387/p/113085/647380.aspx#647380

    Regards,

    Sanjeev

  • Dear Sanjeev

    Thanks. I have converted the file to RAW format. The DownloadImagesDriverC.exe returns "Function did not return STAT_OK, ERROR running WriteImageOrderTable return code =3". I checked the dbi files come with the sample and notice there is "DBI xxxxxxx(not sure how many bits exactly)" at the top of the file. May I ask how many bits should that be?

    Haixing

  • Hello Haixing,

    You are correct, DBI format uses header at the top, since your RAW format doesn't have the header you are seeing the failure. The DBI format was mostly used in context with the LightCommander GUI Control software framework. I suggest you to not to use this API for downloading the images. 

    There is another API which you can use to download the RAW file directly the API is called DLP_Img_DownloadBitplanePatternToExtMem, using which you can download directly. Let me know if you still face any issues.

    Regards,

    Sanjeev

  • Dear Sanjeev

    Thanks for your reply.

    I have seen a post saying the parameter of DLP_Img_DownloadBitplanePatternToExtMem function is

    const UINT8 *pBuf, pointer to the array of the single plane (of size 98304)

    UINT32 tot_bytes, size of the array 98304

    UINT bpnum0b , 0based bit number.

    # I am not quite sure what to fill in bpnum0b.

    # Also the 1024*768 file I got is 787510 Bytes for bmp, 1572872 Bytes for raw. I don't know what is going wrong. (I generated using Matlab)

    # I removed the light source and power supply module, will the DMD still work? (I believe the controller board and DMD are powered)

    Thanks,

    Best regards,

    Haixing

  • Hi Haixing,

    #1. bpnum0b is the pattern storage index in the static memory. This information is useful or referred in the ImageOrderLUT API. For instance, the static memory can store upto 960 1bpp patterns or 120 8bpp patterns.

    For example - if you call API with number bpnum0b  = 50 means the downloaded bitplane is going to be stored at 50th location.

    Now, if you want to display on the DMD, then you can send the ImageOrderLUT API pointing to this address.

    #2. Without looking at your logic it is not possible to tell what is going wrong.

    #3. Yes. DMD still work.

    Regards,

    Sanjeev

  • Hi Sanjeev

    Thanks for your reply.

    For bpnum0b, does this start from 0 or from 1? If I load image0 in location 0, image1 in location 1,  image2 in location 2, should they appear in the order of image0 -> image 1 -> image 2?

    I have got the images size right now.

    Best regards,

    Haixing

     

  • Hello Haixing,

    It starts from 0.

    Yes you are correct, image0 at location 0, image1 at location 1,... so on

    Regards,

    Sanjeev

  • Hi Sanjeev

    Thank you.

    I changed the "DownloadImageDriverC" sample code and used DLP_Img_DownloadBitplanePatternToExtMem for several images and DLP_Display_DisplayPatternAutoStepRepeatForMultiplePasses . However after I ran the program, I cannot see the change in DMD (without the projection lens).  Should I see some difference(i.e. look through to the place where the light engine was if I load a white image?) by bare eyes?

    Do I have to call any other functions to get mirror work and what is the frequency of the mirror change(is this set by PWM functions)? What is the minimum mirror change frequency or can I freeze at one frame(so that I can see if my program works) and how can I set it?

    Thanks,

    Best regards,

    Haixing

  • Hi Haixing,

    Is your board has the USB interface available? If so first you need to configure the DLPC200 via LightCommander GUI control software. The most important part is downloading the sequence and other register settings of the chip, the whole configuration is done offline GUI software, only after downloading it is ready to display.

    Also, no need additional illumination, you can look bare on the DMD and you should see the image.

    You may want to go through this E2E thread to get more idea on the basic configuration.

    http://e2e.ti.com/support/dlp__mems_micro-electro-mechanical_systems/f/387/t/255694.aspx

    Regards,

    Sanjeev

  • Hi Sanjeev

    Thank for your reply.

    Yes, I programmed using GUI interface and then ran the listed functions afterwards via USB prot.

    I did the same thing as what is suggested in the post but no luck.

    At gui startup, the status check function returns:

    DLP_Status_GetBISTfail 0 

    DLP_Status_GetOverallLEDlampLitState 0

    DLP_Status_GetLEDdriver Fault 1

    DLP_Status_GetOverallLEDdriverTempTimeoutState 0

    DLP_Status_GetLEDcommStatus 1

    DLP_Status_GetFlashProgrammingMode 0

    DLP_Status_GetSeqRunState 1

    DLP_Status_GetInitFromParallelFlashFail 4.

    The DMD looks just like a mirror  and nothing changed when I look into the projection window without projection lens. Even I ran the sample there was no change in DMD. Is there any interlock mechanism which could prevent DMD from working properly and is there any machine self-check function available (i.e. mirror movement at startup)?

    Thanks,

    Best regards,

    Haixing

  • Hello Haixing,

    It appears to me that there is a problem with the DMD interface. You also need to make sure the POWERGOOD line to the DLPC200 is HIGH.

    After the startup status function check, using GUI, can you try DMD park & un-park operation? You should see by default there is checker board pattern displayed after you are able to un-park the DMD successfully.

    From the GUI, you can create and run the batch file, to read the DMD error status like 

    DLP_Status_GetDMDcommStatus

    DLP_Status_GetDADfault

    ReadReg 0x0C9C

    About how to create a batchfile you can refer to user guide, also this thread http://e2e.ti.com/support/dlp__mems_micro-electro-mechanical_systems/f/387/t/225291.aspx

    Regards,

    Sanjeev

  • Hi Sanjeev

    Thank you for your reply.

    #For the first one, I am not quite sure how to test if the PWR_GOOD is high or not. (Two green lights between park/run software reset/ hardware reset are on) I just removed the light engine power supply module with the light engine.

    #I cannot see any movement on DMD

    #DLP_Status_GetDMDcommStatus 0x00

    DLP_Status_GetDADfault 0x01  <- I think DLPA200 driver is in faulty condition?

    ReadReg 0x0C9C 0x00

    Thanks,

    Best regards,

    Haixing

  • Hi Sanjeev

    I was wondering if you have any clue based on the error code above(in case you missed the post)?

    Thanks

    Best regards,

    Haixing

  • Hello Haixing,

     Thank you for reminding. Sorry, you are correct, we missed reposing to this thread. 

    OK. 

    Can you please read another register

    ReadReg 0x0C84

    From your earlier log it appears to me there is problem with initializing the DLPA200 device. Here the DLPC200 as a SPI master and DLPA200 as a SPI slave attempts to initialize during the normal power-on initialization. If any problem occurs in this step then it will report the fault. If the register 0x0C84 also reads it as 0x00 then definitely it is a SPI i/f problem b/w DLPC200 and DLPA200. Also look for the proper voltages input at the DLPA200 device.

    Regards,

    Sanjeev


  • Dear Sanjeev

    Thanks for your reply.

    ReadReg 0x0C84 Register: 0x00000092.

    The illumination and its power supply module is removed. The system is powered solely on the 5V DC from the original supply located after the main switch around the optics. May I ask how to measure the voltage of DLPA200 device, is there any schematics I can look at? Thanks,

    Best regards,

    Haixing

  • Hello Haixing,

    Can you also read ReadReg 0x0C88.

    One more question, is it your self designed board? if it is not, please mention which EVM are you using. We can then determine which schematics.

    Please send the setup picture.

    From your above register value, 0x0C84 = 0x092, I can tell the spi i/f between DLPA200 to DLPC200 looks OK. DLPC200 able to detect DLPA200 properly.

    Now the problem could be one of the following -

    1.  Check if the DMD board is properly connected to the DLPC200 controller board.

    or

     2. At the beginning I suggested you to check "It appears to me that there is a problem with the DMD interface. You also need to make sure the POWERGOOD line to the DLPC200 is HIGH." Did you try this?

    Regards,

    Sanjeev

  • Dear Sanjeev

    Thanks for your reply.

    ReadReg 0x0C88 returns 0x0000001F

    It is the controller board inside the DLP Light Commander.

    I am not quite sure which EVM it is.

    I did not check PowerGood Signal because I don't know where I can measure the voltage.

    Best regards,

    Haixing

  • Sorry, I clicked "suggest answer" by mistake. Hope you will not miss the post.

  • Hello Haixing,

    Thanks for posting the pictures. It is the original DLP LightCommander EVM launched at beginning for supporting DLP5500 chipset evaluation.

    Also thanks for sharing the register value; ReadReg 0x0C88 returns 0x0000001F

    Clearly, it is a problem with DLPC200 not able to detect or recognize the DLP5500 DMD part sitting on the DMD board.

    The problem could be one of the below two -

    1. DLP main board not properly interfacing with DMD board. You can try inserting this board firmly again, make sure not loose contact.

    2. The DMD is not properly seated on the DMD board. Try the suggestion discussed in the E2E forum http://e2e.ti.com/support/dlp__mems_micro-electro-mechanical_systems/f/387/t/205459.aspx

    Regards,

    Sanjeev


  • Dear Sanjeev

    Thank you so much.

    It eventually worked!

    Best regards,

    Haixing

  • Hi Haixing,

    Welcome.

    Good luck with your experiment.

    Regards,

    Sanjeev