[[FrontPage]] #contents 2012/02/26からのアクセス回数 &counter; ** mbedに液晶をつなぐ [#q4e6ba06] カメラのテストをするには、画像を表示する液晶が必要です。 そこで、トラ技別冊のMARYボードの周辺機器として販売されているカラー有機EL ディスプレイ基板を使うことにしました ((カメラが多くのピンを必要とするので、SPI接続の液晶が候補になりました)) 。 &ref(oled.png); *** MAPLEボードに接続 [#s374867b] mbedやXPresso1768が接続でき、MARYの周辺機器もつながるMAPLEボードを使う ことにしました。 &ref(MAPLE_board.png); *** カメラボード [#ra4bd667] カメラの接続もMARYの拡張基板にコネクターを付けてみました。 &ref(camera_board.png); ** mbedのライブラリーすごい! [#o77c3d7f] さすがmbedですね。 検索すると、すぐにMARYの有機液晶ディスプレイとチョコっとカメラの ライブラリーが見つかりました。 - [[OV7670_with_AL422B_QQVGA_test>https://mbed.org/users/mio/programs/OV7670_with_AL422B_QQVGA_test/m5cku4]] - [[MARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)>http://mbed.org/users/nxpfan/notebook/MARMEX_OB_oled_lib/]] *** mbedのローカルコンパイル環境 [#e0c46b06] デバッグができるようにmbedのローカルコンパイル環境を以下の様に整えました。 &ref(project.png); *** 少しずつ試す [#e8bbbdf8] 最初は、上手く接続できているか確かめるために少しずつデバッガで 動作を確認しながら進めました。 &ref(main.cpp);のmainの関数は以下の様になりました。 #pre{{ int main() { // OLEDのテスト表示 test_oled(); oled1.locate( 0, 3 ); // カメラの初期化 OV7670 camera( p28,p27, // SDA,SCL(I2C / SCCB) p21,p22,p20, // VSYNC,HREF,WEN(FIFO) p19,p18,p17,p16,p15,p14,p13,p12, // D7-D0 p23,p24,p25) ; // RRST,OE,RCLK // カメラのリセット oled1.printf("Camera resetting..¥r¥n") ; camera.Reset() ; // カメラの初期化 oled1.printf("Camera initializing..¥r¥n") ; camera.InitQQVGA() ; // カメラの画像を取り込む while(1) { myled = 1; camera.CaptureNext() ; while(camera.CaptureDone() == false) ; camera.ReadStart() ; myled = 0; for (int y = 0; y < SIZEY; y++) { int r, g, b,d1, d2; for (int x = 0; x < SIZEX; x++) { d1 = camera.ReadOneByte() ; // upper nibble is XXX , lower nibble is B d2 = camera.ReadOneByte() ; // upper nibble is G , lower nibble is R b = (d1 & 0x0F) ; g = (d2 & 0xF0) >> 4 ; r = (d2 & 0x0F) ; if (y < 120 && x < 128) oled1.pixel( x, y, (r << 20) | (g << 12) | (b << 4)); } } } } }} ** 何とか表示ができるまで [#s0a982dc] 最初に困ったのは、カメラのリセットの途中で止まってしまうことでした。 - カメラとのI2C接続ではプルアップ抵抗を使わない ということなので、MAPLEボード中央のDIPスイッチを3,4をオフにしました。 それでもガメラからの設定を確認するための、処理をいれると途中で止まって しまいましたので、今回は先に進むことを優先して、設定のチェックを外しました。 *** 画像の取り込み時間 [#df424151] 画像の取り込み時間がどのくらいか分かるようにcamera.CaptureNextの前後に LEDの点滅を入れてみました。 思った通り液晶ディスプレイへの表示に時間が掛かっていました。約1.5秒に1枚の 表示です。 また、表示上下に反転しているので今回は被写体のトラ技本を逆さまにして 表示しています。 画像のピントも調整しないと上手く表示できないので画像表示機能がないと他の 処理もできないことが分かりました。 &ref(board_setting.png); ** コメント [#rc1f1933] #vote(おもしろかった[4],そうでもない[1],わかりずらい[1]) #vote(おもしろかった[5],そうでもない[1],わかりずらい[1]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha