AitendoにOV7670を使ったカメラモジュールが出ています。なんだかガッチリとした印象を受けるレンズが付いています。2.54mmピッチで足が出ているのがちょっと魅力的。
このモジュール本体もイイのですが、紹介されている応用参考回路に興味を持ちました。ATMEGA32を使っています。まったく説明が無いので、この回路図から、どうやってカメラからのデータを拾うのかを推測するという楽しみが生まれます。
次のような手順で、カメラから出力されるデータをATMEGA32を介さずに、そのままLCDに流しこめるのではないでしょうか?
と、まぁ、ざっとこんな仕掛けで1フレーム分のデータをLCDに送って、表示することができると思われます。LCDに表示された画像は、LCDへREADコマンドを送って読み取ることができますから、それをSDカードに書き込んでやることもできるでしょう。LCDの画面サイズよりも大きい解像度をサポートすることができないという制約はありますが、安価なATMEGAで自作デジカメが作れそうです。LCD表示をメモリ代りに使うなんて、うまいこと考えたもんですねぇ。どなたか、挑戦してみませんか?
このモジュール本体もイイのですが、紹介されている応用参考回路に興味を持ちました。ATMEGA32を使っています。まったく説明が無いので、この回路図から、どうやってカメラからのデータを拾うのかを推測するという楽しみが生まれます。
- MEGA32には2KしかRAMがありませんから、カメラからのフレーム画像データを全部蓄えることはできません。たとえ1ラスタ分であってもピクセル毎にRGBデータの保存に2バイトは必要なので、VGAであれば640*2 = 1280バイトになってしまいます。QCIFなら176*2 = 352バイトなので、数ラスタなら蓄えられます。
- LCDは16ビットバス接続のものを使っていますが、ATMEGAからは8ビット分のデータしか出ていません。そうすると、このLCDは8ビットでもつなげられるモードがあり、実際にはD8~D15しか使っていないのではないでしょうか。
- SPIは何に使っているのでしょうか?画像保存用のSDカードでしょうか?FAT動かすためには、そのためのバッファメモリが必要となりますから、いよいよラスタデータなんか蓄えていられません。
- PCLKとHREFの2つの信号は、カメラからのピクセルクロック信号と水平同期信号です。これらの信号が7400でゲーティングされてLCDへのWRとなっています。つまりは、カメラからのクロック信号で、そのままLCDへ書き込んでいることになりますね。
次のような手順で、カメラから出力されるデータをATMEGA32を介さずに、そのままLCDに流しこめるのではないでしょうか?
- LCDはRGB565のフォーマットをサポートしているでしょうから、カメラもRGB565で出力するように初期化しておきます。
- カメラの画像サイズにあわせて、LCDの描画ウィンドウを設定し、連続ピクセル描画コマンドを発行します。
- カメラへのRS信号を反転し、以後書き込まれるのはコマンドではなく、データであることを指示します。
- カメラからの画像出力を許可し、VSYNC信号の立下りを待ちます。
- VSYNCを検出したら、EN_EXCLKにHを出力し、CMOS_CSにLを出力します。すると、カメラからのRGBデータは74245を介してHREFの期間だけPCLKに同期してLCDに流れ始めます。
- MEGA32は、VSYNCの立ち上がりを検出したら、CMOS_CSとEN_EXCLKを反転してカメラからのデータを止めます。
- 最後に、連続描画動作を止めるためのコマンドをLCDに送ります。
と、まぁ、ざっとこんな仕掛けで1フレーム分のデータをLCDに送って、表示することができると思われます。LCDに表示された画像は、LCDへREADコマンドを送って読み取ることができますから、それをSDカードに書き込んでやることもできるでしょう。LCDの画面サイズよりも大きい解像度をサポートすることができないという制約はありますが、安価なATMEGAで自作デジカメが作れそうです。LCD表示をメモリ代りに使うなんて、うまいこと考えたもんですねぇ。どなたか、挑戦してみませんか?
たぶん、仰る通りの方法ではないかと私も思いました。
実際に自作デジカメとなるとねぇ。
作る楽しみで終わりそう。
わたしはCMOSカメラのインタフェースを使いたいがために、AT91SAM9260を買ってしまったくらいなので、こんなに簡単につなげられると知ってちょっと驚きました。ハード屋さんなら、ごく自然にこういう発想が出てくるものなのでしょうか。
私もソフト系なので、なんとも。
応用例の回路図を見ていると作ってみたくなります。
外部RAMを付けてカメラから外部RAMへ直接書き込むように出来れば低能力マイコンでもVGAで撮影出来るかもしれませんね。
Blogの写真はいつもVGAでしか撮っていませんが、VGAで充分に実用的だと思っています。
また、CMOSカメラで何か試してみたくなってきました。
Following two projects use DMA to send image data to SPI connected LCD.
http://youtu.be/jYKhIX_3XGI
http://youtu.be/I8q9fPOStbI
Below project uses OV9650 and LCD is connected through 16bit parallel interface. In this project, data is sent via MCU software controlled GPIO.
http://youtu.be/jLEHPgfWVxA
All above three projects use DMA to capture image data from CMOS camera.