Home STMマイコンでOV7670を使う(2)
Post
Cancel

STMマイコンでOV7670を使う(2)

前回はOV7670からプロダクトIDを読むところを行いました. プロダクトIDはI2C通信で0x0aアドレスにアクセスすることで読み出すことができました.

img

今回はOV7670の初期設定の方法を書いていきます.

OV7670の出力フォーマット

OV7670はさまざまなフォーマットで画像を出力することができます. 初期設定で出力のフォーマットを設定します.

OV7670の出力フォーマットにはRGB565やRGB444,YUV等があります. また,VGAやQVGA等の解像度が設定できます.

例としてRGB565について説明します. RGB565は(R:赤,G:緑,B:青)を2バイトで表現します. 565はそれぞれの色のビット数を表しています. 通常RGBはそれぞれ1バイト(8ビット)で表すので足りないビットは0で埋めます.

img

次に解像度について説明します. VGAは640×480ピクセルです.QVGAは320×240ピクセルでVGAの4分の1のサイズです.

OV7670の設定

設定はI2C通信で任意のアドレスに設定したい値を書き込むことで行います. 例えば0x12アドレスには解像度のフォーマットをどれにするか書き込みます. また,0x12アドレスに0x80を書き込むと設定をリセットすることができます. 以下は0x12アドレスに0x80を書き込むプログラムです.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <Wire.h>
#define OV7670_ADDR 0x21

void setup() {
	// 省略

	Wire.beginTransmission(OV7670_ADDR);
	Wire.write(0x12);
	Wire.write(0x80);
	Wire.endTransmission();
}

void loop(){}

OV7670を適切に使うには多くの項目を設定する必要があります. OV7670を使用しているプログラムを検索してみると,上記の書き込むプログラムを関数にして,書き込み先のアドレスと書き込む値の2次元配列を用意し,for文で書き込むという処理をしています. 今回はここで書かれているプログラムを参考にしてみました.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <Wire.h>
#define OV7670_ADDR 0x21
#define REG_BATT 0xFF

const uint8_t OV7670_reg[][2] = {
	// Color mode related
	{0x12, 0x14},			// QVGA, RGB
	{0x8c, 0x00},			// RGB444 Disable
	{0x40, 0x10 + 0xc0},	// RGB565, 00 - FF
	{0x3a, 0x04 + 0},		// UYVY
	{0x3d, 0x80 + 0x00},	// gamma enable, UV auto adjust, UYVY
	{0xb0, 0x84},			// important

	// 省略

	{REG_BATT, REG_BATT},
}

static void ov7670_write(uint8_t regAddr, uint8_t data) {
	Wire.beginTransmission(OV7670_ADDR);
	Wire.write(regAddr);
	Wire.write(data);
	Wire.endTransmission();
}

// 省略

void setup() {
	// 省略

	ov7670_write(0x12, 0x80); // RESET
	delay(30);
	// ov7670の設定を書き込む
	for (int i = 0; OV7670_reg[i][0] != REG_BATT; i++)
	{
		ov7670_write(OV7670_reg[i][0], OV7670_reg[i][1]);
		delay(1);
	}
}

void loop(){}

まとめ

今回はOV7670に初期設定を書き込むところまでできました.

This post is licensed under CC BY 4.0 by the author.

STMマイコンでOV7670を使う(1)

Raspberry Pi zero wでBluetooth接続したときの話