This page describle the basic control over the sensor registers using Arducam camera breakout board, it might not be able to cover all the detail register operations, but give you an insight how to adjust these settings.
Sensor I2C Slave Address
The MT9D111 camera I2C 8-bit slave address is fixed to 0x90. With 8bit regsiter address, and 16bit register value. And there are three register banks (pages), the Sensor Core Registers , IFP Registers Page1 and Page 2 registers. Using 0xF0 register to assign which bank or page to access.
In the Page0 (Sensor Core Register), there is product ID register 0x00 which can help diagnose if the I2C bus is accessable and determin the camera models.
|Product ID Register||Value|
You need a basic settings to bring up the sensor and make it working in normal streaming mode. Here is the sample config files for USB camera shield.
|800 x 600||MT9D111_800x600_0x90.cfg|
|1600 x 1200||MT9D111_1600x1200_0x90.cfg|
There are two context registers called context A and context B. Context A is used as higher frame rate preview settings which also support AEC/AWB and context B is used for capture which exposure time and white balance is fixed from the preview values. User can switch between these two settings without rewrite the full set of these two different settings.
Switch from Context A to Context B
REG = 0xF0, 0x0001 REG = 0xC6, 0xA120 REG = 0xC8, 0x02 REG = 0xC6, 0xA103 DELAY = 500 REG = 0xC8, 0x02
Switch from Context B to Context A
REG = 0xF0, 0x0001 REG = 0xC6, 0xA120 REG = 0xC8, 0x00 REG = 0xC6, 0xA103 REG = 0xC8, 0x01