新手入门
- 积分
- 18
- 金钱
- 18
- 注册时间
- 2018-5-20
- 在线时间
- 4 小时
|
OV7725例程里设置分辨率的函数如下:
[mw_shl_code=applescript,true]//设置图像输出窗口
//width:输出图像宽度,<=320
//height:输出图像高度,<=240
//mode:0,QVGA输出模式;1,VGA输出模式
//QVGA模式可视范围广但近物不是很清晰,VGA模式可视范围小近物清晰
void OV7725_Window_Set(u16 width,u16 height,u8 mode)
{
u8 raw,temp;
u16 sx,sy;
if(mode)
{
sx=(640-width)/2;
sy=(480-height)/2;
SCCB_WR_Reg(COM7,0x06); //设置为VGA模式
SCCB_WR_Reg(HSTART,0x23); //水平起始位置
SCCB_WR_Reg(HSIZE,0xA0); //水平尺寸
SCCB_WR_Reg(VSTRT,0x07); //垂直起始位置
SCCB_WR_Reg(VSIZE,0xF0); //垂直尺寸
SCCB_WR_Reg(HREF,0x00);
SCCB_WR_Reg(HOutSize,0xA0); //输出尺寸
SCCB_WR_Reg(VOutSize,0xF0); //输出尺寸
}
else
{
sx=(320-width)/2;
sy=(240-height)/2;
SCCB_WR_Reg(COM7,0x46); //设置为QVGA模式
SCCB_WR_Reg(HSTART,0x3f); //水平起始位置
SCCB_WR_Reg(HSIZE, 0x50); //水平尺寸
SCCB_WR_Reg(VSTRT, 0x03); //垂直起始位置
SCCB_WR_Reg(VSIZE, 0x78); //垂直尺寸
SCCB_WR_Reg(HREF, 0x00);
SCCB_WR_Reg(HOutSize,0x50); //输出尺寸
SCCB_WR_Reg(VOutSize,0x78); //输出尺寸
}
raw=SCCB_RD_Reg(HSTART);
temp=raw+(sx>>2);//sx高8位存在HSTART,低2位存在HREF[5:4]
SCCB_WR_Reg(HSTART,temp);
SCCB_WR_Reg(HSIZE,width>>2);//width高8位存在HSIZE,低2位存在HREF[1:0]
raw=SCCB_RD_Reg(VSTRT);
temp=raw+(sy>>1);//sy高8位存在VSTRT,低1位存在HREF[6]
SCCB_WR_Reg(VSTRT,temp);
SCCB_WR_Reg(VSIZE,height>>1);//height高8位存在VSIZE,低1位存在HREF[2]
raw=SCCB_RD_Reg(HREF);
temp=((sy&0x01)<<6)|((sx&0x03)<<4)|((height&0x01)<<2)|(width&0x03)|raw;
SCCB_WR_Reg(HREF,temp);
SCCB_WR_Reg(HOutSize,width>>2);
SCCB_WR_Reg(VOutSize,height>>1);
SCCB_RD_Reg(EXHCH);
temp = (raw|(width&0x03)|((height&0x01)<<2));
SCCB_WR_Reg(EXHCH,temp);
}[/mw_shl_code]
函数通过设置HSTART(水平起始位置) HSIZE(水平尺寸)VSTRT(垂直起始位置)VSIZE(垂直寸) HREF HOutSize,VoutSize,EXHCH几个寄存器来设置分辨率。在QVGA,320*240格式下,几个寄存器的值为:HSTART:252 HISE:80 VSTRT:3 VSIZE:120 HREF:0 HOutSize:80 VOutSize:120
看了好久没看懂这几个值为什么这么设置,而对于OV7670摄像头分辨率的设置是这样的
[mw_shl_code=applescript,true]//设置图像输出窗口
//对QVGA设置。
void OV7670_Window_Set(u16 sx,u16 sy,u16 width,u16 height)
{
u16 endx;
u16 endy;
u8 temp;
endx=sx+width*2; //V*2
endy=sy+height*2;
if(endy>784)endy-=784;
temp=SCCB_RD_Reg(0X03); //读取Vref之前的值
temp&=0XF0;
temp|=((endx&0X03)<<2)|(sx&0X03);
SCCB_WR_Reg(0X03,temp); //设置Vref的start和end的最低2位
SCCB_WR_Reg(0X19,sx>>2); //设置Vref的start高8位
SCCB_WR_Reg(0X1A,endx>>2); //设置Vref的end的高8位
temp=SCCB_RD_Reg(0X32); //读取Href之前的值
temp&=0XC0;
temp|=((endy&0X07)<<3)|(sy&0X07);
SCCB_WR_Reg(0X17,sy>>3); //设置Href的start高8位
SCCB_WR_Reg(0X18,endy>>3); //设置Href的end的高8位
}[/mw_shl_code]这里我只知道HREF是显示一行像素点高电平的宽度。可是关于HSTART VSTRT VSTOP的值是如何得到的依然一头雾水。论坛里的朋友有了解的吗。
而且我的OV7725在VGA模式下,输出640*480分辨率下摄像头输出的画面却是这样的,有朋友遇到过这样的情况吗,怎么解决。
中间的一个画面明显错位了。
|
|