OV7670(FIFO無)のフレームレートを変更するにはどうすればいいの? [Arduino]
衝動買いをしてしまった OV7670(FIFO無)。
FIFOメモリが無いので、カメラが垂れ流す映像データの隙間で処理をしないといけません。しかし、貧弱なArduinoのマイコンでは高速で処理するには難しく、カメラが吐き出すデータの間隔を広げて処理時間を稼ぐしかありません。
そのために出来ることは2つ。
1) フレームレート(fps)を遅くすること
2) 画像の解像度を低くすること
今回はフレームレート(fps)を遅くするにはどうすればよいか調べてみました。
フレームレート(frame per second)は1秒間にくる画像の数のことです。例えばテレビは1秒間に30枚の画像を処理するので30fpsになります。今回はカメラが送る画像を、例えば1秒間に10枚など、少なくすればデータの間隔が広がり処理時間を稼げることになります。
ということでOV7670の制御方法を調べてみたのですが、レジスタの使い方がイマイチ分かりません。Google 先生に訪ねてみると、参考になるサイトを教えてくれました!
Hacking the OV7670 camera module (SCCB cheat sheet inside)
http://embeddedprogrammer.blogspot.nl/2012/07/hacking-ov7670-camera-module-sccb-cheat.html
フレームレート(fps)を調整するにはPCLKの数値を変更すればよさそうです。上記サイトによるとPCLKが24MHzの場合は30fpsになり12MHzの場合は15fpsとなるようです。(因果関係はよく分かってません・・・タイミングチャートを紐解けば理解できると思いますが)
PCLKは下記のレジスタで制御できるようです。(Internal Clock の説明がデータシートに何もないので確証はありません)
これらから OV7670 の入力クロックが 8MHz の時に、24MHz を得るには下記のようにレジスタを設定すればよいことになります。(上記サイトにも記述がありますが、入力クロック 8MHz は規格外です)
・CLKRC Bit[6] を "0" に設定
・CLKRC Bit[0-5] を "1" にして分周を ”2” に設定
・DBLV Bit[7-6] を "b10" にしてPLLを入力クロックの6倍に設定
・8MHz x 6 / (Bit[0-5] + 1) =48MHz / (b000001 + 1) = 24MHz
実際にできるかどうか分かりませんが、Bit[0-5] を "b001011 [d11]" に設定すれば PCLK を 4MHz まで落とせて 5fps まで落とせるかも知れません。
次は解像度を変更する方法について確認したいと思います。
(^_^)/~
FIFOメモリが無いので、カメラが垂れ流す映像データの隙間で処理をしないといけません。しかし、貧弱なArduinoのマイコンでは高速で処理するには難しく、カメラが吐き出すデータの間隔を広げて処理時間を稼ぐしかありません。
そのために出来ることは2つ。
1) フレームレート(fps)を遅くすること
2) 画像の解像度を低くすること
今回はフレームレート(fps)を遅くするにはどうすればよいか調べてみました。
フレームレート(frame per second)は1秒間にくる画像の数のことです。例えばテレビは1秒間に30枚の画像を処理するので30fpsになります。今回はカメラが送る画像を、例えば1秒間に10枚など、少なくすればデータの間隔が広がり処理時間を稼げることになります。
ということでOV7670の制御方法を調べてみたのですが、レジスタの使い方がイマイチ分かりません。Google 先生に訪ねてみると、参考になるサイトを教えてくれました!
Hacking the OV7670 camera module (SCCB cheat sheet inside)
http://embeddedprogrammer.blogspot.nl/2012/07/hacking-ov7670-camera-module-sccb-cheat.html
フレームレート(fps)を調整するにはPCLKの数値を変更すればよさそうです。上記サイトによるとPCLKが24MHzの場合は30fpsになり12MHzの場合は15fpsとなるようです。(因果関係はよく分かってません・・・タイミングチャートを紐解けば理解できると思いますが)
PCLKは下記のレジスタで制御できるようです。(Internal Clock の説明がデータシートに何もないので確証はありません)
これらから OV7670 の入力クロックが 8MHz の時に、24MHz を得るには下記のようにレジスタを設定すればよいことになります。(上記サイトにも記述がありますが、入力クロック 8MHz は規格外です)
・CLKRC Bit[6] を "0" に設定
・CLKRC Bit[0-5] を "1" にして分周を ”2” に設定
・DBLV Bit[7-6] を "b10" にしてPLLを入力クロックの6倍に設定
・8MHz x 6 / (Bit[0-5] + 1) =48MHz / (b000001 + 1) = 24MHz
実際にできるかどうか分かりませんが、Bit[0-5] を "b001011 [d11]" に設定すれば PCLK を 4MHz まで落とせて 5fps まで落とせるかも知れません。
次は解像度を変更する方法について確認したいと思います。
(^_^)/~
OV7670 Camera Module 〈 Arduino関連 〉
- 出版社/メーカー: elecfreaks
- メディア:
カメラ・モジュールの動かし方と応用製作(トランジスタ技術SPECIAL): 色判定から暗視/防犯まで ディジタル処理自由自在
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2014/05/21
- メディア: 単行本
Beginning Arduino ov7670 Camera Development (English Edition)
- 出版社/メーカー:
- 発売日: 2015/07/03
- メディア: Kindle版
こんばんは~コメントありがとうございます。
おそ松くん、おそ松さんと言うそうですね。
うちの娘もハマっています(笑)
by ワンモア (2015-12-25 00:16)
ワンモアさん、コメントありがとうございます。何がよいのかよく分かりませんが、グッズにすごい大金をつぎ込んでます。いい商売ですよね~。
by ys_oota (2015-12-25 01:38)