OpenEdv-开源电子网

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

原子大大, 为什么OV7670无法全屏

[复制链接]

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-8-21 16:47:38 来自手机 | 显示全部楼层 |阅读模式
原子大大, 为什么OV7670无法全屏;

目前只能设置320x320以下,但是我记得ov7670好像支持640x480的;
JPEG_20180821_164716_.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-21 16:57:20 | 显示全部楼层
虽然百度到了一个分辨率设置参考, 但是没有初始化部分,并不能实现;
;

ov7670分辨率设置.pdf

250.63 KB, 下载次数: 50

回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-21 16:59:59 | 显示全部楼层
这样我们就可以写一个简单的函数来设置 OV7670 的分辨率了
输入图像的行起始点,场起始点, 宽度 ,高度计算得到相应寄存器的值
编译环境:keil mdk
void OV7670_config_window(u16 startx,u16 starty,u16 width, u16 height) {
u16 endx=(startx+width*2)%784;
u16 endy=(starty+height*2);
u8 x_reg, y_reg;
u8 state,temp;
state= rdOV7670Reg(0x32, &x_reg ); x_reg&= 0xC0;
state= rdOV7670Reg(0x03, &y_reg ); y_reg&= 0xF0;
//设置 HREF
temp = x_reg|((endx&0x7)<<3)|(startx&0x7); state = wrOV7670Reg(0x32, temp );
temp = (startx&0x7F8)>>3;
state = wrOV7670Reg(0x17, temp );
temp = (endx&0x7F8)>>3;
state = wrOV7670Reg(0x18, temp );
//设置 VREF
temp = y_reg|((endy&0x3)<<2)|(starty&0x3); state = wrOV7670Reg(0x03, temp );
temp = (starty&0x3FC)>>2;
state = wrOV7670Reg(0x19, temp );
temp = (endy&0x3FC)>>2;
state = wrOV7670Reg(0x1A, temp );
}
捕获.PNG
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-21 17:03:21 | 显示全部楼层
最近在做一个可以兼容所有摄像头的APP, 才发现OV7670 不能实现全屏显示;;
OV7670只能显示在一个角落,怎么样都很怪
回复 支持 反对

使用道具 举报

21

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1423
金钱
1423
注册时间
2016-8-3
在线时间
576 小时
发表于 2018-8-21 17:57:16 | 显示全部楼层
你必须要按照手册上的时序图进行寄存器配置,而且要注意图像输出的格式,如果是rgb565,lcd作为缓存的话,是不能输出640*480的
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-21 17:58:15 | 显示全部楼层
自已更, 没人就自已顶;
;
话说,虽然没有找到OV7670    VGA 设置, 但又多了CIF设置;
;
;
==========================================;
;
void set_qvga(void)        //设置QVGA输出 320x240
{
        while(OV7670_WR_Reg(0x12, 0x14));//设置输出格式RAW,大小QVGA
        OV7670_WR_Reg(0x17, 0x16);//HSTART,输出格式-行频开始高八位(低三位在HREF[2:0])
        OV7670_WR_Reg(0x18, 0x04);        //HSTOP,输出格式-行频结束高八位(低三位在HREF[5:3])
        OV7670_WR_Reg(0x19, 0x03); //VSTRT, 输出格式-场频开始高八位(低二位在VREF[1:0])
        OV7670_WR_Reg(0x1A, 0x7B); //VSTOP,输出格式-场频结束高八位(低二位在VREF[3:2])
        OV7670_WR_Reg(0x03, 0x0a);        //VREF        位[3:2]VREF结束的低两位(高八位见VSTOP[7:0])
                                                      //位[1:0]VREF开始的低两位(高八位见VSTOP[7:0])
        OV7670_WR_Reg(0x70, 0x35);        //SCALING_XSC,水平缩放系数
        OV7670_WR_Reg(0x71, 0x3a);         //SCALING_YSC,垂直缩放系数
        OV7670_WR_Reg(0x72, 0x11);        //SCALING_DCWCTR,DCW控制
        OV7670_WR_Reg(0x73, 0xF7);        //SCALING_PC,旁路DSP缩放时钟分频控制
        OV7670_WR_Reg(0xA2, 0x02);        //SCALING_PCLK_DELAY,像素始终延迟
        OV7670_WR_Reg(0xac, 0x0);        //亮度
}

void set_cif(void)                //设置CIF输出  352x(288+2)
{
        while(OV7670_WR_Reg(0x12, 0x24)); //设置输出格式RAW,大小CIF
        OV7670_WR_Reg(0x17, 0x15);//HSTART,输出格式-行频开始高八位(低三位在HREF[2:0])
        OV7670_WR_Reg(0x18, 0x0B);        //HSTOP,输出格式-行频结束高八位(低三位在HREF[5:3])
        OV7670_WR_Reg(0x19, 0x03); //VSTRT, 输出格式-场频开始高八位(低二位在VREF[1:0])
        OV7670_WR_Reg(0x1A, 0x7b); //VSTOP,输出格式-场频结束高八位(低二位在VREF[3:2]);
        OV7670_WR_Reg(0x03, 0x0a);        //VREF        位[3:2]VREF结束的低两位(高八位见VSTOP[7:0])
                                                      //位[1:0]VREF开始的低两位(高八位见VSTOP[7:0])
        OV7670_WR_Reg(0x32, 0xb6);        //HREF,HREF控制
                                                                                                                                                                                                                        //位[7:6]:HREF沿距数据输出的偏移
                                                                                                                                                                                                                        //位[5:3]:HREF结束的低3位(高8位在HSTOP)
                                                                                                                                                                                                                        //位[2:0]:HREF开始的低3位(高8位在HSTOP)
        OV7670_WR_Reg(0x70, 0x3A); //SCALING_XSC,水平缩放系数
        OV7670_WR_Reg(0x71, 0x35); //SCALING_YSC,垂直缩放系数
        OV7670_WR_Reg(0x72, 0x11); //SCALING_DCWCTR,DCW控制
        OV7670_WR_Reg(0x73, 0xF2);        //SCALING_PC,旁路DSP缩放时钟分频控制
        OV7670_WR_Reg(0xA2, 0x03); //SCALING_PCLK_DELAY,像素始终延迟
}
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-21 17:58:50 | 显示全部楼层
再找找, 要是没找到, 看来只能自已总结一个了;;
;
原子大大,太不给力了
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-21 18:01:57 来自手机 | 显示全部楼层
CIF  352x(352x288+2)
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-21 18:03:29 来自手机 | 显示全部楼层
CIF  352x(352x288+2)
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-21 18:03:59 来自手机 | 显示全部楼层
CIF  352x(352x288+2)
JPEG_20180821_180342_.jpg
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-21 21:34:19 | 显示全部楼层
1965969523 发表于 2018-8-21 17:57
你必须要按照手册上的时序图进行寄存器配置,而且要注意图像输出的格式,如果是rgb565,lcd作为缓存的话, ...

谢谢回复, lcd+DCMI+DMA+RGB565是能出640x480的, 只不过原子的窗口设置,与初始化, 是QVGA模式(320x480); 不支持VGA;
;
QVGA下设置窗口,无法将传感器大小调至640x480, 也就无法输出640x480;
;
OV7670在VGA下, 目测不仅仅是设置不一样, 设置窗口的算法也不一样;
回复 支持 反对

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-22 09:28:11 | 显示全部楼层
正点原子的OV7670这个摄像头模块当初是给F1系列这样不带摄像头接口的单片机设计的,摄像头模块的时钟相对于单片机来讲还是太快了,因此模块上都加了一个FIFO缓冲器进行缓冲;但是这个FIFO缓冲器内存还是有限,无法完整地缓寸一帧VGA分辨率格式的RGB565图像,而且那个时候正点原子屏幕的分辨率也就320x240,现在看到的大分辨率屏幕都是原子后来新出的。所以那个时候给OV7670所设计的程序都是针对QVGA分辨率。
后来F4系列兴起的时候,由于该系列单片机带摄像头接口,并且有更大的RAM和更快的运行频率,原子就主打那些更高端的摄像头了,所以这里的OV7670相关例程也就一直处于之前的状态。
十六进制带我飞。
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-22 09:37:18 | 显示全部楼层
DreamWaterPro 发表于 2018-8-22 09:28
正点原子的OV7670这个摄像头模块当初是给F1系列这样不带摄像头接口的单片机设计的,摄像头模块的时钟相对于 ...

谢谢回复, 不过据我所了解, 不仅原子的QVGA, 几乎所有的都是QVGA;
回复 支持 反对

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-22 09:50:57 | 显示全部楼层
wlq390934605 发表于 2018-8-22 09:37
谢谢回复, 不过据我所了解, 不仅原子的QVGA, 几乎所有的都是QVGA;

ummm表示也不太清楚他们为什么都是这样设计,我之前做和摄像头有关的课题的时候也清楚地记得OV7670是支持VGA输出的,所以我想楼主如果有条件的话,是否可以尝试一下用更快的单片机或者CPU直接读取原始图像?
十六进制带我飞。
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-23 18:03:09 | 显示全部楼层
本帖最后由 wlq390934605 于 2018-8-23 18:18 编辑

自已顶上去, OV7670 时钟25MHZ, LCD屏640x480, 目测更新的数据区只能排满1/3个屏, 说明DCMI根本就没有收到足够的与VGA显示区相对应数据量;
while(OV7670_WR_Reg(0x12, 0x44)); //已经打开VGA模式;
;
但还是无法正常显示,逻辑分析仪无法正常使用, 没有测到25MHZ的 PCLK像素时钟, 逻辑分析仪测得最小  PCLK为4.8MHZ, 示波器因OV7670输出太弱,无法使用, 无法测量  PCLK; 根据逻辑分析仪数据, 目测根本就没有25MHZ 的  PCLK, 也就是说根本就没有或无法打开VGA模式;  PCLK=784*510*30*2(byte)=23990400=24MHz, 根据该公式  PCLK 应是25MHZ才对, 此时才是VGA模式;
原子大大, 来救救我吧!! 就没有哪 位大哥来说两句么;


回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-8-23 18:21:37 | 显示全部楼层
本帖最后由 wlq390934605 于 2018-8-23 18:24 编辑

我记得OV7670的说明书,是这样的, VGA模式为保留, 也就是说并没有VGA模式设置的寄存器;;
但是呢我可是有用过OV7670的USB摄像头的, 而且OV7670是有VGA模式, 图像效果也还不错;
;
或者说OV7670有多个型号, 我们用的这款并没有, 所以说明书上也没有VGA模式;
;

捕获.PNG
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-4-27
在线时间
34 小时
发表于 2018-8-24 22:29:53 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 22:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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