OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 22447|回复: 33

战舰上面OV7670中设置图像输出窗口这段该如何理解呢,应该说是算法如何理解,谢谢大家了

[复制链接]

21

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-1-20
在线时间
0 小时
发表于 2013-1-27 12:08:32 | 显示全部楼层 |阅读模式

//设置图像输出窗口
//对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位
}

 

啥也不懂就是想跟大家学习
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

24

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2017-11-6
在线时间
42 小时
发表于 2020-11-26 00:49:26 | 显示全部楼层
这个只针对QVGA的,VGA的就不能用了
回复 支持 1 反对 0

使用道具 举报

21

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-1-20
在线时间
0 小时
 楼主| 发表于 2013-1-27 15:13:29 | 显示全部楼层
总觉得论坛里面有点冷清,这个问题昨晚没想出来,今天问了之后没有人马上回答,又继续想,再不断上网查阅资料,终于想通了,根据查阅所得到的在这里给供大家参考,也谢谢原子哥的团队做了这么好的开发板,省的好多事,呵呵。
1.首先是这段代码的含义,这段代码来自OV7670摄像头的实验例程,含义是为了设置窗口,输入图像的行起始点,场起始点,宽度,高度,可以图片分辨率缩小,以减少数据量来适应数据的传输。
2.下面是主要的寄存器:
0x17HSTART 输出格式-行频开始高八位(低三位在HREF[2:0])
0x18HSTOP 输出格式-行频结束高八位(低三位在HREF[5:3])
0x19VSTRT 输出格式-场频开始高八位(低二位在VREF[1:0])
0x1AVSTOP 输出格式-场频结束高八位(低二位在VREF[3:2])
0x03VREF 位[3:2]VREF结束的低两位(高八位见VSTOP[7:0]
位[1:0]VREF开始的低两位(高八位见VSTOP[7:0]
0x32HREF 读写HREF控制
位[5:3]:HREF结束的低3位(高8位在HSTOP)
位[2:0]:HREF开始的低3位(高8位在HSTOP)
设置方式是这样的:QVGA RGB565 320*240
{0x32,0x80},
{0x17,0x17},
{0x18,0x05},
{0x19,0x02},
{0x1a,0x7b},
{0x03,0x0a},
先把这几个寄存器的值计算一下可以发现设置是这样的:
HSTART=184  HSTOP=40  VSTART=11  VSTOP=492
先看HREF,右图


程序中,height*2 是因为每个像素点是有两个数据
HSTOP=START+HREF,而HSTOP是40,184+320*2=824,而不是824,40 怎么来,是824%784得到的,784如图所示:

HREF:784*tP=640*tP+144*tP
至于endx=sx+width*2;同样上图:如下


可以看出来VSTART VSTOP这两个寄存器决定了采集的行数也就是高度
VSTART=HEIGHT*2+VSTOP;
这样就是该代码的含义吧。也不知道和编写者的想法是不是一致的,请大神指点,纠错。
下面我上的自己改的参数的图片来说明这一点,其他参数的时候会导致屏切割,我还没找到原因……

设置OV7670_Window_Set(10,174,240,320);

设置OV7670_Window_Set(10,174,120,320);

大家可以看到区别的



啥也不懂就是想跟大家学习
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-27 16:00:11 | 显示全部楼层
谢谢楼主分享,你说的设置其他值,具体是什么值?情况是什么样的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

21

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-1-20
在线时间
0 小时
 楼主| 发表于 2013-1-27 16:22:17 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
设置其他的值发现屏幕被切了,比如设置OV7670_Window_Set(10,174,120,160);虽然整体的面积大小是不变,缺出现了错位,我估计是我函数没彻底读懂,原子哥的这段函数的思路是怎么理解的啊
啥也不懂就是想跟大家学习
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-27 18:02:03 | 显示全部楼层
这里改了之后,LCD显示部分也需要做修改,比如你设置120*160尺寸,LCD的显示尺寸,也要对应着设置为120*160.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2012-7-16
在线时间
12 小时
发表于 2013-4-19 16:03:31 | 显示全部楼层
头痛啊,看手册,想改到320*480怎么这么难呢?
努力中……
回复 支持 反对

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-3-12
在线时间
0 小时
发表于 2013-4-26 00:40:07 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
回复【5楼】正点原子:

这里改了之后,LCD显示部分也需要做修改,比如你设置120*160尺寸,LCD的显示尺寸,也要对应着设置为120*160.

---------------------------------
那是不是硬件上LCD也要相应地更换成120*160的呢?
回复 支持 反对

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-3-12
在线时间
0 小时
发表于 2013-4-27 23:47:42 | 显示全部楼层
我搞错了!
LCD也是可以修改成窗口输出的。
回复 支持 反对

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-3-12
在线时间
0 小时
发表于 2013-4-28 14:34:29 | 显示全部楼层
回复【5楼】正点原子:

这里改了之后,LCD显示部分也需要做修改,比如你设置120*160尺寸,LCD的显示尺寸,也要对应着设置为120*160.

---------------------------------
求教原子哥,LCD设置窗口输出,应该修改哪些参数?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-4-28 15:02:28 | 显示全部楼层
mini板的扩展例程13,里面有:
//设置窗口
//sx,sy,ex,ey窗口坐标
//窗口大小ex-sx+1)*(ey-ex+1)
//注意,确保ex>=sx;ey>=sy!!!!
//9320/9325/9328/4531/4535/1505/b505/8989等IC已经实际测试    
void LCD_Set_Window(u16 sx,u16 sy,u16 ex,u16 ey)    
{
u8 hsareg,heareg,vsareg,veareg;
u16 hsaval,heaval,vsaval,veaval;  
#if USE_HORIZONTAL  //使用横屏
//窗口值
hsaval=sy;
heaval=ey;
vsaval=319-ex;
veaval=319-sx;
#else //竖屏
//窗口值
hsaval=sx;
heaval=ex;
vsaval=sy;
veaval=ey;
#endif
if(DeviceCode==0X9341)
{
LCD_WR_REG(0x2A); 
LCD_WR_DATA(hsaval>>8); 
LCD_WR_DATA(hsaval&0XFF);  
LCD_WR_DATA(heaval>>8); 
LCD_WR_DATA(heaval&0XFF);  
LCD_WR_REG(0x2B); 
LCD_WR_DATA(vsaval>>8); 
LCD_WR_DATA(vsaval&0XFF);  
LCD_WR_DATA(veaval>>8); 
LCD_WR_DATA(veaval&0XFF);  
}else
{
  if(DeviceCode==0X8989)//8989 IC
{
hsareg=0X44;heareg=0X44;//水平方向窗口寄存器 (1289的由一个寄存器控制)
hsaval|=(heaval<<8); //得到寄存器值.
heaval=hsaval;
vsareg=0X45;veareg=0X46;//垂直方向窗口寄存器   
}else  //其他驱动IC
{
hsareg=0X50;heareg=0X51;//水平方向窗口寄存器
vsareg=0X52;veareg=0X53;//垂直方向窗口寄存器   
}   
//设置寄存器值
LCD_WriteReg(hsareg,hsaval);
LCD_WriteReg(heareg,heaval);
LCD_WriteReg(vsareg,vsaval);
LCD_WriteReg(veareg,veaval);
}
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-3-12
在线时间
0 小时
发表于 2013-5-3 10:31:18 | 显示全部楼层
学些了,谢谢!
回复 支持 反对

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-3-12
在线时间
0 小时
发表于 2013-5-3 10:34:43 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
我设置成QCIF输出,但是得到的数据在LCD上显示很乱,看不到图像。我把LCD设成串口160*120的才勉强能看到一部分图像,有部分是重影的。在LCD的160*120窗口上画点画线都是正常的,因此问题应该是出在OV7670上的输出设置。不知道原子哥对OV7670的视频输出设置能不能给点建议呢?
回复 支持 反对

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2012-8-25
在线时间
1 小时
发表于 2013-8-19 19:39:47 | 显示全部楼层
原子的这段代码,倒数第3行之后,是不是该加SCCB_WR_Reg(0X32,temp);    //设置Href的start和end的最低3位
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-8-20 00:00:19 | 显示全部楼层
回复【13楼】banye:
---------------------------------
没加一直用的挺好的哦。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2013-8-5
在线时间
0 小时
发表于 2013-10-8 15:25:43 | 显示全部楼层
回复【12楼】luckymist:
---------------------------------
楼主能设置成输出320×240的格式吗,就是在lcd屏上横着显示出图像来?一直设置不出理想的效果来,希望有人指导!!
回复 支持 反对

使用道具 举报

1

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-11-8
在线时间
0 小时
发表于 2014-3-22 14:04:26 | 显示全部楼层
请问图像一直移动是和这个原因有关系吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-3-22 15:11:37 | 显示全部楼层
回复【16楼】追风过后:
---------------------------------
数据错位了,可能窗口不对。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-11-8
在线时间
0 小时
发表于 2014-3-22 21:33:34 | 显示全部楼层
回复【17楼】正点原子:
---------------------------------
原子哥,320*240的液晶开辟的窗口不能超过320*240吗?因为我的图像移动,我用开辟窗口函数开辟了321*240的窗口,但是没有变化啊,可是我设置319*240,图像移动的更快了,并且图像变斜了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-3-22 22:58:59 | 显示全部楼层
回复【18楼】追风过后:
---------------------------------
不能超过。
你光设置窗口,是不行的,还得控制输出格式,比如我们是QVGA,输出就是320*240,你设置321*240,就没影响了。
但是319,240,就有了,你少了一个像素,就会引起图像错位。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-11-8
在线时间
0 小时
发表于 2014-3-22 23:04:57 | 显示全部楼层
回复【19楼】正点原子:
---------------------------------
原子哥,你说的是液晶的输出格式吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-3-22 23:23:54 | 显示全部楼层
回复【20楼】追风过后:
---------------------------------
是OV7670
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-11-8
在线时间
0 小时
发表于 2014-3-23 10:25:35 | 显示全部楼层
回复【21楼】正点原子:
---------------------------------
原子哥,好像不是分辨率不一致的问题,因为我把液晶的分辨率改成319*240之后图像移动的分割线就斜了,但是我的现象是图像移动时分割线是垂直的,并且当拍到白光时就移动得快
回复 支持 反对

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
发表于 2014-5-10 16:04:16 | 显示全部楼层
mark!同样遇到相同问题
回复 支持 反对

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
发表于 2014-5-10 16:15:10 | 显示全部楼层
OV7670_Window_Set(10,174,240,320);
我想问下这里面的 10 和 174是什么怎么来的?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-10 22:04:25 | 显示全部楼层
回复【24楼】蘑菇:
---------------------------------
这个是官方给出的(linux驱动里面),没有为什么.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-8-28
在线时间
0 小时
发表于 2014-8-30 09:54:34 | 显示全部楼层

原子哥,我在这个例程的test.c里 注销了OV7670_Windows_Set()这个函数,刷到mini板后,图像输出仍然正常,感觉它完全可以不要啊,另外,那个10--HSTART  174-VSTART,太费解了,10和174到底是指的啥?和这个摄像头的图像传感器(大小是656x488像素)的大小是什么关系?  另外,如果我自己要去调用这个函数,修改窗口(这个窗口指的是图像传感器上的一个区域吗?),前两个参数从哪儿来呢?

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-8-31 02:06:33 | 显示全部楼层
回复【26楼】enots:
---------------------------------
那是因为初始化序列里面,有窗口设置的部分,你可以看看我们的初始化寄存器列表,就知道了。
至于参数关系,我也不知道怎么来的,抄别人的,别人貌似是从linux代码移植过来的。
这样,只能你去问OV公司才可以知道为甚了。。。
搞懂了顺便告诉我下,谢谢。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-6-2
在线时间
0 小时
发表于 2015-6-24 13:28:13 | 显示全部楼层

g我也觉得要加
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-1-1
在线时间
3 小时
发表于 2016-1-2 14:54:47 | 显示全部楼层
为什么我的是黑白的,怎么样才有彩色的图像
回复 支持 反对

使用道具 举报

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-3-19
在线时间
18 小时
发表于 2016-4-4 18:10:44 | 显示全部楼层
小果粒 发表于 2013-1-27 15:13
总觉得论坛里面有点冷清,这个问题昨晚没想出来,今天问了之后没有人马上回答,又继续想,再不断上网查阅资 ...

这个可以把窗口开大点么??看不懂寄存器计算的值啊??怎么算的 ?
回复 支持 反对

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2015-10-2
在线时间
14 小时
发表于 2016-6-1 15:17:04 | 显示全部楼层
楼主 我的是2.8寸的屏幕,屏幕显示老是错位,你用的也是2.8寸的屏幕吗

回复 支持 反对

使用道具 举报

LMiao 该用户已被删除
发表于 2017-4-5 21:54:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2021-4-12
在线时间
2 小时
发表于 2021-4-12 11:37:26 | 显示全部楼层
本帖最后由 一只猫的旅行 于 2021-4-12 11:49 编辑
正点原子 发表于 2013-1-27 18:02
这里改了之后,LCD显示部分也需要做修改,比如你设置120*160尺寸,LCD的显示尺寸,也要对应着设置为120*160.

原子哥,你说的我都设置了,还把光标的起始位置改变了,但是他出来显示图像会有一些问题,在屏幕左侧会出现图像,但是会一直闪烁,这是怎么回事啊
IMG_20210412_114626.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 15:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表