OV7670配置和调试总结

2023-11-02

  废话后面说,先直接上OV7670寄存器的配置部分
const uint8_t OV7670_Reg[][2]=
{
  //Frame Rate Adjustment for 24Mhz input clock
  //30fps PCLK=24MHz
  {0x11, 0x80},//软件应用手册上设置的是0x80,例程设置的是0x00
  {0x6b, 0x0a},//PLL控制,软件应用手册上设置的是0x0a,例程设置的是0x40,将PLL调高的话就会产生花屏
  {0x2a, 0x00},
  {0x2b, 0x00},
  {0x92, 0x00},
  {0x93, 0x00},
  {0x3b, 0x0a},

  //Output format
  {0x12, 0x14},//QVGA(320*240)、RGB

  //RGB555/565 option(must set COM7[2] = 1 and COM7[0] = 0)
  {0x40, 0x10},//RGB565,effective only when RGB444[1] is low
  {0x8c, 0x00},

  //Special effects - 特效 
  //normal
  {0x3a, 0x04},
  {0x67, 0xc0},
  {0x68, 0x80},

  //Mirror/VFlip Enable - 水平镜像/竖直翻转使能
  {0x1e, 0x37},//修改配置值将产生图像显示上下或左右颠倒

  //Banding Filter Setting for 24Mhz Input Clock - 条纹滤波器
  //30fps for 60Hz light frequency
  //{0x13, 0xe7},//banding filer enable
  //{0x9d, 0x98},//50Hz banding filer
  //{0x9e, 0x7f},//60Hz banding filer
  //{0xa5, 0x02},//3 step for 50Hz
  //{0xab, 0x03},//4 step for 60Hz
  //{0x3b, 0x02},//select 60Hz banding filer

  //Simple White Balance - 白平衡
  //{0x13, 0xe7},//AWB、AGC、AGC Enable and ...
  //{0x6f, 0x9f},//simple AWB

  //AWBC - 自动白平衡控制(Automatic white balance control) 
  //{0x43, 0x14},//用户手册里这些寄存器的值都是保留(Reserved),不用设置的呀?
  //{0x44, 0xf0},
  //{0x45, 0x34},        
  //{0x46, 0x58},
  //{0x47, 0x28},
  //{0x48, 0x3a},

  //AWB Control
  //{0x59, 0x88},//用户手册连寄存器都是保留,初始值都没提供
  //{0x5a, 0x88},        
  //{0x5b, 0x44},
  //{0x5c, 0x67},
  //{0x5d, 0x49},
  //{0x5e, 0x0e},

  //AWB Control
  //{0x6c, 0x0a},
  //{0x6d, 0x55},       
  //{0x6e, 0x11},
  //{0x6f, 0x9f},
  
  //AGC/AEC - Automatic Gain Control自动增益补偿/Automatic exposure Control自动曝光控制
  //{0x00, 0x00},
  //{0x14, 0x20},
  //{0x24, 0x75},
  //{0x25, 0x63},
  //{0x26, 0xA5},

  //AEC algorithm selection - AEC公式选择    
  //{0xaa, 0x94},//基于平均值的AEC算法Average-based AEC algorithm/基于直方图的AEC算法Histogram-based AEC algorithm  

  //基于直方图的AGC/AEC的控制
  //{0x9f, 0x78},
  //{0xa0, 0x68},       
  //{0xa6, 0xdf},
  //{0xa7, 0xdf},
  //{0xa8, 0xf0},
  //{0xa9, 0x90},

  //Fix Gain Control - 固定增益控制    
  //{0x69, 0x5d},//Fix gain for Gr channel/for Gb channel/for R channel/for B channel

  //Color saturation 颜色饱和度 + 0
  //{0x4f, 0x80},
  //{0x50, 0x80},
  //{0x51, 0x00},
  //{0x52, 0x22},
  //{0x53, 0x5e},
  //{0x54, 0x80},
  //{0x58, 0x9e},

  //Brightness - 亮度 + 0
  //{0x55, 0x00},

  //Contrast - 对比度 + 0
  //{0x56, 0x40},

  //Gamma Curve - 伽马曲线
  //{0x7a, 0x20},
  //{0x7b, 0x1c},
  //{0x7c, 0x28},        
  //{0x7d, 0x3c},
  //{0x7e, 0x55},
  //{0x7f, 0x68},
  //{0x80, 0x76},
  //{0x81, 0x80},        
  //{0x82, 0x88},
  //{0x83, 0x8f},
  //{0x84, 0x96},
  //{0x85, 0xa3},
  //{0x86, 0xaf},        
  //{0x87, 0xc4},
  //{0x88, 0xd7},
  //{0x89, 0xe8},

  //Matrix Coefficient - 色彩矩阵系数            
  //{0x4f, 0x80},
  //{0x50, 0x80},
  //{0x51, 0x00},
  //{0x52, 0x22},
  //{0x53, 0x5e},
  //{0x54, 0x80},

  //Lens Correction Option - 镜头补偿选项
  //{0x62, 0x00},       
  //{0x63, 0x00},
  //{0x64, 0x04},
  //{0x65, 0x20},        
  //{0x66, 0x05},
  //{0x94, 0x04},//effective only when LCC5[2] is high
  //{0x95, 0x08},//effective only when LCC5[2] is high


  //注释这些配置的话,就倾斜显示,并显示多块,这到底是控制什么的?跟时序图有关?
  {0x17, 0x16},//行频Horizontal Frame开始高八位(低三位在HREF[2:0])       
  {0x18, 0x04},//行频Horizontal Frame结束高八位(低三位在HREF[5:3])
  {0x19, 0x02},//场频Vertical Frame开始高八位(低二位在VREF[1:0])
  {0x1a, 0x7b},//场频Vertical Frame结束高八位(低二位在VREF[3:2])
  {0x32, 0x80},//HREF
  {0x03, 0x06},//VREF

  //注释这个配置的话,就显示花屏了
  {0x15, 0x02},//配置PCLK、HREF、VSYNC相关

  //Automatic black Level Compensation - 自动黑电平校正
  {0xb0, 0x84},//调试时注释这项配置时,颜色显示不正常了,红色练绿色,绿色变红色,但用户手册对这寄存器是保留RSVD
  //{0xb1, 0x0c},
  //{0xb2, 0x0e},      
  //{0xb3, 0x82},
  //{0xb8, 0x0a},

  //SCALING_xx寄存器
  //{0x70, 0x00},
  //{0x71, 0x00},
  //{0x72, 0x11},
  //{0x73, 0x08},
  //{0x3e, 0x00},

  //ADC
  //{0x37, 0x1d},//ADC控制ADC Control
  //{0x38, 0x71},//ADC和模拟共模控制ADC and Analog Common Mode Control
  //{0x39, 0x2a},//ADC偏移控制ADC Offset Control

  //零杂的寄存器
  //{0x92, 0x00},//空行低八位Dummy Line low 8 bits
  //{0xa2, 0x02},//像素时钟延时
  //{0x0c, 0x0c},
  //{0x10, 0x00},
  //{0x0d, 0x01},
  //{0x0f, 0x4b},
  //{0x3c, 0x78},
  //{0x74, 0x19},

  //用户手册里这几个寄存器都是保留RSVD
  //{0x0e, 0x61},
  //{0x16, 0x02},
  //{0x21, 0x02},
  //{0x22, 0x91},
  //{0x29, 0x07},
  //{0x33, 0x0b},
  //{0x35, 0x0b},
  //{0x4d, 0x40},
  //{0x4e, 0x20},
  //{0x8d, 0x4f},        
  //{0x8e, 0x00},
  //{0x8f, 0x00},
  //{0x90, 0x00},
  //{0x91, 0x00},
  //{0x96, 0x00},
  //{0x9a, 0x80},                              
};

      刚开始学OV7670摄像头,我想大家跟我一样心里很毛躁吧,一个模块需要你配置100多个寄存器,但用户手册对寄存器的介绍却草草的一笔带过,自己无从下手啊,只能看开发板给的例程和上网找一些大虾的帖子了。虽然开发板提供的例程好用,但是光用别人的配置不行,怎么也得根据自己实际的需要去修改这些寄存器的配置,所以就静下心里好好看中英文用户手册和OV7670_software_application_note文档。中文用户手册翻译错误太多,建议看英文的,还有强烈推荐看下OV7670_software_application_note文档,文中简单介绍了针对不同的模式对OV7670寄存器设置。
    遇到问题我喜欢化繁为简,挑重点的先解决。看到OV7670寄存器中挺多设置是针对摄像头拍摄图像质量方面的,比如自动白平衡(AWB)、自动曝光控制(AEC)等等,当不知道摄像头拍摄的图片是否能在LCD上正常显示时,你修改这部分配置只能说是做无用功。所以首要任务是让摄像头拍摄的图像能显示在LCD上,我用“//”注释了暂时对于我们来说无关紧要的寄存器配置,100多个寄存器,现在只需要配置20多个,一目了然了吧,如果你的摄像头采集的图像不能在LCD上正常显示,参照用户手册修改这20多项即可,当然得先保证相关的硬件接口正确。后期为了调节图像效果,去掉相应的“//”注释符即可。
    最上面的程序对寄存器配置部分就是我参照论坛里wangguanfu大侠提供的配置文件和OV7670_software_application_note文档,自己通过调试归纳总结的,希望能对大家有点帮助吧,大家一起交流,共同进步。附上我参考的PDF文档
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OV7670配置和调试总结 的相关文章

  • spring boot Actuator原理详解之启动

    本文基于spring boot 2 2 0 release版本 从本文开始 我将连续几篇文章介绍Actuator的原理 本文是原理的第一篇文章 介绍Actuator是如何启动的 我们知道访问Actuator可以通过JMX web等渠道 本文
  • Jenkins拉取github库代码执行构建

    前言 上篇文章写了关于定时构建 以及构建后发送邮件的内容 但是构建时运行的代码是我们手动添加到Jenkins工作空间的 这篇文章我们说一说自动从GitHub远程库拉取代码 执行构建 废话不多说 开始 开始之前 我们需要安装GitHub插件
  • FDTD script command(结构)

    addcircle 添加圆柱体 addrect 添加长方体 addsphere 添加球体 addtriangle 添加三角柱 addmesh 添加网格 addfdtd 添加仿真区域 通用设置 设置结构名字 set name name 设置位
  • 启莱OA messageurl.aspx SQL注入

    子曰 不患人之不己知 患不知人也 漏洞复现 访问漏洞url 使用SQLmap对参数 user 进行注入 漏洞证明 文笔生疏 措辞浅薄 望各位大佬不吝赐教 万分感谢 免责声明 由于传播或利用此文所提供的信息 技术或方法而造成的任何直接或间接的
  • mysql中dml全称是什么_dml是什么?

    展开全部 DML是Data Manipulation Language的缩写 意思是数据62616964757a686964616fe4b893e5b19e31333431363566操纵语言 是指在SQL语言中 负责对数据库对象运行数据访
  • 初识消息队列(Messges Queue)

    最近在学习消息队列 因此查阅了很多资料 所以将知识做了一个总和 方便读者读完对消息队列有一个大致的了解 1 什么是消息队列 消息队列一般简称为 MQ Messges Queue 是指利用高效可靠的消息传递机制进行与平台无关的数据交流 并基于
  • LeetCode——034

    34 Search for a Range My Submissions QuestionEditorial Solution Total Accepted 80156 Total Submissions 275867 Difficulty
  • GAMES101回顾 -- 光线追踪

    Ray Tracing 光线追踪 实现步骤 发射光线 Ray Generation 光线追踪算法从观察者的视点 如相机位置 发射一条主光线 这条光线的起点是相机位置 方向是从相机位置经过像素位置的射线 光线求交 Ray Object Int
  • 【负荷预测】长短期负荷预测(Matlab代码实现)

    欢迎来到本博客 作者研究 主要研究方向是电力系统和智能算法 机器学习和深度学习 目前熟悉python网页爬虫 机器学习 群智能算法 深度学习的相关内容 希望将计算机和电网有效结合 目前更新 电力系统相关知识 期刊论文 算法 机器学习和人工智
  • 如何找短视频素材?这些工具可以帮到你

    由于自媒体成本低 门槛低 越来越多的人纷纷转行加入自媒体大军 利用大数据的便利 大量产出短视频吸粉变现 那么 如何高速产出短视频作品呢 下面这几个工具超级实用 01 易撰 说起易撰 很多人都只知道易撰的自媒体库 是非常强大的爆文收集器 但其
  • 如何用pip升级python版本,python的pip升级没反应

    大家好 小编为大家解答python的pip如何更新到最新版本的问题 很多人还不知道如何用pip升级python版本 现在让我们一起来看看吧 1 pip如何升级 第一步 首先检测一下我们电脑是否安装了python 打开命令提示框 输入pyth
  • ir指令、立即数的作用_我们一起学RISC-V——05-RV32I指令集

    本期内容如下 RISC V指令格式 RV32I指令命名规则 RV32I指令集 重点指令详解 一 RISC V指令格式 RISC V按照32bit的指令不同字符的具体分布共分为6种基本格式 分别是R类型 I类型 S类型 U类型 J类型 B类型
  • jdbc获取一行字符串_JDBC基础

    什么是JDBC JDBC就是Java程序访问数据库的规范 是一个规范定义接口 各种数据库厂家实现了JDBC这个接口 这些实现类就是数据库驱动 使用时只需要调用接口中的方法即可 不用关注类是如何实现的 JDBC的核心API有以下几种 Driv
  • 前端学习——css盒子模型、css3新特性、伪类、布局0711TODO

    样式还是得具体使用才能理解 不然会忘记也理解不透彻 还有定位 元素溢出 浮动 布局水平 垂直对齐 css3新特性 1过渡 2 动画 3 2D 3D转换 伪类 三种定位方式 弹性布局 栅格布局
  • 餐馆(餐馆有n张桌子,每张桌子有一个参数a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 不允许拼桌的情况下,选择其中一部分客人,使得总预计消费金额最大)

    餐馆 某餐馆有n张桌子 每张桌子有一个参数 a 可容纳的最大人数 有m批客人 每批客人有两个参数 b人数 c预计消费金额 在不允许拼桌的情况下 请实现一个算法选择其中一部分客人 使得总预计消费金额最大 输入描述 输入包括m 2行 第一行两个
  • (手工)【sqli-labs42、43】POST注入、堆叠注入、错误回显、字符型注入

    目录 一 推荐 二 手工 SQL注入基本步骤 三 Less42 POST Error based String Stacked 3 1 简介 堆叠注入 错误回显 字符型注入 3 1 第一步 注入点测试 3 3 第二步 分析过滤 3 4 第三
  • 微软华裔科学家和他们的又一次冲动

    站在放映着自己照片的大屏幕前 对着现场的300人 西装革履的李世鹏有点紧张 发言稿是事先写好的 但他时不时中断几秒 好像忘了词儿 金山CEO张宏江揶揄瞬间转换身份的他 有点做作 微软门徒 李世鹏 在一幅拍摄于2001年的照片上 李世鹏与比尔
  • VsCode必备插件

    open in browser 安装浏览器插件 用于访问html页面 在 扩展栏 的搜索框中输入 open in browser 使用 Alt B 使用默认浏览器打开当前 html 页面 或 Shift Alt B 选择其他浏览器 Vetu
  • 【第十三讲】TMS320F28335开发板之DMA模块

    直接存储器访问 DMA 模块 一 内存与外设进行数据交换的方式 中断方式 每传输一次数据 就必须经历中断处理的全部步骤 而且一般需要借助CPU内部的寄存器作为中介 也就是说CPU需要从来源把每一片段的资料复制到暂存器 然后把它们再次写回到新

随机推荐

  • Vue 组件基础

    VUE 一 开发工具 VUE开发环境个人推荐使用VS code 然后安装特定的插件即可开发 可用插件如下 Vetur 语法高亮 智能感知 Emmet等 EsLint 语法纠错 Auto Close Tag 自动闭合HTML XML标签 Au
  • kibana常见启动报错

    环境 Ubuntu16 04 报错1 连接elasticsearch kibana启动报错 报错信息 Status changed from uninitialized to green Ready log 08 29 01 886 err
  • ModelSim的入门仿真步骤(图文干货)

    ModelSim仿真分为以下6个主要步骤 1 新建工程 2 新建或导入工程文件 3 文档编译 4 开始仿真 5 添加仿真波形 6 调整仿真时间 1 新建工程 点击左上角 File Project 弹出如下界面 在 Project Name
  • qt提升控件之后,编译报错

    引言 自定义的控件 在ui文件中将控件提升为自定义的控件 提升的时候没有指明提升的头文件的相对路径或者绝对路径 导致编译的时候无法找到相应的头文件 解决方法 1 在被提升的类的头文件前添加本机电脑所在的相对路径 2 在被提升的类的头文件前添
  • leveldb常见问题以及性能优化点

    本篇是leveldb最后一篇 这里主要把技术核心点 性能提升点或者面试可能会被问到进行总结 一 常见问题 1 leveldb key value内存 内存中保存的是所有key value吗 答 不是 搜索顺序 memtable immtab
  • 利用MATLAB中的newrb函数进行函数逼近

    RBF函数在神经网络控制中较为常见 MATLAB中早已集成了一个newrb的函数 在一些场景下使用起来还比较方便 尤其是涉及到进行函数逼近的时候 参考链接 http blog sina com cn s blog 9b8d0abd0101o
  • Android Studio连接自带模拟器失败怎么办?强烈建议使用第三方模拟器(含各类模拟器下载地址)

    学习安卓开发的小伙伴必然会碰到模拟器的启动问题 就算成功启动Android Studio自带的模拟器 使用起来也是十分缓慢 有时候卡起来是真想骂娘 服了他个老六 那么这个时候 如果有一个第三方模拟器 不仅简单好用 无需配置 而且美观快速零卡
  • 华为存储特性

    华为存储特性 1 SmartPartition SmartPartition是一种性能特性 根据不同业务特点分配存储系统的缓存资源来满足不同应用系统的服务质量要求 由于单个存储系统要面对的应用数量急剧增加 且各业务应用之间的I O特征不同
  • Android-第五节Menu菜单详解

    目录 一 Menu背景 二 Menu使用步骤 1 创建menu 2 设计menu 3 重写menu逻辑代码 4 运行效果 一 Menu背景 手机毕竟和电脑不同 它的屏幕空间非常有限 因此充分地利用屏幕空间在手机界面设计中就显得非常重要了 如
  • STM32 使用TIM2_CH1(PA15) 输出10K PWM信号

    PA15 gt TIM2 Remap CH1 1 apb init RCC APB1PeriphClockCmd RCC APB1Periph TIM2 ENABLE RCC APB2PeriphClockCmd RCC APB2Perip
  • JMM java内存模型

    java内存模型 即 java memory model 它定义了主存 工作内存抽象概念 底层对应着 CPU 寄存器 缓存 硬件内存 CPU 指令优化等 JMM 体现在以下几个方面 原子性 保证指令不会受到线程上下文切换的影响 可见性 保证
  • android 安装命令,【转载】android中APK包的安装以及adb命令的使用

    1 首先将 android sdk platform tools添加都path路径下 2 在控制台窗口中进入到你apk包所在的目录中 3 输入 abd unremount 第一次使用该命令的时候需要获取该命令的操作权限 4 打开androi
  • Filter、Interceptor的使用

    Filter Interceptor的使用 一 Filter Interceptor的区别 1 1 过滤器 Filter 1 2 拦截器 Interceptor 二 Filter Interceptor的使用 2 1 Filter 的实现步
  • 微信临时文件wxfile://tmp文件处理,微信小程序最新获取头像和昵称

    欢迎点击领取 前端面试题进阶指南 前端登顶之巅 最全面的前端知识点梳理总结 分享一个使用比较久的 技术栈 taro框架 vue3版本 解决在微信小程序获取微信头像时控制台报错 找不着wxfile tmp 文件路径 失败 原因如下 因为微信提
  • JS合并数组对象中key相同的数据(将数组里某个属性相同的对象合并成一个数组)

    将数组里某个属性相同的对象合并成一个数组 原数组如下 let resData name 住院医疗最高报销 tagName 医疗 insuredAmount 6000 name 身故赔付 tagName 寿险 insuredAmount 36
  • 80后创业故事之:兄弟散伙,创业失败

    在开始今天的故事之前 首先感谢这么多朋友关注我的文章 实在让我受宠若惊 我定倍加珍惜大家对我的支持 同时我也留意到这些天有一些朋友对我的故事也提出了一些质疑 怀疑是否杜撰 编造或者太过夸大其辞 本来我想出说一箩筐的理由来证明我所说的都是我自
  • AIGC参数量节节攀升,对存储带来的挑战如何解决?

    引言 近期 AIGC 相关产品如同雨后春笋一般不断涌现 但在技术层面 大家普遍的关注点更多集中在性能方面 却经常忽略了存储对推理和训练效率的影响 以及 AIGC 内容可能带来的合规风险 我们特邀腾讯云存储的产品负责人 崔剑老师和益企研究院创
  • 性能自动化+locust

    性能自动化 locust 仅作为个人笔记 如有雷同 请联系删除 性能测试基础 1 性能测试相关概念 性能测试 测试软件的性能表现 考量软件运行的如何 一般关注时间 效率 资源占用等情况 响应时间 应用系统从用户发出请求开始 到客户端接收到所
  • 你想知道的大数据知识都在这里

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 毋庸置疑 现如今是属于大数据 Big Data 的 革命性的时代 从社交媒体到企业 每时每刻都在产生大量的数据 无所作为 从而把这样的宝藏白白浪费掉是及其愚蠢的 企业已经学会了收集大
  • OV7670配置和调试总结

    废话后面说 先直接上OV7670寄存器的配置部分 const uint8 t OV7670 Reg 2 Frame Rate Adjustment for 24Mhz input clock 30fps PCLK 24MHz 0x11 0x