Lead

Aug 19 11 9:44 AM

Tags : :

Here is some sample code to flood the screen of a Displaytech DT022ATFT using an Atmel ATXmega64A3 microcontroller. Simple Initialization code was provided by Russell.

void TFT___WriteCommand(unsigned short commandToWrite)
{
    //    WRITE COMMAND 16 BIT: SENDS 0x00 BEFORE COMMAND
    /*
    PORTF.OUT &= ~BM(LCD_RS);                    // set Data/Command Select (DC or RS) pin low for a command   
    PORTB.OUT &= ~BM(LCD_WR);                    // set write signal low. writes data at the rising edge
    PORTB.OUT |= BM(LCD_RD);                    // set read signal high   
    PORTA.OUT = (commandToWrite >> 8);                            // set data output to command   
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    NOP();                                        // 31.25 ns delay @ 32 Mhz       
    PORTB.OUT |= BM(LCD_WR);                    // set write signal back high to end. latches data here at rising edge of WR
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    PORTF.OUT |= BM(LCD_RS);                    // set Data/Command Select (DC or RS) pin
    */
   
    PORTF.OUT &= ~BM(LCD_RS);                    // set Data/Command Select (DC or RS) pin low for a command   
    PORTB.OUT &= ~BM(LCD_WR);                    // set write signal low. writes data at the rising edge
    PORTB.OUT |= BM(LCD_RD);                    // set read signal high   
    PORTA.OUT = commandToWrite;                    // set data output to command   
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    NOP();                                        // 31.25 ns delay @ 32 Mhz       
    PORTB.OUT |= BM(LCD_WR);                    // set write signal back high to end. latches data here at rising edge of WR
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    PORTF.OUT |= BM(LCD_RS);                    // set Data/Command Select (DC or RS) pin high   
       
    return;
}


void TFT___WriteData(unsigned short dataToWrite)
{
    //    WRITE 16 BIT DATA
    /*
    PORTF.OUT |= BM(LCD_RS);                    // set Data/Command Select (DC or RS) pin high for data   
    PORTB.OUT &= ~BM(LCD_WR);                    // set write signal low. writes data at the rising edge
    PORTB.OUT |= BM(LCD_RD);                    // set read signal high
    PORTA.OUT = dataToWrite >> 8;                            // set data output to command
   

    NOP();                                        // 31.25 ns delay @ 32 Mhz
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    PORTB.OUT |= BM(LCD_WR);                    // set write signal back high to end. latches data here at rising edge of WR
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    NOP();                                        // 31.25 ns delay @ 32 Mhz   
    PORTF.OUT |= BM(LCD_RS);                    // set Data/Command Select (DC or RS) pin high
    */
   
    PORTF.OUT |= BM(LCD_RS);                    // set Data/Command Select (DC or RS) pin high for data   
    PORTB.OUT &= ~BM(LCD_WR);                    // set write signal low. writes data at the rising edge
    PORTB.OUT |= BM(LCD_RD);                    // set read signal high
    PORTA.OUT = dataToWrite;                    // set data output to command

    NOP();                                        // 31.25 ns delay @ 32 Mhz
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    PORTB.OUT |= BM(LCD_WR);                    // set write signal back high to end. latches data here at rising edge of WR
    NOP();                                        // 31.25 ns delay @ 32 Mhz
    NOP();                                        // 31.25 ns delay @ 32 Mhz   
    PORTF.OUT |= BM(LCD_RS);                    // set Data/Command Select (DC or RS) pin high   
       
    return;
}   


void TFT___Initialize(void)
{
    byte i = 0;
   
    PORTB.OUT |= BM(LCD_RD);                    // set read signal high
    PORTB.OUT &= BM(LCD_WR);                    // set write low
   
    // hardware reset
    PORTF.OUT |= BM(LCD_RESET);                    // set reset high
    for (i = 0; i < 100; i++) _delay_ms(1);        // for 100 ms
    PORTF.OUT &= ~BM(LCD_RESET);                // set reset low
    for (i = 0; i < 100; i++) _delay_ms(1);        // for 100 ms
    PORTF.OUT |= BM(LCD_RESET);                    // set reset high
    for (i = 0; i < 100; i++) _delay_ms(1);   

    /*
    ////software reset
    //TFT___WriteCommand(0x01);    //software reset
    //_delay_ms(200);
    */
   
    TFT___WriteCommand(0x0028);                                                                // display off command   
    //TFT___WriteCommand(0x0038);                                                                // display off command   
    TFT___WriteCommand(0x0011); TFT___WriteData(0x0000);                                    // exit sleep mode
    TFT___WriteCommand(0x00C0); TFT___WriteData(0x0026); TFT___WriteData(0x0004);            //power control 1
    TFT___WriteCommand(0x00C1); TFT___WriteData(0x0004);                                    //power control 2
    TFT___WriteCommand(0x00C5); TFT___WriteData(0x0034); TFT___WriteData(0x0040);            //VCOM control 1
    TFT___WriteCommand(0x0036); TFT___WriteData(0x0088);                                    //memory access control = BGR
    TFT___WriteCommand(0x00B1); TFT___WriteData(0x0000); TFT___WriteData(0x0018);            //frame rate control
    TFT___WriteCommand(0x00B6); TFT___WriteData(0x000A); TFT___WriteData(0x00A2);    //display function control
    TFT___WriteCommand(0x00C7); TFT___WriteData(0x00C0);                            //VCOM control 2
    TFT___WriteCommand(0x003A); TFT___WriteData(0x0055);                //pixel format = 16 bit per pixel
   
    TFT___WriteCommand(0x002A);                 //start 0x0000
   
    TFT___WriteData(0x0000);                //column address set

    TFT___WriteData(0x0000);        // ********************************************************************           
    TFT___WriteData(0x0000);               
    TFT___WriteData(0x00EF);                //end 0x00EF
   

   
   
    TFT___WriteCommand(0x002B); TFT___WriteData(0x0000);                //page address set
   
    TFT___WriteData(0x0000);                //start 0x0000 ******************************************************************************
    TFT___WriteData(0x0001);               
    TFT___WriteData(0x003F);                //end 0x013F
   
   
   
    TFT___WriteCommand(0x00E0);    TFT___WriteData(0x001F);                //positive gamma correction               
                                    TFT___WriteData(0x001B);               
                                    TFT___WriteData(0x0018);               
                                    TFT___WriteData(0x000B);               
                                    TFT___WriteData(0x000F);
                                    TFT___WriteData(0x0009);               
                                    TFT___WriteData(0x0046);               
                                    TFT___WriteData(0x00B5);               
                                    TFT___WriteData(0x0037);               
                                    TFT___WriteData(0x000A);               
                                    TFT___WriteData(0x000C);               
                                    TFT___WriteData(0x0007);
                                    TFT___WriteData(0x0007);               
                                    TFT___WriteData(0x0005);               
                                    TFT___WriteData(0x0000);
                           
                           
    TFT___WriteCommand(0x00E1);    TFT___WriteData(0x0000);                //negative gamma correction               
                                    TFT___WriteData(0x0024);
                                    TFT___WriteData(0x0027);               
                                    TFT___WriteData(0x0004);               
                                    TFT___WriteData(0x0010);               
                                    TFT___WriteData(0x0006);               
                                    TFT___WriteData(0x0039);               
                                    TFT___WriteData(0x0074);               
                                    TFT___WriteData(0x0048);
                                    TFT___WriteData(0x0005);               
                                    TFT___WriteData(0x0013);               
                                    TFT___WriteData(0x0038);               
                                    TFT___WriteData(0x0038);               
                                    TFT___WriteData(0x003A);               
                                    TFT___WriteData(0x001F);   
   
   
    //for (i = 0; i < 100; i++) _delay_ms(1);   
    return;
}


    //    Main Function
    int main(void)
    {
        //INITIALIZATION
        DISABLE_INTERRUPT();
        CONFIG___SystemClock();           
        CONFIG___Ports();

        CONFIG_USARTC0___FTDI_CHA();
        CONFIG_USARTC1___FTDI_CHB();
        CONFIG_USARTD0___AUX();
        CONFIG_USARTF0___WT2();
        CONFIG_USARTE0___WT1();
       
        CONFIG_SPID___SRAM();
        CONFIG___TimerD1();
       
       
        // enable PMIC interrupt level low & medium
        PMIC.CTRL |= PMIC_LOLVLEX_bm | PMIC_MEDLVLEX_bm;
       
                                                  
       

   
    TFT___BeginInterfaceMode();
    TFT___Initialize();
    TFT___WriteCommand(0x002C);                     //Memory Write (0x2C)
    PORTF.OUT |= BM(LCD_RS);                               // set Data/Command Select (DC or RS) pin high for data  

    for(int i=0;i<320;i++)                         
    {

        for(int j=0;j<240;j++)                       //256bytes = 128pixels/line
        {


               PORTA.OUT = 0b10101010;      
               PORTB.OUT &= ~BM(LCD_WR);                              // set write signal low. writes data at the rising edge
               PORTB.OUT |= BM(LCD_WR);                               // set write signal back high to end. latches data here at rising edge of WR
               PORTA.OUT = 0b01010101;
               PORTB.OUT &= ~BM(LCD_WR);                              // set write signal low. writes data at the rising edge
               PORTB.OUT |= BM(LCD_WR);                               // set write signal back high to end. latches data here at rising edge of WR                               
        }
    }   
    TFT___WriteCommand(0x0029);                     //Memory Write (0x2C)

    ENABLE_INTERRUPT();
       
    while (1)       
    {    }
}
   




Thanks again