请问谁能解释ov7725设置分辨率的这段程序吗。

2019-03-23 15:56发布

  1. //设置图像输出窗口
  2. //width:输出图像宽度,<=320
  3. //height:输出图像高度,<=240
  4. //mode:0,QVGA输出模式;1,VGA输出模式
  5. //QVGA模式可视范围广但近物不是很清晰,VGA模式可视范围小近物清晰
  6. void OV7725_Window_Set(u16 width,u16 height,u8 mode)
  7. {
  8.     u8 raw,temp;
  9.     u16 sx,sy;  
  10.     if(mode)
  11.     {
  12.         sx=(640-width)/2;
  13.         sy=(480-height)/2;
  14.         SCCB_WR_Reg(COM7,0x06);     //设置为VGA模式
  15.         SCCB_WR_Reg(HSTART,0x23);   //水平起始位置
  16.         SCCB_WR_Reg(HSIZE,0xA0);    //水平尺寸
  17.         SCCB_WR_Reg(VSTRT,0x07);    //垂直起始位置
  18.         SCCB_WR_Reg(VSIZE,0xF0);    //垂直尺寸
  19.         SCCB_WR_Reg(HREF,0x00);
  20.         SCCB_WR_Reg(HOutSize,0xA0); //输出尺寸
  21.         SCCB_WR_Reg(VOutSize,0xF0); //输出尺寸
  22.     }
  23.     else
  24.     {
  25.         sx=(320-width)/2;
  26.         sy=(240-height)/2;
  27.         SCCB_WR_Reg(COM7,0x46);     //设置为QVGA模式
  28.         SCCB_WR_Reg(HSTART,0x3f);   //水平起始位置
  29.         SCCB_WR_Reg(HSIZE, 0x50);   //水平尺寸
  30.         SCCB_WR_Reg(VSTRT, 0x03);   //垂直起始位置
  31.         SCCB_WR_Reg(VSIZE, 0x78);   //垂直尺寸
  32.         SCCB_WR_Reg(HREF,  0x00);
  33.         SCCB_WR_Reg(HOutSize,0x50); //输出尺寸
  34.         SCCB_WR_Reg(VOutSize,0x78); //输出尺寸
  35.     }
  36.     raw=SCCB_RD_Reg(HSTART);
  37.     temp=raw+(sx>>2);//sx高8位存在HSTART,低2位存在HREF[5:4]
  38.     SCCB_WR_Reg(HSTART,temp);
  39.     SCCB_WR_Reg(HSIZE,width>>2);//width高8位存在HSIZE,低2位存在HREF[1:0]
  40.      
  41.     raw=SCCB_RD_Reg(VSTRT);
  42.     temp=raw+(sy>>1);//sy高8位存在VSTRT,低1位存在HREF[6]
  43.     SCCB_WR_Reg(VSTRT,temp);
  44.     SCCB_WR_Reg(VSIZE,height>>1);//height高8位存在VSIZE,低1位存在HREF[2]
  45.      
  46.     raw=SCCB_RD_Reg(HREF);
  47.     temp=((sy&0x01)<<6)|((sx&0x03)<<4)|((height&0x01)<<2)|(width&0x03)|raw;
  48.     SCCB_WR_Reg(HREF,temp);
  49.      
  50.     SCCB_WR_Reg(HOutSize,width>>2);
  51.     SCCB_WR_Reg(VOutSize,height>>1);
  52.      
  53.     SCCB_RD_Reg(EXHCH);
  54.     temp = (raw|(width&0x03)|((height&0x01)<<2));
  55.     SCCB_WR_Reg(EXHCH,temp);
  56. }
复制代码


在VGA模式 640*480下 几个寄存器的值(十进制)是这样的:HSTRT = 35 HSIZE = 160 VSTRT = 7 VSIZE = 240 HREF = 0 HOutSize = 160 VOutSize = 240 EXHCH = 0
子啊480*240下几个寄存器的值是这样的:HSTRT = 55 HSIZE = 120 VSTRT = 67 VSIZE = 120 HREF = 0 HOutSize = 120 VOutSize = 120 EXHCH = 0
请问论坛里有同学知道这个为什么关于分辨率的这几个寄存器要这么配置吗,看了好久手册也没找到。困扰了好几天。

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
Li_Lei
1楼-- · 2019-03-24 02:46
/ 这些摄像头的寄存器设置实在没法弄,官网都没有个明白的手册,只能试通了例程就那样了,鬼才知道为啥
Li_Lei
2楼-- · 2019-03-24 08:12
 精彩回答 2  元偷偷看……
Rainbow434
3楼-- · 2019-03-24 10:21
huo_hu 发表于 2018-5-29 08:27
这些摄像头的寄存器设置实在没法弄,官网都没有个明白的手册,只能试通了例程就那样了,鬼才知道为啥

确实很坑,那个手册我都翻烂了都没找到关于这个的介绍
Rainbow434
4楼-- · 2019-03-24 15:54
huo_hu 发表于 2018-5-29 08:31
我的理解那几个是配置行频场频信号延迟时间的,这个时间以PCLK为参照.

我的理解跟你差不多,我也觉得是这几个寄存器决定摄像头从哪一行哪一列开始采集

一周热门 更多>