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.

DLP3010: Write Display Image Rotation

Part Number: DLP3010

Hi there,

What I'd like to achieve is a minus 90deg image rotation through i2c.

I'm using the dlpu020a.pdf Software Programmer's Guide provided by TI.

In the section Write Display Image Orientation [register 14h] (page 30), it says that the data I've to send is 0x01.

It also says (page 31) that "Image rotation is allowed while keystone correction is enabled". 

I then go to the Write Keystone Correction Control section [register 88h] (page 53) and I see that I've to set Byte 1 to 0x01 to enable it.

So If I understood, to perform a minus 90deg rotation, I should do this:

  1. Enable keystone correction: i2cset -y 4 0x1B 0x88 0x01
  2. Write image orientation:        i2cset -y 4 0x1B 0x14 0x01

Note: I'm using the i2c-tools to send i2c command. 0x1B is the device address and 4 is the i2c bus.

The point is it doesn't work for me. I get a glitchy image after doing this..

Do you know what I'm doing wrong? 

Kind regards,

  • Hello Nova17,

    Thank you for your interest in our DLP Technology.

    In general the width and height values of the display image has to be swapped when using the portrait mode or the -90deg image rotation.

    Are you changing the display size before rotating the image ?

    Is the image getting displayed correctly when you only rotate the image without keystone ?

    Thanks,

    Nadine
  • Hi Nadine,

    Thanks for replying.

    Here is what I do using an Arduino Uno:

    ----------------------------------------------------------------------------------------------------------------------------
    #include <Wire.h>

    void setup() {

    Wire.begin();
    Wire.setClock(100000L); //100 KHZ

    /////////////////// Write Display Size ///////////////////
    // DEVICE
    Wire.beginTransmission(0x1B);

    // REGISTER
    Wire.write(0x12);

    //DATA

    // Swap width and height values of the display image
    //720
    Wire.write(0xD0);
    Wire.write(0x02);

    //1280
    Wire.write(0x00);
    Wire.write(0x05);

    Wire.endTransmission();

    /////////////////// Write Keystone Correction Control ///////////////////

    Wire.beginTransmission(0x1B);

    // REGISTER
    Wire.write(0x88);

    //DATA
    Wire.write(0x01); // Enable Keystone Correction

    Wire.endTransmission();

    /////////////////// Write Display Image Orientation ///////////////////

    Wire.beginTransmission(0x1B);

    // REGISTER
    Wire.write(0x14);

    //DATA
    Wire.write(0x01); // -90deg Rotation

    Wire.endTransmission();

    }

    void loop() {


    }

  • Hello Nova17,

    I listed the required I2C commands for doing an successful image rotation with a splash image.

    Swap Width and Height:

    Write Cmd:DisplaySizeNew, addr:36, subAddr:12 00 00 00 00 d0 02 00 05 Write(OK)

    Rotate Image by -90 degree:

    Write Cmd:DisplayImageOrientation, addr:36, subAddr:14 07 Write(OK)

    Execute Splash Image (this command has to be send when using a splash image)
     
    Write Cmd:SplashScreenExecute, addr:36, subAddr:35 Write(OK)

    Please let me know if that is working for you.

    Best regards,

    Nadine

  • Thank you so much! It works!

    I was only writing 4 bytes into the register. The dlpu020a.pdf Programmer's Guide has not been updated. That's why I was struggling and wasting so much time on it.

    Peace