完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前言
单片机只有能够看见世界,才能真正的走向智能化,所以,用单片机驱动摄像头很有必要。而在摄像头当中,OV7670是比较经典的一款。 硬件准备 1 .STM32开发板; 2. OV7670模块; OV7670基础知识 驱动源程序直接用某点原子的挺好,这里就不贴出来了。 1、存储(OV7670往FIFO中写数据) 战舰OV7670模块存储图像数据的过程为:main_等待OV767同步信号->main_帧同步信号触发中断->exti_FIFO写指针复位->exti_FIFO写使能->main_等待第二个同步信号(如果第一帧还没处理完第二帧中断到来则FIFO写禁止) OV7670_WREN=1; //允许写入FIFO OV7670_WRST=0; //复位写指针 OV7670_WRST=1; 之后摄像头传感器会自动快速存储像素到FIFO 2、读取(MCU从FIFO中读取数据) 读取过程:FIFO读指针复位->给FIFO读时钟(FIFO RCLK)->读取第一个像素高字节->给FIFO读时钟(FIFO RCLK)->读取第一个像素低字节->给FIFO读时钟(FIFO RCLK)->读取第二个像素高字节->循环读取剩余像素->将所有像素值依次显示在LCD上或存储在数组里面 关于数据量,比如QVGA模式,RGB565格式,我们总共循环读取3202402次,读取一帧数据 OV7670_RRST=0; //开始复位读指针 OV7670_RCK_L; OV7670_RCK_H; OV7670_RCK_L; OV7670_RRST=1; //复位读指针结束 OV7670_RCK_H; 然后FIFO就会按照从上到下,从左到右的顺序依次输出像素 调试记录 1.配置灰度输出遇到的问题以及解决办法 在寄存器配置上,在正点原子代码基础上,更改寄存器配置 {0x12,0x10}, {0x3a, 0x14}, {0x3d, 0x80}, {0x67, 0x11}, {0x68, 0xFF}, {0x40, 0xC0}, 直接添加在OV7670.config文件末尾就行,就会得到YUYV格式的输出,每个像素会传来两个字节,只要高字节,第2,4,6等字节直接扔掉不要,然后为了在LCD上得到显示结果,需要将256灰度转化为RGB565而在LCD上显示,综合代码如下 OV7670_RCK_L; color=GPIOC->IDR&0XFF; //读数据 OV7670_RCK_H; color<<=8; OV7670_RCK_L; //color|=GPIOC->IDR&0XFF; //读数据 OV7670_RCK_H; color_r = color&0xf800; color_b = color>>11; color_g =(color>>5)&0x07e0; LCD->LCD_RAM= color_r + color_g + color_b; 接下来会发现还有问题,那就是屏幕碎片化,闪动严重,原因有二: 第一是因为在正点原子代码上有"FIFO"还没有写入完毕而提前被LCD读取完了,LCD后半截时有时无,就造成了比较大但范围又相似的抖动,正点原子代码如下: OV7670_WREN=1; //允许写入FIFO OV7670_WRST=0; //复位写指针 OV7670_WRST=1; ov_sta++; 应该更正为: if(ov_sta==0) { OV7670_WREN=1; //允许写入FIFO OV7670_WRST=0; //复位写指针 OV7670_WRST=1; ov_sta++; }else { OV7670_WREN=0; //禁止写入FIFO OV7670_WRST=0; //复位写指针 OV7670_WRST=1; } 第二会发现屏幕有很多毛刺尖锐闪动,是因为屏幕刷新率太高,这是源代码: while(1) OV7670_camera_refresh(); 但是应该人为的减慢这个速度或者固定下来,比如改为10帧的刷新率,改进后的代码为: while(1) { delay_ms(100); OV7670_camera_refresh(); //更新显示 } LCD上的显示完美输出 总结 这种点对点的摄像头,并不适合入门,资金充裕的话建议入手openmv,又快又方便。 |
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9055 浏览 16 评论
4086 浏览 18 评论
1174浏览 3评论
603浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
596浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2333浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 22:57 , Processed in 1.070592 second(s), Total 48, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号