天嵌 ARM开发社区

 找回密码
 注册
查看: 3107|回复: 2

怎样用ov9650采集图像

[复制链接]
makeitbai 发表于 2015-3-14 00:36:15 | 显示全部楼层 |阅读模式
本帖最后由 makeitbai 于 2015-3-14 10:03 编辑

请求亚瑟王和大家,我想用ov9650采集图像,目前思路是这样的,思路一:摄像头初始化代码( 含Test_OV9650(),要几分钟时间)和设置代码不分开,摄像头初始化后(几分钟后)连续采集并显示,按一个键,退出摄像头,并保存LCD_BUFFER[][]数组的数据。再按一个键,又初始化(几分钟)连续采集并显示。
思路二:摄像头初始化代码( 含Test_OV9650(),要几分钟时间)和设置代码分开,初始化代码(几分钟)只执行一次,然后摄像头连续采集并显示,按一个键,将LCD_BUFFER[][]数组的数据保存下来,再按一个键,摄像头继续连续采集并显示,但这个时候,液晶没有显示摄像头采集的数据。
不知道有没有描述清楚,自己琢磨了很久,没找到原因,求指导
 楼主| makeitbai 发表于 2015-3-14 10:03:01 | 显示全部楼层
本帖最后由 makeitbai 于 2015-3-14 10:04 编辑

问题已经解决,初始化代码和开始捕获可以分开,这样不用每次照相都等待几分钟的初始化,问题的关键是不要关掉camera的时钟,现在出厂测试程序的基础上,修改部分代码,并贴出来供新手参考:
我把摄像头测试程序分为二部分,CameraInit();//camera init,CameraOn();
1、
void CameraInit(void){//
int i;
CamReset();
// Initializing camif
        rCLKCON |= (1<<19); // enable camclk
        CamPortSet();        
        ChangeUPllValue(56, 2, 1);                // UPLL clock = 96MHz, PLL input 12MHz
        rCLKDIVN|=(1<<3); // UCLK 48MHz setting for UPLL 96MHz
        // 0:48MHz, 1:24MHz, 2:16MHz, 3:12MHz...
        // Camera clock = UPLL/[(CAMCLK_DIV+1)X2]

        SetCAMClockDivider(CAMCLK24000000); //Set Camera Clock 24MHz s5x532, OV9650

        i = Test_OV9650();
        if( i )
        {
                Uart_Printf("\nTest is failed!!!\n");
                return ;
        }
        // Initialize Camera interface
        if(LCD_Type == LCDT35)
                CamInit(240, 320, 240, 320, 0, 0,  CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);
        else if((LCD_Type == LCDW35)||(LCD_Type == LCDS35))
                CamInit(320, 240, 320, 240, 100, 100,  CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);               
        else if(LCD_Type == LCDW43)
                CamInit(480, 272, 480, 272, 100, 100,  CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);               
        else if(LCD_Type == VGA)
                CamInit(640, 480, 640, 480, 100, 100,  CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);               
        else if(LCD_Type == LCDA70)
                CamInit(800, 480, 800, 480, 100, 100,  CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);               
        //Uart_Printf("preview sc control = %x\n", rCIPRSCCTRL);

        Uart_Printf("Initializing end...\n");
}
2、
void CameraOn(void)
{   
   // Lcd_TFT_Init();
        Uart_Printf("\nCamera on\n");
        Test_CamPreview() ;
        
        Uart_Printf("\nCamera off\n");

        //rCLKCON &= ~(1<<19); // disable camclk,想要连续采集图像,不要关闭camera时钟!!!
}
其中Test_CamPreview() ;就是除去初始化代码剩下的部分
包括 Start Capture,死循环刷新图像,CamCaptureStop等部分
以上是我在实验中测试出来的,大神勿拍砖
回复

使用道具 举报

mugeryang 发表于 2015-7-1 18:13:19 | 显示全部楼层
没有解决你前面提到的,将LCD_BUFFER取来使用的目的啊?
回复

使用道具 举报

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

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-10-28 07:36 , Processed in 2.044487 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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