CMOS Camera Overview

In one of my personal pursuits, I wanted to experiment with CMOS cameras.  I interfaced with a few different cameras and the project below is for the camera that gave the best result.  The camera was interfaced with a Spartan 3 FPGA and streamed its output to a VGA port.  The camera resolution is 640 X 480 and runs at 60 frames per second.

The core of the project is controlled by the NMPSM3 soft processor that is discussed in its own project section.  An I2C controller was created to configure the camera.  Another control module was created to capture and buffer video data from the camera.  It sends an interrupt to the processor when data is ready to be read.  The video data is then stored in cellular RAM located on the FPGA development board.  The cellular RAM is operated in burst mode and controlled by a dedicated control module developed for this project.  There is also a VGA module that sends an interrupt to the processor when it is ready for data.


CMOS Camera Pictures

CMOS PCB, Top

CMOS PCB, Top

Camera PCB, Bottom

Camera PCB, Bottom

Complete Camera Project

Complete Camera Project


CMOS Camera Image Captures

CMOS Camera Image 1

CMOS Camera Image 1

CMOS Camera Image 2

CMOS Camera Image 2

CMOS Camera Image 3

CMOS Camera Image 3


CMOS Camera Video Capture


CMOS Camera Schematic

Camera Board Schematic

Camera Board Schematic


CMOS Camera PCB Design

Camera PCB Design, Top Layer

Camera PCB Design, Top Layer

Camera PCB Design, Bottom Layer

Camera PCB Design, Bottom Layer

 
Camera PCB Design, All Layers

Camera PCB Design, All Layers

 

CMOS Camera FPGA Hardware

The CMOS camera was based on a Digilent Nexys 2 FPGA development board.  One of the unique parts of the project is the use of the on-board cellular RAM in synchronous (burst) mode.  I could find no sample projects on the internet that used the RAM in its burst mode.  A large portion of the project was dedicated to making the cellular RAM burst mode controller.

Main.v    NMPSM3.v    VGA.v    I2CTest.v    uart.v

CellRAMBurstController.v    cam_Controller.v    dataMUX.v    FF.v


CMOS Camera Software

As with my other projects that use the NMPSM processor, assembly language had to be written to control the project.

camera.asm

camera.coe