微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > 手机基带和硬件设计讨论 > M0直接驱动OV7725,出现图像问题

M0直接驱动OV7725,出现图像问题

时间:10-02 整理:3721RD 点击:
用M0配置OV7725 ,然后sensor数据直接给TFT显示!图像只看到发光的物体,而且偏绿~~~弄了三天找不出原因,发上来请大家帮帮忙!
下面是OV7725配置
const  char change_reg[CHANGE_REG_NUM][2]=
{       
  /*òÔÏÂÎaOV7725QVGA RGB5652Îêy*/
  {0x32,0x00},
  {0x2a,0x00},
  {0x11,0x01},
  {0x12,0x46},//QVGA RGB565
  {0x12,0x46},
  {0x42,0x7f},
  {0x4d,0x00},//0x09
  {0x63,0xf0},
  {0x64,0xff},
  {0x65,0x20},
  {0x66,0x00},
  {0x67,0x00},
  {0x69,0x5d},  

  {0x13,0xff},
  {0x0d,0x41},//PLL
  {0x0f,0xc5},
  {0x14,0x11},
  {0x22,0xff},//7f
  {0x23,0x03},
  {0x24,0x34},
  {0x25,0x3c},
  {0x26,0xa1},
  {0x2b,0x00},
  {0x6b,0xaa},
  {0x13,0xff},
  {0x90,0x0a},//
  {0x91,0x01},//
  {0x92,0x01},//
  {0x93,0x01},
  
  {0x94,0x5f},
  {0x95,0x53},
  {0x96,0x11},
  {0x97,0x1a},
  {0x98,0x3d},
  {0x99,0x5a},
  {0x9a,0x1e},
  
  {0x9b,0x28},//set luma
  {0x9c,0x25},//set contrast
  {0xa7,0x65},//set saturation  
  {0xa8,0x65},//set saturation
  {0xa9,0x80},//set hue
  {0xaa,0x80},//set hue
        {0xab,0x06},//set luma
  
  {0x9e,0x81},
  {0xa6,0x06},
  {0x7e,0x0c},
  {0x7f,0x16},
  {0x80,0x2a},
  {0x81,0x4e},
  {0x82,0x61},
  {0x83,0x6f},
  {0x84,0x7b},
  {0x85,0x86},
  {0x86,0x8e},
  {0x87,0x97},
  {0x88,0xa4},
  {0x89,0xaf},
  {0x8a,0xc5},
  {0x8b,0xd7},
  {0x8c,0xe8},
  {0x8d,0x20},
  {0x33,0x00},
  {0x22,0x99},
  {0x23,0x03},
  {0x4a,0x00},
  {0x49,0x13},
  {0x47,0x08},
  {0x4b,0x14},
  {0x4c,0x17},
  {0x46,0x05},
  {0x0e,0x75},
  {0x0c,0x50},
  {0x00,0xf0},
  {0x29,0x50},
  {0x2C,0x78},

};

这是TFT的配置
void LCD_WR_DATA16(uint16_t data)//D′»y′æÆ÷êy¾Y
{
     LCD_RD_H();
     LCD_RS_H();
     LCD_CS_L();
     
      GPIOA->ODR=(GPIOA->ODR&0XFF00)| (uint8_t )(data>>8);
     LCD_WR_L();
     LCD_WR_H();
     GPIOA->ODR=(GPIOA->ODR&0XFF00)|(uint8_t )data;     
     LCD_WR_L();
     LCD_WR_H();
     
     LCD_CS_H();
  
}
void LCD_WR_REG16(uint16_t index)//D′»y′æÆ÷Ãüáî
{
     LCD_RD_H();
     LCD_RS_L();
     LCD_CS_L();
     
     GPIOA->ODR=(GPIOA->ODR&0XFF00)| (uint8_t )(index>>8);
     LCD_WR_L();
     LCD_WR_H();
     GPIOA->ODR=(GPIOA->ODR&0XFF00)|(uint8_t )index;     
     LCD_WR_L();
     LCD_WR_H();
     
     LCD_CS_H();
}
uint16_t LCD_RD_DATA16(void)//¶á»y′æÆ÷êy¾Y
{
     uint16_t data;
     LCD_WR_H();
     LCD_RS_H();
     LCD_GPIO_INPUT();
     LCD_CS_L();

     LCD_RD_L();
     
     LCD_RD_H();
     data=(0x00ff&DATA_LCD_PIN);
     data=data<<8;
     
         
     LCD_RD_L();
     
     LCD_RD_H();
     data|=(0x00ff&DATA_LCD_PIN);
     
     LCD_CS_H();
     LCD_GPIO_OUTPUT();
     return data;
  
}
void LCD_WR_REG(uint16_t index,uint16_t data)
{
     LCD_WR_REG16(index);
     LCD_WR_DATA16(data);
}

void LCD_Init(void)
{   
        LCD_GPIO_OUTPUT();
        LCD_Set_GPIO_Config();
//        LCD_BL_L();
        LCD_RST_H();
        delay_ms(500);
        
        CMOS_CS_H();
        PCLK_ON_L();
        
        LCD_RST_L();
        delay_ms(1000);
        LCD_RST_H();
        
     
//        LCD_WR_REG(0x00E3,0x3008);        
//        LCD_WR_REG(0x00E7,0x0012);
//        LCD_WR_REG(0x00Ef,0x1231);         // Set the internal timing;  
     LCD_WR_REG(0x00E5,0x8000);   
        //initializing funciton 1
         LCD_WR_REG(0x00,0x0001);
         LCD_WR_REG(0x01, 0x0000); // set SS and SM bit
         LCD_WR_REG(0x02, 0x0700); // set 1 line inversion
        // LCD_WR_REG(0x03, 0x10B0); // set GRAM write direction and BGR=1.
#if   ID_AM==000      
             LCD_WR_REG(0x0003,0x1000);//ÆáÄ»Dy×a¿ØÖÆ TFM=0,TRI=0,SWAP=1,16 bits system interface  swap RGB to BRG£¬′Ë′|ORGoíHWM Îa0
#elif ID_AM==001        
             LCD_WR_REG(0x0003,0x1008);      
#elif ID_AM==010  
             LCD_WR_REG(0x0003,0x1010);        
#elif ID_AM==011
             LCD_WR_REG(0x0003,0x1018);
#elif ID_AM==100  
             LCD_WR_REG(0x0003,0x1020);      
#elif ID_AM==101  
             LCD_WR_REG(0x0003,0x1028);      
#elif ID_AM==110  
             LCD_WR_REG(0x0003,0x1030);      
#elif ID_AM==111  
             LCD_WR_REG(0x0003,0x1038);
#endif   
         LCD_WR_REG(0x04, 0x0000); // Resize register
         LCD_WR_REG(0x08, 0x0404); // set the back porch and front porch
         LCD_WR_REG(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0]
         LCD_WR_REG(0x0A, 0x0000); // FMARK function
        // LCD_WR_REG(0x0C, 0x0000); // RGB interface setting
        // LCD_WR_REG(0x0D, 0x0000); // Frame marker Position
        // LCD_WR_REG(0x0F, 0x0000); // RGB interface polarity
//Power On sequence //
         LCD_WR_REG(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
         LCD_WR_REG(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
         LCD_WR_REG(0x12, 0x0000); // VREG1OUT voltage
         LCD_WR_REG(0x13, 0x0000); // VDV[4:0] for VCOM amplitude
//         LCD_WR_REG(0x07, 0x0001); //
                 
         delay_ms(1000); // Dis-charge capacitor power voltage
         
         LCD_WR_REG(0x10, 0x17B0); // SAP, BT[3:0], AP, DSTB, SLP, STB
         LCD_WR_REG(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
         delay_ms(1000); // Delay 50ms
        
         LCD_WR_REG(0x12, 0x013a); // Internal reference voltage= Vci;
         delay_ms(1000); // Delay 50ms
         LCD_WR_REG(0x13, 0x1a00); // Set VDV[4:0] for VCOM amplitude
         LCD_WR_REG(0x29, 0x000C); // Set VCM[5:0] for VCOMH
//         LCD_WR_REG(0x2B, 0x000f); // Set Frame Rate
         delay_ms(1000); // Delay 50ms
         
#if   ID_AM==000         
             LCD_WR_REG(0x0020,0x00ef);//GRAMˮƽÆeê¼Î»ÖÃ
             LCD_WR_REG(0x0021,0x013f);      
#elif ID_AM==001
             LCD_WR_REG(0x0020,0x00ef);
             LCD_WR_REG(0x0021,0x013f);      
#elif ID_AM==010
             LCD_WR_REG(0x0020,0x0000);
             LCD_WR_REG(0x0021,0x013f);      
#elif ID_AM==011
             LCD_WR_REG(0x0020,0x0000);
             LCD_WR_REG(0x0021,0x013f);      
#elif ID_AM==100
             LCD_WR_REG(0x0020,0x00ef);
             LCD_WR_REG(0x0021,0x0000);      
#elif ID_AM==101  
             LCD_WR_REG(0x0020,0x00ef);
             LCD_WR_REG(0x0021,0x0000);      
#elif ID_AM==110
             LCD_WR_REG(0x0020,0x0000);
             LCD_WR_REG(0x0021,0x0000);      
#elif ID_AM==111
             LCD_WR_REG(0x0020,0x0000);
             LCD_WR_REG(0x0021,0x0000);         
#endif  
// ----------- Adjust the Gamma Curve ----------//
                LCD_WR_REG(0x0030,0x0000);
                LCD_WR_REG(0x0031,0x0505);
                LCD_WR_REG(0x0032,0x0004);
                LCD_WR_REG(0x0035,0x0006);
                LCD_WR_REG(0x0036,0x0707);
                LCD_WR_REG(0x0037,0x0105);
                LCD_WR_REG(0x0038,0x0002);
                LCD_WR_REG(0x0039,0x0707);
                LCD_WR_REG(0x003C,0x0704);
                LCD_WR_REG(0x003D,0x0807);
//------------------ Set GRAM area ---------------//
         LCD_WR_REG(0x0050, 0x0000); // Horizontal GRAM Start Address
         LCD_WR_REG(0x0051, 0x00EF); // Horizontal GRAM End Address
         LCD_WR_REG(0x0052, 0x0000); // Vertical GRAM Start Address
         LCD_WR_REG(0x0053, 0x013F); // Vertical GRAM Start Address
         LCD_WR_REG(0x0060, 0x2700); // Gate Scan Line
         LCD_WR_REG(0x0061, 0x0001); // NDL,VLE, REV
         LCD_WR_REG(0x006A, 0x0000); // set scrolling line
//-------------- Partial Display Control ---------//
         LCD_WR_REG(0x80, 0x0000);
         LCD_WR_REG(0x81, 0x0000);
         LCD_WR_REG(0x82, 0x0000);
         LCD_WR_REG(0x83, 0x0000);
         LCD_WR_REG(0x84, 0x0000);
         LCD_WR_REG(0x85, 0x0000);
//-------------- Panel Control -------------------//
         LCD_WR_REG(0x90, 0x0010);
         LCD_WR_REG(0x92, 0x0000);
         LCD_WR_REG(0x93, 0x0003);
         LCD_WR_REG(0x95, 0x0110);
         LCD_WR_REG(0x97, 0x0000);
         LCD_WR_REG(0x98, 0x0000);
         LCD_WR_REG(0x07, 0x0173); // 262K color and display ON   0133
         LCD_Clear(0x0000);
         delay_ms(1000); // Delay 5ms
              //  LCD_Clear(0x001f);
        // CMOS_CS_L();
        // PCLK_ON_H();
  
}

嘻嘻,我们家有OV7725.qq 1399858837

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top