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.

DLPD4X00KIT: D4100_usb.dll LoadData function clarafication

Part Number: DLPD4X00KIT

Hello, 

In dlpu039a (DLP Discovery 4100 Controller Board API Programmer’s Guide (Rev. A)) under section 6.2.2 the "LoadData" function is described. I have a couple of questions regarding the description of the function.

1. "Data must be in a UCHAR array of size length." What does each UCHAR's value map to in terms of controlling what state the mirror lands to? I know 0xff will land it in the on-state, while 0x00 will load it in the off-state, but loading some value in between seems to give some odd patterns. Is there some documentation that I missed about how this value is converted to command the mirror to land in either the on or off states?

2. "No more than 500 rows can be loaded at a time (96 kb for DLP9500, 51.2 kb for DLP7000, and 64 kb for DLP650LNIR). To load an entire DMD call this function multiple times" If loading a full image to the DMD (say the 0.7 XGA DLP7000 - 768 rows), is there any difference in loading 500 rows, and then the other 268 rows with the second call, or just loading 384 rows and then loading the other 384 rows?

Thanks, 

-Danyal

  • Hello Danyal,

    1.  Regarding 1 -- UCHAR is just a byte array.  Each byte represent 8 bits of row data (i.e. bit 0 - 7).

    So to load one row you would have to have a UCHAR array of length 128 the "length" listed is the length in bytes.  To properly fill a row you must provide 128 bytes of data in a byte array to the function. 

    Therefore, in the byte array a "0" in a particular bit position represents the mirror pointing away from the illumination corner (i.e. "off") and a "1" represents the mirror pointing toward the illumination corner (i.e. "on").  You can provide multiple rows worth of data by providing a byte array with (bytes/row)*(# of rows). 

    For for 384 rows you would provide  a byte array with 128*384 = 49,152 elements (i.e. 393,216 bits).  NOTE:  This is because the DLPC410 only understands binary patterns.  Each byte does NOT represent a grayscale value.

    Here is the mapping -- Simply look at the bitmap and pack the rows as follows: 

    Bits 0-7 --> Byte 0, Bits 8-15 --> Byte 1, Bits 16-23 --> Byte 2, . . . , Bits 1,016-1,023 --> Byte 127 [NOTE:  All numbers here are 0 based]. Repeat for each row

    Then just concatenate the Rows the same way -- Row 0, Row 1, Row 2, . . . , Row 383.  This should give you a byte array (UCHAR) with 49,152 bytes.

    2. I would use the symmetric method, top half, then bottom half (i.e. 384 rows per load).  

    Fizix

  • Hi Fizix,

    Thanks for the clarification.

    -Danyal