OV7670摄像头模块的使用

OV7670摄像头模块介绍

OV7670 CAMERACHIPTM 图像传感器,体积小、 工作电压低,提供单片 VGA 摄像头和影像处理器的所有功能。通过 SCCB 总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率 8 位影响数据。该产 品 VGA 图像最高达到 30 帧/秒。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过 SCCB 接口编程。OmmiVision 图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量,得到清 晰的稳定的彩色图像。
模块功能有:

1、高灵敏度适合低照度应用,低电压适合嵌入式应用 ;

2、标准的 SCCB 接口,兼容 I 2 C 接口;

3、RawRGB,RGB(GRB4:2:2,RGB565/555/444),YUV (4:2:2)和 YCbCr(4:2:2)输出格式;

4、支持 VGA,CIF和从 CIF 到 40x30 的各种尺寸;

5、VarioPixel 子采样方式;

6、ISP 具有消除噪声和坏点补偿功能;

7、支持闪光灯、 图像缩放;

8、50/60Hz 自动检测;

9、饱和度(UV 调整)、边缘增强、降噪自动调节,以及镜头失光补偿;

10、支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹、自动黑电平校准等自动控制功能。同时支持色饱和度、色相、伽马、锐度等设置;
功能框如图所示:
在这里插入图片描述

一、管脚定义

3V3——输入电源电压;GND——接地;

SIO_C——SCCB接口控制时钟(注意:部分低级单片机需要上拉控制,和I2C接口类似);

SIO_D——SCCB接口串行数据输入/出端(注意:部分低级单片机需要上拉控制,和I2C接口类似);

VSYNC——帧同步信号(输出信号);

HREF——行同步信号(输出信号);

PCLK——像素时钟(输出信号);

XCLCK——时钟信号(输入信号);

D0-D7——数据端口(输出信号);

RESTE——复位端口(正常使能拉高);

PWDN——功耗选择模式(正常使能拉低);

二、控制方式

1.SCCB通讯时序,作用是设置芯片内部寄存器,控制图像各种所需功能。
在这里插入图片描述
2.行输出时序,用于控制一行像素的输出情况,HREF即一行输出的开始和结束信号,同时在像素时钟同步下,输出8位像素信号。
在这里插入图片描述
3.全帧输出下的时序情况(以VGA为例),该图显示的是一幅图像输出情况下,各控制信号和数据信号的输出。图中,VGA=640X480大小情况下,帧同步信号,行同步信号(HREF或HSYNC,注:HSYNC在其它场合下使用,COMS可以设置,更多时候用HREF即可)。
在这里插入图片描述
4.采集图像的基本方法
(1)单片机直接采集
在这里插入图片描述
这种方法最简单,最直接,但是最不好实现的方法,原因是多数的CMOS芯片(如OV7670)的时钟速度可以高达24M,一般单片机的IO口速度根本达不到。当然,高级的MCU,如ARM9以上或者DSP图像处理芯片等,本身处理速度快,内存大而且有的还带有camera接口,可以直接使用,但人家价格也高啊~
不过也不是不是完全没有办法在低速上实现采集,方法也很简单,那么就是降低CMOS 的输出速度,不过这需要靠外部的晶振和内部的PLL 电路以及像素时钟速度,帧速等多个寄存器共同设置,并且要和MCU 的IO 速度匹配才可实现。但不建议这么做,原因是:这种寄存器设置将带来更多的学习困难和理解困难,并导致硬件图像的采集速度可能下降到0.5 帧以下,同时带来图像失真的可能。
注:部分CMOS 时钟速度不快,可以单片机直接采集,如OV7660,但该芯片已经停产。

(2)DMA方式的采集方法
这种方法一般需要具有DMA功能的16位以上的高级单片机来实现,通过DMA方式直接从总线或者IO口采集数据送入内存,内存中数据可以存储,计算,保留,或者供显示使用。

(3)间接采集并显示的方法
这种方法最容易实现,能够直接看到采集的图像内容。实现采集就显示功能,这种方法具有较高帧速,一般QVGA可保证在30帧左右速度。将CMOS输出的数据直接送到显示屏进行显示,数据不经过MCU,因此可达到较高的帧速。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】内存使用相关

free 命令 查看内存大小 free -g :G单位 free -h : 可读性较高较理解 free -m : MB单位 total: 总内存used: 正在运行的进程使用的内存(used total – free – buff/cache)free: 未使用的内存 (free total – used – buff/cache)shared: 多个进程共享的内存buffers: 内存保留…

面试题更新之-伪元素和伪类

文章目录 伪元素和伪类是什么?伪元素(Pseudo-elements):伪类(Pseudo-classes): css伪元素和伪类的区别使用css伪元素的好处使用css伪类的好处 伪元素和伪类是什么? 在CSS中,伪元素(…

xpath下载安装——Python爬虫xpath插件下载安装(2023.7亲测可用!!)

目录 1.免费下载插件链接(若失效评论区留言发送最新链接)(2023.7亲测可用) 2.安装插件 (1)打开chrome浏览器页面,点击:右上角三个点 > 扩展程序 > 管理拓展程序 &#xff…

gitbash2.41安装教程——2023.07

文章目录 1、下载安装包2、安装 1、下载安装包 进入官网下载,官网链接 上面有多种系统可以选择,我是windows,点击windows进行下载 这里可以直接下载最新版本的git 2.41.0 64位。 下载可能有点慢,耐心等待。 2、安装 下载完…

JVM——类加载和垃圾回收

目录 前言 JVM简介 JVM内存区域划分 JVM的类加载机制 1.加载 双亲委派模型 2.验证 验证选项 3.准备 4.解析 5.初始化 触发类加载 JVM的垃圾回收策略 GC 一:找 谁是垃圾 1.引用计数 2.可达性分析 (这个方案是Java采取的方案&#x…

基于单片机智能台灯坐姿矫正器视力保护器的设计与实现

功能介绍 以51单片机作为主控系统;LCD1602液晶显示当前当前光线强度、台灯灯光强度、当前时间、坐姿距离等;按键设置当前时间,闹钟、提醒时间、坐姿最小距离;通过超声波检测坐姿,当坐姿不正容易对眼睛和身体腰部等造成…

MySQL索引详解

索引 在MySQL中,查询方式可以根据访问表数据的方式分为两种:全表扫描和使用索引。 全表扫描(Full Table Scan): 全表扫描是指在查询过程中,MySQL会遍历整个表的每一行来检查满足查询条件的数据。当查询条件…

Ubuntu下安装、配置及重装CUDA教程

安装CUDA 前往Nvidia CUDA Tools官网选择对应的架构和版本下载CUDA 以如下架构和版本为例: 查看显卡驱动 nvidia-smi如果显卡驱动已经装了,那么在CUDA安装过程中不用再勾选安装driver 下载并安装CUDA wget https://developer.download.nvidia.co…

Spring AOP

目录 AOP 理解AOP AOP组成 AOP的优点 Spring AOP 使用Spring AOP 定义切面和切点 定义通知 动态代理 织入 AOP 理解AOP AOP即面向切面编程,简单来说,就是把一部分通用的功能集中的放在一个地方处理的思想。假如某一段代码很多地方要用到&…

创建型模式 - 建造者模式

概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。…

pytest 参数化进阶

目录 前言: 语法 参数化误区 实践 简要回顾 前言: pytest是一个功能强大的Python测试框架,它提供了参数化功能,可以帮助简化测试用例的编写和管理。 语法 本文就赶紧聊一聊 pytest 的参数化是怎么玩的。 pytest.mark.par…

openGauss学习笔记-13 openGauss 简单数据管理-DELETE语句

文章目录 openGauss学习笔记-13 openGauss 简单数据管理-DELETE语句13.1 语法格式13.2 参数说明13.3 示例 openGauss学习笔记-13 openGauss 简单数据管理-DELETE语句 DELETE语句可以从指定的表里删除满足WHERE子句的行。如果WHERE子句不存在,将删除表中所有行&…

css 禁止多次点击导致的选中了目标div的文字

像下面这样的情况,就可以用这种方法避免掉 禁止多次点击,导致的,选中了目标div的文字 或者 禁止多次点击,导致,html结构被选中显示出来 .targetDiv {-webkit-user-select: none;-moz-user-select: none;-ms-user-sel…

【云原生】Docker的初步认识,安装与基本操作

一、Docker的相关知识 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的…

SpringCloud整合Sentinel

文章目录 1、Sentinel介绍2、安装Sentinel控制台3、微服务整合Sentinel 1、Sentinel介绍 阿里开源的流量控制组件官网:https://sentinelguard.io/zh-cn/index.html承接了阿里双十一大促流量的核心场景,如秒杀、消息削峰填谷、集群流量控制、实时熔断下游…

Python自动化之pytest常用插件

目录 1、失败重跑 pytest-rerunfailures 2、多重校验 pytest-assume 3、设定执行顺序 pytest-ordering 4、用例依赖(pytest-dependency) 5.分布式测试(pytest-xdist) 6.生成报告(pytest-html) 1、失败重跑 pytest-rerunfailu…

Flutter 小技巧之滑动控件即将“抛弃” shrinkWrap 属性

相信对于 Flutter 开发的大家来说, ListView 的 shrinkWrap 配置都不会陌生,如下图所示,每当遇到类似的 unbounded error 的时候,总会有第一反应就是给 ListView 加上 shrinkWrap: true 就可以解决问题,那为什么现在会…

椒图——靶场模拟

先查看ip,10.12.13.232模拟的外网ip,其他的模拟内网ip,服务里面搭建好的漏洞环境。 #第一个测试项目,web风险发现 新建,下发任务,点威胁检测,webshell,点扫描任务,点新…

QT中QTimer的循环时间与槽函数执行时间以及在事件循环中触发,不同时间的结果分析

目录 当循环时间小于槽函数时间时: 当循环间隔时间大于槽函数时间时: 当存在两个定时器器,其中一个还是间隔100ms,另一个间隔1000ms: 当两个定时器的循环周期大于槽函数执行时间时 当在主程序中添加一个for循环…

js - 对forEach()函数的一些理解

1,定义和用法 定义: forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。注意: forEach() 对于空数组是不会执行回调函数的。 用法: // 箭头函数 forEach((element) > { /* … */ }) forEach((element, index) &…