Other Parts Discussed in Thread: DLP4500,
Our intent with DLPC350 is to send formated patterns to DLP4500 and to reach the highest possible frame rate in the mode described just below :
Page 34 of dlpu010g.pdf (DLPC350 Programmer’s Guide User's Guide) :
"In pattern display mode, the DLPC350 provides a high-speed, pixel accurate 912 × 1140 resolution up to 120 Hz that bypasses the video processing and image enhancement functions. This mode supports data input through the DLPC350 24-bit RGB or FPD-link interfaces and flash memory. This functionality is designed for techniques such as structured light, additive manufacturing, or digital exposure. The DLPC350 can display a set of patterns and signal a camera to capture when these patterns are displayed."
Page 28 of dlpc350.pdf :
"When accurate pattern display is needed, the native 912 × 1140 input resolution pattern has a one-to-one association with the corresponding micromirror on the DMD. The DLPC350 controller enables high-speed display of these patterns."
So I use DLPC350 in Pattern Display Mode to send input vectors as fast as possible to DMD.
- What's the highest frame rate I can reach? 2880 Hz (according to page 34) ?
Input vectors enter through RGB interface, and the 2 least significant bits are unused.
- What’s the point of having a 30 bits interface if I can only use 24 bits ?
After the falling_edge of INIT_DONE (following the INIT_BUSY time described page 45), I send to DLPC350 the following i2C commands :
x"348004" => write_address_i2c & write @addr= 00h & data= 04h to set the input source = RGB 24 bits.
- Should I put 30 bits and then the 2 LSB are ignored with the pattern display mode?
page 38 of dlpc350.pdf : "The parallel RGB port can support up to 30 bits in video mode. In pattern mode, the upper 8-bits of each color convert the 30-bit input into a 24-bit RGB input."
- => It's not clear to me if input source should be set to 24 or 30 bits?
x"34E640" => write_address_i2c & write @addr= 66h & data= 40h
x"34E611" => write_address_i2c & write @addr= 66h & data= 11h to set expo time to 4011h NB : if previous address = current address, I send directly the data
x"34E641" => write_address_i2c & write @addr= 66h & data= 40h
x"34E61B" => write_address_i2c & write @addr= 66h & data= 11h to set frame period to 411Bh NB : if previous address = current address, I send directly the data
x"34E901" => write_address_i2c & write @addr= 69h & data= 01h to set Pattern display mode (high-speed, pixel accurate 912 × 1140 resolution, page 34)
x"34EF00" => write_address_i2c & write @addr= 6Fh & data= 00h to set Pattern source = 24 bits RGB interface
x"34F000" => write_address_i2c & write @addr= 70h & data= 00h to set Pattern Trigger Mode 0: VSYNC triggers the pattern display sequence
x"34FDDD" => write_address_i2c & write @addr= 7Dh & data= DDh (dummy data) to validate the configuration
x"357D" => read_address_i2c & read @addr= 7Dh to check that the configuration is valid
Then, if configuration is valid, send x"34E502" to start transfer.
- Is my configuration accurate?
- Do I miss something?
- Do I need to address anything else, or change any value I sent?
Then, I start to send data, 24 bits parallel, using P1_HSYNC and P1_VSYNC to have horizontal and vertical synchronization and respecting source input blanking described page 21 of dlpc350.pdf.
During preliminary debug, I can use the following commands to check :
34 | 8A | 04 | set Internal Test Patterns Select : diagonal lines
34 | 94 | 00 | DMD unpark
34 | 94 | 01 | DMD park
34 | 81 | 00 |
35 | 01 | | read received format
34 | FE | | check Input Display Resolution
- Can I use other registers to help me during debug?
- What should I do with the external flash?
Page 44 : "The DLPC350 controller boots-up from external flash. After the DLPC350 controller boots, it:".
- Do I have to program anything into the flash before system starts?
Best regards
Nicolas Marnat