年越しテーマとなってしまった OV7670(FIFO無)。重い腰をあげ、Arduinoで動かすべく調査を再開しました。





OV7670を駆動するには、前回の調査の結果 8MHz以上の入力クロック(XCLK)が必要だということが分かりました。


OV7670(FIFO無)のフレームレートを変更するにはどうすればいいの?
http://makers-with-myson.blog.so-net.ne.jp/2015-12-23


問題はMHzオーダーのクロックを Arduino から安定的に供給する手段です。Arduino の内部クロックを直接外に出せるピンはないかなと探したのですが、どうやらなさそう。

いろいろ調べたところ、皆さん PWM を使っている様です。PWM は AnalogWrite で使うのが一般的ですが周波数が低すぎ(490Hz)。MHzオーダーのクロックを得るには Fast PWM モードを使うのがよさそうです。


Fast PWM on ATmega328, up to 8MHz
http://withinspecifications.30ohm.com/2014/02/20/Fast-PWM-on-AtMega328/


う~ん、なんか難しい・・・。(´・ω・`)

細かい使い方は追々調べるとして、てっとり早いサンプルがないかなと探したら、グーグル先生から上記サイトの内容を補足してくれるスレッドを教えてもらいました。ありがたや~。


http://arduino.stackexchange.com/questions/9408/generating-a-pwm-frequency-greater-than-125-khz-using-arduino-uno

// A sketch that creates an 8 MHz, 50% duty cycle PWM and a 250 kHz,
// 6-bit resolution PWM with varying duty cycle (changes every 5 µs
// or about every period.

#include &ltavr/io.h>
#include &ltutil/delay.h>

int main(void)
{
pinMode(3, OUTPUT); // Output pin for OCR2B
pinMode(5, OUTPUT); // Output pin for OCR0B

// Set up the 250 kHz output
TCCR2A = bit(COM2A1) | bit(COM2B1) | bit(WGM21) | bit(WGM20);
TCCR2B = bit(WGM22) | bit(CS20);
OCR2A = 63;
OCR2B = 31;

// Set up the 8 MHz output
TCCR0A = bit(COM0A1) | bit(COM0B1) | bit(WGM01) | bit(WGM00);
TCCR0B = bit(WGM02) | bit(CS00);
OCR0A = 1;
OCR0B = 0;
}


このコードの 8MHz output の設定を使えばよさそうですね。しかしPWMを使いこなすのはめんどくさそう。まだまだ調査は続きます。
\(`・ω・´)






OV7670 Camera Module 〈 Arduino関連 〉

  • 出版社/メーカー: elecfreaks
  • メディア:



サインスマート(SainSmart) Nano 3.0 互換ボード for Arduino

  • 出版社/メーカー: サインスマート(SainSmart)
  • メディア: Personal Computers



Beginning Arduino ov7670 Camera Development (English Edition)

  • 出版社/メーカー:
  • 発売日: 2015/07/03
  • メディア: Kindle版