FC2カウンター FPGAの部屋 CMOSカメラから画像を入力してディスプレイへ出力12(実機でテスト、うまくいかない)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

CMOSカメラから画像を入力してディスプレイへ出力12(実機でテスト、うまくいかない)

前回でシミュレーションが大体終わったので、ISE11.3でインプリメントして、ボードにコンフィグして確かめてみた。そうしら、みごとにCMOSカメラの映像信号が出ない。
Chipscopeを入れて確かめてみたのだが、HREFがずっと0、cam_clk_resetが0ということは、DCMがロックされているので、図2のCMOSカメラに入っているCLKは出ている。もっともそのクロックでChipscope が動いているのだが。。。mclk_locked は0でmclk が来ていないようだ。mclk はCMOSカメラのPCLKをDCMに入れて、出てきたクロックで、回路全体で使用するものだ。
Camera_Disp_22_091015.png
     図1 最初のChipscope波形

Camera_Disp_6_090921.png
           図2 クロック系統図

CMOSカメラ (OV7640) のマニュアルを読んでみると、ts:RESET (Setting time after software/hardware reset) が1ms となっている。RESETの期間が1ms というわけではないような気もするが、今まではDCMのロックまでに期間でリセットを出力していたので、今度はカウンタでカウントして1.37ms のリセットを出力することにした。

 -- CMOSカメラ用のリセットを出力する(1.37ms)
    -- CMOSカメラのRESETを出力するために32,768カウントする。(41.67ns * 32768 = 1.37ms)
    process(cam_clk_node) begin
        if cam_clk_node'event and cam_clk_node='1' then
            if cam_clk_locked='0' then
                cam_rst_cnt <= (others => '0');
            elsif cam_rst_cnt(15)='0' then -- 最上位が0の時はカウントして、1のなったらそこで停止
                cam_rst_cnt <= cam_rst_cnt + 1;
            end if;
        end if;
    end process;
    n_cam_reset <= cam_rst_cnt(15); -- CMOSカメラ用のリセットを出力する(1.37ms)


そうすると、mclk_locked は1になって、PCLKが出力されてきたみたいだが、HREFは今度は1のままになっている。データ (cam_ydata_2d) も何か来ていたようだ。cam_mem_addr も回っているし、何か動いているのが分かるが、まだ、HREFが定期的に0から1、1から0になっていない。
Camera_Disp_23_091015.png

何かおかしい?以前のカラーデータを出力するビットファイルを入れると2回に1回は正常に表示されるので、システムは正常だ。(DWM誌の2007年8月号と2007年10月号の基板でカメラの画像を表示
それでもおかしいので、もしかしたら、”DWM誌の2007年8月号と2007年10月号の基板でカメラの画像を表示2”と同様な原因も考えられる。
あるいは、CMOSカメラの仕様手順がおかしいということも考えられる。I2Cのクロックとデータを無視していたので、ポートを生かして下のように記述してみたが変化なし。

cam_sio_c <= '1';
cam_sio_d <= 'Z';


もう少し、DWM誌の2007年8月号を読んで勉強してみようと思う。
今のところ一番怪しいのはDCMの位置だろうか?それに、上のVHDLリストで n_cam_reset <= cam_rst_cnt(15); を n_cam_reset <= not cam_rst_cnt(15); としただけで関係ないはずのChipscope 用のクロックまで出なくなってしまうようなのだ。これはいかにもおかしいしあやしい?このクロックは48MHz水晶発振器のクロックを直接DCMを通して24MHzにしただけのクロックなので、変更しても止まるはずはないのだが。。。
DCMをはずしてみるというのも1つの手かもしれない。
  1. 2009年10月16日 05:31 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:2

コメント

パワーダウンのままってことはないですよね?メーカーによってオープンでイネーブルとディセーブルが違っていたりしました。
カメラ内のDSPは同期リセットになってることが多いので、カメラへのクロックはゲートしない方がいいです。
1msはリセット解除して内部の初期化が完了する時間で、完了して10フレームはゴミを出力かな。
リセット時間そのものは1msで十分だと思います。

オムニヴィジョンのHP行くと、詳細なデータシートはNDA結べって出るんですね。相変わらず冷たい。
  1. 2009/10/20(火) 13:44:28 |
  2. URL |
  3. おる #-
  4. [ 編集 ]

おるさん、こんにちは。情報ありがとうございました。
>リセット時間そのものは1msで十分だと思います。
了解しました。DCMがロックするまでの時間ではリセット時間が足りないようです。
家に帰ってからブログを書きますが、RESETを0固定にするとHREF, VSYNC, データが出てました。とりあえず良かったです。
  1. 2009/10/20(火) 15:45:22 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/1259-c13a2789
この記事にトラックバックする(FC2ブログユーザー)