■ホビーロボット部品の製造・販売 
  モータコントローラ、センサ、音声、画像、無線モジュールなど、
■ホビーロボット制作記事のページ (各種マイコン、PCとの接続事例)
■特殊メイク、特殊材料の販売 ※特殊メイクのコーナーはこちらに移りました。
Top(お知らせ) 製品紹介 使い方とサンプルプログラム通信販売 リンク ロボット掲示板 会社案内
 Easy Robotics for all enthusiastic people!!!  ---HOBBY ROBOT PARTS SHOP ASAKUSAGIKEN---   Since 2003...

イメージセンサー CMOS-EYE の紹介 ・ 仕様 ・ 使い方

※シリアルコマンド命令4にバグのある可能性があります。(2007.2.14)
くわしくはこちら

  
※写真は、1280x1024の17インチモニタで表示した場合に、ほぼ原寸となります。
※このページは印刷するとA4の幅となります。
【おしらせ】

・2007.2.14 生産ロットによって、シリアルコマンドの命令4にバグのあるものが発見されました。シリアル接続で、命令4をUART端子指定で使おうとしてもデータが送られなかった場合は、恐れ入りますが浅草ギ研まで商品を着払いにて送付願います。こちらでファームウェアを書き換えた上でご返送いたします。お手数をおかけしており申し訳ありません。

<このページのもくじ>


・製品の概要
・ハードウェア仕様
・CMOS-EYEを使うために必要な条件と、実現可能なこと
・ピン配列
・外形図
・価格
・撮影画像及び、画像処理の例
・画像フォーマットとメモリ領域
・バス接続での使い方
・シリアル接続での使い方
・IOを3.3Vから5Vに変換する方法
・撮影した画面をPCで確認する方法
・画像処理の勉強について
・接続例とサンプルプログラム
・Q&A
・故障/不具合と思ったら?
・質問について

・オプション5V変換ボードの説明のページ



注意)

※製品をご購入前に「このセンサーを使うために必要な条件と、実現可能なこと」をよくお読み下さい。

※このページは、マニュアル及び、仕様書を兼ねています。

※使用前に、このページをよくお読み下さい(特に注意、注釈のところもよくお読み下さい)。


<使用上の注意>

・このセンサーボードは電子機器です。作業時、輸送時には静電気対策を行ってください。ICの足や、各ピンを直接手で触ったりすると静電破壊される場合があります

・バッテリ使用時には電源ラインをショートさせると、バッテリが破裂・発火する可能性があります。作業中にはショートさせないよう十分注意して下さい。また、取り付け後も、あいている電源ラインに導電物質が触らないように注意して下さい。

・CMOS-EYEのセンサー部はFPCコネクタに接続されていますので抜き差しが可能ですが、非常にピン間が狭いコネクタなので、抜き差しするときちんと接続されない場合があります。特に、電源とGNDが近いので、斜めに挿入するとショート状態となり破損する可能性があります(数十秒のショートなら大丈夫です)。 よって、センサー部は極力取り外さないようにしてください。出荷時にはきちんと接続されているか確認されています。
 もし、外さなければならない場合になったら、ショートしているかどうかは、目玉の面の黒い大きなIC(3本足)が、電源投入後すぐに非常に熱くなりますのでこれで確認できます。電源がバッテリの場合はショートしてバッテリが発火する可能性がありますので、壊れても良いAC電源などでテストしてください。(やけどに注意して下さい。また、ICの足には触らないようにしてください。)


・下の写真の位置の取り付け穴の近くに、パターンがむき出しになっている場所(Mの字の左上の丸い場所)があります。この穴をネジ止めする場合は、電気を通さないネジをご使用下さい。この裏面も同様です(スルーホールなので)。(リリース後に発見されました。申し訳ありません。)
ネジがむき出しパターン(スルーホール)に接触している。

・添付の取り付け金具の穴の大きさはセンサとほぼ同じ大きさになっています。金具の穴はセンサよりも若干大きいですが、差し込む方向が少しでもななめになると入りません。強くセンサー部を押すと、センサーが壊れますので注意して下さい。差し込む方向がまっすぐの場合は軽い力でも入りますので根気よく差し込んで下さい。
 また、センサー部のピントはメーカー側で調整され、ボンドで固定されています。このボンド部がはみ出しているために金具の穴に入らない場合があります。この場合はボンド部をカッターなどで軽くけずってみて下さい。

電源端子は、プラスとマイナスを逆につなぐとほぼ間違いなく壊れますので注意して下さい。ショートは数十秒なら耐えられます。





<製品の概要>



■マイコンと接続して使用する、スタンドアローンのイメージセンサモジュール

  イメージセンサモジュール CMOS−EYE は、携帯電話用の超小型CMOSイメージセンサに、画像取り込み回路とSRAMをつけたもので、撮影した画像は白黒又はカラーでSRAMに格納され、マイコンからSRAMアクセスすることで自由に画像処理・認識を行うことができます。
※ユーザー側で用意した任意のマイコンをつなぎます。

■ホームページで画像処理プログラムについても解説

 ホビーでの画像処理・認識などは初めて、という方も多いと思います。浅草ギ研では、各種マイコンからCMOS−EYEの画像にアクセスして、画質改善・画像フィルタ・二値化・かんたんな画像認識・色位置判定などを行う、基本的なプログラミング例を紹介します。(このページ下の方で解説)


■撮影・処理画像をPCでモニタリングが可能

 CMOS−EYEにはRS232Cインターフェイス及び専用PCケーブルが付属しており、SRAM内のデータをPCなどへ転送することができます。転送されたデータをPC上での画像表示するには、ユーザー側でPCアプリケーションプログラムを組む必要がありますが、浅草ギ研では、Windowsの.NET環境での画面表示プログラムを配布しています。また、このプログラムのC#でのソースも公開しています。
※シリアル通信によるPCへの画像転送は、CMOS−EYEとマイコンを使ったシステム開発のデバック用です。転送速度などの面で、CMOS−EYE+PCでの本格的なロボット作成は難しく、CMOS−EYE+マイコンでの高速アクセスによる画像処理を基本に考えられています。


■内蔵の簡易画像処理プログラム

 CMOS−EYEは、基本的には、マイコンとCMOS−EYEのバス接続による高速画像処理を想定して作られています。しかし、手持ちのマイコンのIO数が足りない場合でも、シリアル通信経由での命令を送ることにより、撮影した画像を、内蔵の簡易画像処理プログラムで加工したり、情報を得たりすることが可能です。シリアル通信命令でできることは、下の「シリアル通信での使い方」を参照して購入前に確認してください。


■選べる解像度


 320x240、160x120、80x60の3種類の解像度を選択できるので、処理の内容によって解像度を使い分けることができます。


■他のAGR65シリーズに接続可能。CMOS−EYEとのバス接続で、手持ちのマイコンのIOを使い切っても、シリアルIOが残っていればサーボやセンサなども同じマイコンで動かすことができる

  オプションの5V変換ボードを装着することにより、ロボット神経システムAGB65シリーズのセンサやコントローラと同じシリアルラインを共有できます。AGB65シリーズについては「ロボット神経システムAGB65シリーズの説明」のページを参照願います。


■電源搭載で外部に電源回路不要!バッテリ駆動が可能!


  ボード上に電源回路を内蔵し、外部に電源回路が不要で、バッテリなどで駆動することができます。



■39x46mmの超小型設計!

  ロボットに基板を搭載する場合はその大きさがネックになりますが、CMOS−EYEは極力小さい部品で構成されており、実装面積が小さくて済みます。




<イメージセンサ部仕様>
画素
 640x480ベイヤーパターン ※CMOS-EYE全体では320x240が最高解像度です。(*1)
画像補正
 自動露出/オートホワイトバランス/RGBオートゲイン/蛍光灯フリッカ補正
画面方向
 上下左右に反転可能 ※CMOS-EYEのシリアルIO経由で設定します。
寸法
 寸法8x8mm 


<光学特性>
レンズ構成
 2群2枚
F値
 2.8
水平画角
 50度
撮像範囲
 20cm〜無限大 
OPLF
 なし 
IRCF
 あり 
TV歪曲
 <1.0% 


<モジュール部仕様(CMOS-EYE全体の仕様)>

電源電圧
 +4.8〜+15V (*2)
IO電圧
 3.3V (オプションボード装着により、5V可能)
消費電流
 平均35mA 最大45mA
記録フォーマット
 320x240 160x120 80x60 ドットの、RGB又は白黒 8bit データでSRAMに保存
SRAM容量
 512KByte (320x240カラーで2画面、80x60白黒で109画面分)
アクセス速度
 外部から画像へのアクセス速度 30nS (*3)
撮影所要時間
 70〜100mS (*4) 約10fps
バス接続
必要IO数
 【マイコンとバス接続する場合にマイコン側に以下の本数のIOが必要です。】
 アドレス(IN) 19本(解像度が最低の場合でも13本以上必要)
 データバス(IN/OUT) 8本
 SRAMコントロール(IN) 3本 (CE,OE,WEの3つ,SRAMの使い方は下で説明)
 解像度・カラー/白黒コントロール(IN) 3本
 シャッター端子(IN) 1本 (*5)
 BUSY出力(OUT) 1本 (*5)
 合計 35本 (*5:最低33本)   ※(IN)はCMOS-EYEへの入力 (OUT)はCMOS-EYEからの出力
他インターフェイス
 RS232Cポートx1 UART(3.3V)x1 シリアル通信により命令を送る場合に使用
固有ID
 98/99 スイッチにより2種類に切替可能 (*6)
内蔵プログラム
 【シリアル通信命令により下記処理が可能】
  ※バス接続時の同様の処理のサンプルプログラムを下で紹介しています。
 ●基本処理:撮影/画面反転/ソフトウェアリセット/画面コピー/四角形書き込み
 ●濃度変換:ガンマ補正/コントラスト強調 など
 ●画像フィルタ:雑音平滑化/微分(エッジ検出)/高域強調(ボケ・ブレ改善) など
 ●二値化処理:固定しきい値二値化/収縮・膨張/細線化/ラベリング など
 ●色処理:色・色相記憶/色・色相領域判定/色・色相領域マスク など
 ●動体検知:2画面の差の位置検出 など
 ●その他:ヒストグラム計算 など
寸法/重量
 寸法39x46mm 穴ピッチ35x42mmφ2.2 重量:10g
付属品
 ■PCケーブルx1

(*1)デジタルカメラなどと違い、マイコンでの画像処理の場合は、マイコンの処理スピードが低いので、あまり解像度を上げるとシステム全体の処理速度が非常に遅くなり、ロボットのセンサとしては現実的な速度が出せません。また、各種認識など、通常は160x120程度画素でほとんどの用途が足ります。
(*2)電源は5〜9Vのバッテリ駆動を想定して作られています。10Vを超える電圧の場合は、基板上のレギュレータIC(目玉が書いてある面のIC)が非常に熱くなりますので注意して下さい。熱による誤動作を防ぐ為、可能であれば、10V以上のバッテリを使用する場合には5V付近まで降圧して接続してください。放熱FANの取り付けなどにより熱対策を行う場合は、電圧が高くても熱による誤動作を防ぐとこができます。CMOS-EYEは内部3.3Vで動いており、レギュレータに余裕があるので、基板上の3.3V端子からは、外部に約700mAまで供給することができます。

(*3)オプションボードを装着して5V仕様にすると、アクセス速度は+8〜10nS余分にかかります。つまり全体で約40nS以上となります。
(*4)撮影所要時間は、撮影するタイミングで70〜100mSに可変となります。撮影中はBSY端子がLOWになりますので、これで撮影終了を検知します。撮影所要時間は解像度には依存しません(実際には解像度によらず640x480ベイヤーパターンをスキャンしてしまう。)
(*5)シャッター指示は、RS232C又はUARTへシリアル通信で命令を送ることによっても指示できます。撮影終了タイミングをシビアにみない場合はBUSY端子を使用しなくてもかまいません。その他のIOは、バス接続時には必須です。
(*6)オプションボードを使用して、ロボット神経システムAGB65シリーズと、シリアルラインを共有する場合は、IDでどのボードに対しての命令か判定します。シリアル通信による命令については以下で詳しく説明します。


−もくじへ戻る−



<CMOS-EYEを使うために必要な条件と、実現可能なこと>

■CMOS-EYEの主旨
 CMOS-EYEは基本的に、ユーザー手持ちのマイコンに接続して画像処理や認識を行うことを想定としたモジュールです。また、マイコンで画像処理システムを作る場合には、撮影したり計算した画像をモニタする仕組みが必要になりますので、開発中はPCで、撮影画面をモニタできるようになっています。


■CMOS-EYEを使ったシステムの方向性
 CMOS-EYEで、高速に動く画像認識システムをロボットなどに組み込む場合には、50MIPS(一命令1クロックで動くマイコンの場合、駆動周波数が50MHzのもの)以上の処理能力があるマイコンが適しています。2006年7月現在で、ホビー用途で入手可能なマイコンボードの中でこれに相当するのは、インターフェイス誌の付録にもなったSH2があります。当ページでは、SH2での使用方法も解説します。
 H8、PIC、AVR、ARM7などでロボットを作っている方が多いかと思います。これらは大体20MIPS以下程度の処理能力のものが多いようです。本格的に、リアルタイムに近い画像処理システムを作ろうとする場合は、プログラムを工夫したり、処理内容によって解像度を最低の80x60にしたりすれば、実用的なロボットシステムを作ることも可能です。H8、AVRの上位機種、例えばtinyではないH8、ATmega128(AVR)、ARM7などでは、浮動小数点演算を極力しないようにしたり、三角関数を計算ではなくテーブル参照で求めたりすれば、ある程度実用的なシステムを作ることができます。(プログラム例で詳細を解説)
 H8tinyや、一般的なPIC(12F,16F,18Fシリーズ)の場合は、まずIO数が足りないので、バス接続は難しいでしょう。しかし、CMOS−EYE内蔵プログラムを組み合わせた処理だけを行うのであれば、なんらかの画像センサーシステムとして使うことはできます。ちなみに、これらのマイコンは1命令が数クロックで動いたりするので、駆動周波数が高くても計算が速いとはいえない場合がありますのでお手持ちのマイコンの仕様をあらかじめ確認することをお勧めします。例えばPICの場合はほとんどの命令が4クロックで動くので、18Fシリーズあたりを20MHzで動かしても大体5MIPSになります。
 CMOS−EYE内蔵のプログラム(画像フィルタなど)は、約14MIPSのマイコンで計算しています。各プログラムは80x60の解像度の時、速いもので100〜300mS、時間がかかるもので3秒ほどかかります。よって、5MIPSのマイコンとバス接続した場合は、300mSかかる計算は840mSとなります。体感で、300mSはさほど時間がかからないように感じますが、1秒近いと明らかに時間がかかっているのがわかります。逆に、300mSかかる処理を50MIPSのマイコンで計算すると、84mSと一瞬でおわることになります。
 CMOS−EYE内蔵プログラムは、各値をきちんと計算しており、浮動小数点演算を多用したり、三角関数を計算で求めていますので、プログラミングによっては、14MIPS以下のマイコンをつないだ場合でも計算が速い(しかし、値は近似値で出る)ということもありえます。また、内蔵プログラムは、画面全ての領域に対して計算してしまいますので、なんらかの方法で画面の一部だけを計算するという方法も考えられます。


■マイコンの種類と、条件・実現可能なことの関係(まとめ)

<基本条件>
・マイコンの開発が行える環境を持っている
・マイコンのプログラミングができる
・PCを持っている(COMポートの空きが1つあること)
・インターネットが使用できる環境がある
・端子をハンダ付けする必要がある


<SH2などの3.3V駆動の高性能マイコンでシステムを構築する場合>
・IOに十分な空きがあることが必要ですが、この手のマイコンはIO数が多いものがほとんどなのでまず問題ないと思われます。
・CMOS−EYEとマイコンボードだけで、実用的なロボットの画像処理・認識システムの構築ができます。


<H8、AVRの上位機種(ATmega128など)、ARM7などのマイコンでシステムを構築する場合>

・5V駆動のマイコンボードが多いと思いますので、5V駆動の場合は、CMOS−EYEの3.3VIOを5Vに変換する回路を作る(下で説明します)か、オプションの5V変換ボードを購入する必要があります。
・IOの数が多いCPUの場合は、バス接続することができます。このとき、計算速度を速くするようにプログラムを考慮すれば、処理内容によっては実用的なシステムが作れます。
・IOが足りない場合は、シリアル通信のIO端子が空いていれば、CMOS−EYEに内蔵された画像処理のみを行うことは可能です。このとき、5V駆動のマイコンの場合は、マイコンのTXを5V−>3.3Vへ、マイコンのRXに5V<−3.3Vに変換する回路を作る必要があります。(オプションの5V変換ボードでもTX,RXを電圧変換しますが、シリアル機能しか使わない場合はコストパフォーマンスが悪いので、回路を自作することをお勧めします。変換方法については下で説明します。)


<H8tinyや一般的なPIC、AVRの下位機種(ATmega32など)でシステムを構築する場合>
・5V駆動が多いと思いますので、5V駆動の場合は、CMOS−EYEの3.3VIOを5Vに変換する回路を作る(下で説明します)か、オプションの5V変換ボードを購入する必要があります。必要があります。
・IO数が足りないものがほとんどだと思いますので、基本的にはシリアル通信経由の命令により、CMOS−EYE内蔵プログラムの処理のみを行うことになります。その中で、速度などの面で実用的なものには「色の記憶と位置判定」、「動体位置判定」があります。
・実用的な速度ではなくても、画像処理システムの入門、勉強にはなります。


■市販のロボットキットとの接続

 2006年7月現在の市販のロボットキットに付属しているコントローラ(基板のこと)のほとんどは、ユーザーが自由にプログラミングできないか、大量のIOを自由に使うことができないものが多いと思います。手持ちの市販ロボットキットを活用したい場合は、現時点では、フレーム・サーボ・筐体(外装)だけを使い、ユーザー自身で開発可能なマイコンボードに乗せ変えるのが現実的です。

 但し、ロボットのコントローラのシリアルIOが自由に使えて、かつ電気的に接続が可能(3.3V又は5Vからの変換が可能)で、なおかつ独自の通信制御をしていない(ACKなどを使用していない、フロー制御していない、ソフト的にパリティエラーチェックをしていない)場合は、CMOS−EYEの内蔵プログラムのみを使うことはできます。
 現在、これに該当するものに、姫路ソフトワークスのHSWBシリーズがあります。浅草ギ研では、HSWBシリーズとの接続検証を行う予定があります。(場合によっては、CMOS−EYE発売後のファームウェアバージョンアップ時の対応になる可能性があります。)


 参考として、以下に、マイコン別での処理時間を実験してみた結果を示します。処理内容は、バス接続で典型的な処理である周囲8近傍処理の空間フィルターである、「二値化画像の縮小処理」(サンプルプログラムのところで紹介してます)を行った場合の処理時間です。

マイコン 内部クロック IOクロック 処理時間
SH2(SH7144F) 50MHz 24MHz 96mS
CMOS-EYE内蔵PG 14.7Mhz 14.7MHz 310mS
AVR(ATmega128) 16MHz 16MHz 1040mS
H8Tiny(3687F) 20MHz 1200mS
※(撮影時間は除く)

−もくじへ戻る−



<ピン配列>


  



−もくじへ戻る−




<外形図>


  



−もくじへ戻る−




<CMOS-EYE価格>

 価格 29,800円(税込み)

<付属品>
 ・PCケーブル
 ・センサー取り付け金具(アルミ製)

<オプション>
 CMOS-EYE-5V 10,500円(税込み)
 ※CMOS−EYEに装着して、IOを5Vに変換する基板。ロボット神経システムAGB65シリーズとコネクタ互換。


 CMOS−EYEのファームウェアの書き換え方法とソースプログラムをご提供することも可能です。個別にメールにてお問い合わせ下さい。(条件によりますが、数十万円単位と高額になりますのでご了承下さい。)


−もくじへ戻る−



<撮影画像及び、画像処理の例>



■撮影例

白黒80x60


白黒160x120


白黒320x240


カラー80x60


カラー160x120


カラー320x240



■画像処理例(内蔵プログラムを使用。接続したマイコンでのプログラム例も下で説明)

<ニ値化画像の処理例>
1)白黒160x120撮影 2)ニ値化 3)細線化
4)図形抽出1 5)図形抽出2  
 
※4)は、3)の図形で「外周にかかっていない、連結数4が1個、端点数が4個」の図形領域を抽出という条件
※5)は、3)の図形で「外周にかかっていない、連結数3が1個、端点数が3個」の図形領域を抽出という条件
連結数は交点の線数です、詳しくはプログラミング例で詳細を説明します。


<カラー画像処理の例>

「80x60撮影」−>「色抽出」−>「1ライン縮小」−>「1ライン膨張」


その他の動作も、画像処理の組み合わせ次第でいろいろとできます。


−もくじへ戻る−


<画像フォーマットとメモリ領域>



■メモリ領域

 CMOS−EYEに搭載されているSRAMは、アドレスバス19本xデータ8ビットの容量があります。8ビット=1バイトですので、アドレスバス19本で0〜524,287バイトのアドレッシングが出来ます。

  

 全てのメモリ領域は自由に使うことができます。画像処理の場合、計算中の全画面データを一時的に格納する場合もあります。マイコンの場合には、マイコン内臓RAMだけですと画像処理には小さすぎるので、撮影データが入っていない領域を、一時データとして使うことも可能です。

 尚、シリアル接続で使用する場合は、463,999番地〜473,500番地は、計算結果などを格納する領域になっています。

 撮影する画像は、撮影指示(シャッターピンLOW又は、シリアル命令で指示)をした瞬間の、アドレスバスの値を先頭番地に、一画面分を連続したメモリ領域に記録します。

 CMOS−EYEのSRAMは揮発性メモリなので、撮影したデータは電源を切ると消えます。


■白黒画像フォーマット

 CMOS−EYEで扱う画像データは、1画素につき8ビットの解像度で表します。よって、1画素の濃淡は0〜255の数値で表されます。
 0が一番暗く、255が一番明るい値となります。

  

 ここでSRAMに画像が格納されるイメージを示します。

 これは、白黒80x60で撮影した画像をPCで表示したものです。

  

 この画像は、80x60=4,800バイトの大きさがあります。 撮影時にアドレス0(つまりアドレスバスが全てLOW)を指定していたとすると、画像データは0番地〜4,799番地に書き込まれます。

 上の画像を拡大してみましょう。

  −画面とアドレスの関係−
  

  

 このように、それぞれの番地に濃淡データが入ります。

 さらに左上を拡大して、実際の濃淡データを示します。

  −画面と濃淡の関係−
  

 上の数値は、CMOS−EYE内部のSRAMの各アドレスのデータを読み取った値です。このように、各画素の濃淡データが数値として記録されます。

 同じように、160x120で撮影した場合は、160x120=19,200番地の連続した場所に格納されます。320x240の場合は76,800番地の連続した場所に格納されます。


■カラー画像フォーマット

 カラーはR(赤)、G(緑)、B(青)の濃淡データで記録されます。濃淡は白黒フォーマットと同じイメージで格納されますが、3色分あるので、データ量は3倍になります。記録は、R・G・Bの順番に、SRAMの連続した領域に格納されます。

  

 この例の画像は、160x120のカラーで記録されています。各色のデータは160x120=19200バイトの大きさがあります。今、撮影先頭アドレスを0番地と指定していたとすると、SRAMには次のように格納されます。

  

 このように、カラー80x60の場合は、80x60x3=14,400バイトの連続した領域、160x120の場合は160x120x3=57,600バイトの連続した領域、320x240の場合は320x240x3=230,400バイトの連続した領域に、画像が記録されます。


 カラーで画像処理を行う場合には、RGB以外でも色の表し方があり、画像処理の内容によっては、RGBの濃淡を別な色系列に変換した方が計算効率が早い場合があります。
 Rは赤の濃淡だけ、Gは緑だけ、Bは青だけを表しますが、白は各色が最大になったときに白となります。よって、例えば、赤い部分を抽出する場合に、赤の濃淡だけで計算すると、白に近い部分も検出してしまい、意図したような結果になりませんので、RGB全ての色を使って計算する必要があります。
 RGB全てを同じ濃度にすると、グレーとなります。たとえば、R=G=B=127にすると、濃淡が中間の灰色になります。
 カラー画像の扱いについては、プログラム例のところでさらに詳しく説明します。


−もくじへ戻る−



<バス接続での使い方>


■接続図
  
  ※5V駆動マイコンと接続する場合には、電圧変換回路を自作するか、オプションの5V変換ボードを装着します。

 端子のハンダ付け

 接続は上の図を見ながら接続してください。CMOS−EYEの各端子は2.54mmピッチのスルーホール(一般的なユニバーサル基板と同じ穴間隔)が空いています。 各端子に線、又はヘッダピン、又は手持ちのコネクタなどをハンダ付けして、マイコン側に接続してください。
  線で接続する場合は、長さを極力短くしてください。長い場合はノイズを拾いやくすなり、アクセス速度も落ちます。5cm以下推奨。
※線、ヘッダピン、コネクタなどは付属していません。

<<<ヘッダピン取り付け例の写真が入る>>>


 電源端子

 4.8〜15Vの電源を取り付けてください。CMOS−EYEは内部1.8〜3.3Vで動作しています。10V以上の電源を取り付ける場合は、電圧レギュレータIC(目玉の書いてある面のIC)が非常に熱くなりますので注意して下さい。
 電源には、乾電池、ラジコン用のバッテリ、ACアダプタなど、電圧が合えばどんな電源でも使うことが可能です。但し、CMOS−EYEの3.3V端子からマイコン(又は外部回路)へ電源を供給する場合は、 電源の出力可能電流に注意して下さい。たとえば、9V乾電池を使う場合、一般的な9V乾電池は数百mAしか出力できません。CMOS−EYE自体は最大45mAしか消費しませんので問題ありませんが、外部に乾電池の出力容量以上のマイコンなどをつなぐと、乾電池の電圧が下がって誤動作する可能性があります。「外部へ供給する電流+1.5A」以上の出力が出る電源を推奨します。外部へ供給できる最大電流は約700mAですので、最大電流を供給する場合には、2.2A以上出力できる電源が望ましいです。

 GNDは、CMOS−EYEのGNDと、マイコンのGNDを接続してください。


 アドレスバス

  マイコンの汎用出力IOx19本に接続します。CMOS−EYE側はアドレスデータを受け取るだけ(常に入力)ですので、マイコン側のIOは出力に固定しても問題ありません。
  アドレスの切替タイミングは下で説明します。


 M0−M2:モード指定端子

 撮影する画面モードを指定します。撮影時に指定されていたアドレスを先頭に、下記モードと解像度でSRAMに格納されます。どのように格納されるかは、上の<画像フォーマットとメモリ領域>を参照願います。

 注意1)M0-M2の設定は、CMOS-EYE起動終了後(3秒ほどかかる)に行ってください。CMOS-EYEが起動中にM0-M2の設定を行うと、意図したようなアドレスに画像が入らないことがあります。マイコン側のプログラムの先頭に、3秒ほど待つプログラムを必ず挿入してください。

 注意2)M0とM1の設定を変更した後は、設定の反映までに約100mSほどかかります。設定変更後は余裕を見て、200mS以上経過してから撮影するようにしてください。

M2
モード選択
白黒モード
カラーモード

M1
M0
解像度(ピクセル)
 80x60
 160x120
 320x240
 不許可(80x60)


 BSY:BUSY(ビジー)出力

 CMOS−EYEが撮影中の時と、シリアル通信命令による計算中のときにBUSY(ビジー)となり、BSY端子はLOWになります。また、BUSY中は、CMOS−EYE上の赤LEDが点灯します。
 撮影終了タイミングは、ST端子でシャッターをきった後にこのBSY端子を監視し、終了を検知してください。尚、BUSYを検知する必要がない場合は、このBSY端子は未接続でもかまいません。
 このBSY端子は、プルアップしておりません。起動中(電源投入後、LEDが3回点滅するまで)はハイインピーダンス状態になり、起動後はHIGHになります。


 ST:シャッター端子

 この端子をLOWにすると、CMOS−EYEは、M0−M2で指定されたモードで、アドレスバスに指定されたアドレスを先頭に、撮影を開始します。CMOS−EYE側でシャッターが本当にLOWかの判定をする時間がありますので、3uS程度LOWにしないとシャッターが切れないことがあります。
 シャッター端子は内部でプルアップされているので、マイコンを接続しない状態でも常にHIGHになっています。ST端子とGNDの間にプッシュスイッチをつなぐことで、簡易シャッターボタンとすることもできます。(基本的には、プッシュスイッチなどをつなぐのではなく、マイコンのIOで制御するように考慮されています。尚、プッシュスイッチを付けた場合は、チャタリング防止回路を組まないと、二度押しや、撮影時間が延びたり、撮影モードが変わったりする可能性があります。)
  


 データバス

 マイコンの汎用入出力IOx8本に接続します。撮影後に、CMOS−EYEのSRAMへデータを書き込む場合にはマイコンのIOを出力に、画像データをCMOS−EYEに読み込むにはマイコンのIOを入力に切り替えます。このように、アドレスバスに接続するマイコンのIOは、入力/出力が切り替えられるIOが必要です(一般的なマイコンの汎用IO端子は切替可能だと思います。)。
 多くのICがそうであるように、CMOS−EYEとマイコン間のIO同士が、出力同士になるとICが破損する可能性があります。CMOS−EYEは、SRAMコントロールが「CMOS−EYEから読み出し状態」になったときだけ出力となりますので、データ読み出し時には入出力の切替を慎重に行ってください。尚、ほとんどのマイコンのIOは、電源を入れたときに入力に設定されていますので、電源を入れてすぐに破損するということはありません。
  入出力切替のタイミングは下で説明します。


 SRAMコントロール

 撮影した画像データをマイコンで読み取ったり、画像処理したデータを書き込んだりするときに使います。
 これら3つの端子はCMOS−EYEのSRAMのコントロールを行います。マイコンからCMOS−EYEへ指示するだけ(CMOS−EYE側は常に入力)なので、マイコン側のIOは出力に固定しても問題ありません。一般的なSRAMのコントロール端子と同じように、CE、OE、WE端子があります(直接SRAMにはつながっていません)。各端子はLOWでイネーブル(許可、動作)となります。

 CE:  LOWで、SRAMを有効にします。HIGH時はアドレスバスとデータバスがハイインピーダンス(物理的につながっていないのとほぼ同じ状態)になります。
 OE: OEがLOWで、WEがHIGHの時、アドレスバスで指定したアドレスのデータが、CMOS−EYEからデータバスに出力されます。
 WE:  WEがLOWで、OEがHIGHの時、マイコンからデータバスに出力したデータが、アドレスバスで指定したアドレスに書き込まれます。
※CEはチップイネーブル、OEはアウトプットイネーブル、WEはライトイネーブルの略。

 −データ書き込み時の手順−
 1)待機時はOE,WEをHIGHへ、マイコンのデータバスは入力に設定
 2)CEがLOWでなかったらCEをLOWへ
 3)マイコンのデータバスを出力に設定
 4)書き込みたいアドレスをアドレスバスに出力
 5)マイコンのデータバスに、書き込むデータを出力
 6)WEをLOWへ
 7)WEをHIGHへ
 8)次に書き込むデータがあったら4)へ
 9)書き込みが終了したら、マイコンのデータバスを入力に設定、CE,OE,WEはHIGHへ
 ※CMOS−EYEのデータアクセス速度は30nSです。
  5V変換ボードを装着した場合は、アクセス速度は40nSになります。

  (データ書き込みタイミング図)
  
※ほとんどのマイコンのIOは、入力の時にハイインピーダンス状態になります。CMOS−EYEのデータバスは、書き込み時はデータバスが入力設定なので、常にハイインピーダンスになります。よって、(1)〜(3)の間と、(9)以降はデータバス全体がハイインピーダンス状態になります。(電流がほとんど流れない、電圧がかかっていない状態)
※書き込み時は、CMOS−EYE側のデータバスは常に入力(ハイインピーダンス)状態なので、マイコン側のIOが、入力時にハイインピーダンス状態にならないもの(あまりないが特殊な端子ではありえる)があっても問題ありません。読み込み時には注意する必要があります。


 −データ読み込み時の手順−
 1)待機時はOE,WEをHIGHへ、マイコンのデータバスは入力に設定
 2)CEがLOWでなかったらCEをLOWへ
 3)読み込みたいデータがあるアドレスをアドレスバスに出力
 4)OEをLOWへ
 5)マイコンでデータバスのデータを取り込む
 6)OEをHIGHへ
 7)次に読み込みたいデータがあったら3)へ
 8)全ての読み込みが終了したら、CE,OE,WEがHIGHのまま終了
 ※CMOS−EYEのデータアクセス速度は30nSなので、3)4)間は30nS以上の空きが必要です。
  5V変換ボードを装着した場合は、アクセス速度は40nSになります。(+10nS)

  (データ読み込みタイミング図)
  
※(3)(4)の間はウェイトなどをかける必要はありません。
※(4)でOEをLOWにした15nS後に、データバスに確定した値が出力されます。(4)後、15nS以内にデータを読み込むと違う値を読む可能性があるので注意して下さい。しかし、たとえば、20MIPS(一命令1クロックで動くマイコンで20MHz動作時)のマイコンの場合、最高でも一命令にかかる時間は50nSなので(3)〜(5)を連続で行っても問題ありませんが、非常に高速なマイコンを使う場合は(4)−>(5)間が15nS以上になるように注意して下さい。
※CMOS−EYEはOEがLOWになったときに、データバスからデータを出力します。このとき、マイコン側も出力になっていると、IO端子が破損する可能性がありますので、マイコンのIO方向切替には十分注意して下さい。マイコン側はCEをLOWにする前に、あらかじめ入力に設定することをお勧めします。(これは一般的なIC全てに言えることで、信号ラインを出力同士にしてはいけません。)



 RS232C端子

 付属の専用のPCケーブルを接続してください。コネクタにRXと書いてある方をRX、TXと書いてある方をTXに接続します。この端子はPCなどでSRAM内部の画像をモニタリングするのに使います。ロボット組み込み後などで、モニタリングの必要がない場合は外してもかまいません。
 シリアル通信ポートが無いPCの場合は、USBシリアルアダプタを経由して接続してもOKです。TXとRXラインしか使用していないので、ほとんどのUSBシリアルアダプタが使用できます。


−もくじへ戻る−


<シリアル接続での使い方(接続)>



■接続図(一般)
  
  ※5V駆動マイコンと接続する場合には、電圧変換回路を自作するか、オプションの5V変換ボードを装着します。


 電源端子

 4.8〜15Vの電源を取り付けてください。CMOS−EYEは内部1.8〜3.3V(IOは3.3V)で動作しています。10V以上の電源を取り付ける場合は、電圧レギュレータIC(目玉の書いてある面のIC)が非常に熱くなりますので注意して下さい。
 電源には、乾電池、ラジコン用のバッテリ、ACアダプタなど、電圧が合えばどんな電源でも使うことが可能です。但し、CMOS−EYEの3.3V端子からマイコン(又は外部回路)へ電源を供給する場合は、 電源の出力可能電流に注意して下さい。たとえば、9V乾電池を使う場合、一般的な9V乾電池は数百mAしか出力できません。CMOS−EYE自体は最大45mAしか消費しませんので問題ありませんが、外部に乾電池の出力容量以上のマイコンなどをつなぐと、乾電池の電圧が下がって誤動作する可能性があります。「外部へ供給する電流+1.5A」以上の出力が出る電源を推奨します。外部へ供給できる最大電流は約700mAですので、最大電流を供給する場合には、2.2A以上出力できる電源が望ましいです。

 GNDは、CMOS−EYEのGNDと、マイコンのGNDを接続してください。


 A0-A18端子

 シリアル通信命令を使用するときには、A0-A18で設定したアドレスを先頭に撮影データが記録されます。この撮影先頭アドレスをシリアル命令で変えることはできません。(回路を小さくするために、やむをえずこのような仕様になっています。)各端子はハード的にLOW(GNDにつなぐ)か、HIGH(2〜10KΩの抵抗を経由して3.3V端子につなぐ)に設定してください。

 SRAMコントロール端子 CE,OE,WE

 シリアル接続だけで動かす場合は、SRAMコントロール端子を直接駆動することは行いませんので、全ての端子をHIGH(2〜10KΩの抵抗を経由して3.3V端子につなぐ)に設定してください。

 画面モード指定端子 M0-M2

 画面モードは、M0-M2で設定します。画面モードはシリアル命令で変えることはできません。各端子をハード的にHIGHかLOWに設定してください。尚、マイコンのIOが空いている場合には、ここにだけIOをつないで、モードを切り替えることはできます。

 抵抗値は2〜10KΩの抵抗を使いますが、抵抗値が小さいと電流を多く消費し、大きいと応答速度が悪くなります。一般的なマイコンの場合は5.1KΩの抵抗を使ってください。

 この3種類の端子は、シリアル接続時でもかならず設定する必要があります。以下に例を示します。尚、IOに余裕がある場合は、バス接続、シリアル接続両方をおこなってもかまいません。

■接続例(撮影アドレスを0番地固定、モードはカラー80x60に固定する場合)
  

■接続例(撮影アドレスを0番地固定、モードを可変、撮影終了タイミングをBSYで検知する場合)
  


 ほとんどのマイコンには、汎用シリアル通信機能がついています。大抵は、UARTもしくはUSARTという名称になっており、TXとRXの2つの通信線で1つのシリアル通信機能として働きます。TXはデータ送信線、RXはデータ受信線です。この他に、信号GNDを共通化する必要がありますので、CMOS-EYEとマイコンのGNDを接続します。

 UARTの場合は、「非同期シリアル通信」機能です。USARTの場合は「Universal Synchronous and Asynchronous Reciever and Transmitter:汎用同期・非同期シリアル通信(設定により非同期か同期を選ぶ)」です。CMOS-EYEの場合には、非同期シリアル通信でデータの送受信を行います。

 同期通信の場合には、送信・受信線以外に、同期を取るクロック線も必要ですが、非同期通信の場合には、あらかじめお互いに通信速度を決めておき、信号が変化した時から非同期でデータのやりとりを行います。よって、信号線はTXおよびRXの2本で済みます。

 シリアル通信の規格で、RS232Cというものがあり、電圧とコネクタ形状とピン配列を決められています。RS232Cの電圧規格と、UARTの電圧規格は異なりますので注意して下さい。PCにはRS232C電圧レベルのシリアルポートがついており、CMOS-EYEの232CポートはPCと直結することができます。これは、CMOS-EYEの内部信号(0V/3.3V)をRS232Cレベルに変換しています。通常のマイコンのIOにRS232Cレベルの電圧を加えると、そのIOが破損しますので、PCのRS232CラインをCMOS-EYEのUARTに接続しないように注意して下さい。

(マイコンのシリアル通信端子の電圧と、PCの電圧の違い)
  論理値0 論理値1
UART 0V マイコンの電源の電圧
RS232C +3〜+12V -3〜-12V
※CMOS-EYEの場合は電源が3.3V動作なので、UARTの論理1は3.3Vになります。

  

 CMOS-EYEのシリアル通信設定は「フロー制御なし、パリティなし、ストップビット1」となっています。(通常のマイコンの非同期シリアル通信機能の初期設定はだいたいこのようになっている。)


 RX端子

 マイコンからの信号を受信します。よってマイコン側のTX(送信)と接続します。


 TX端子

 マイコンへ信号を送信します。よって、マイコン側のRX(受信)と接続します。


 RS232C端子

 この端子は、CMOS-EYE内部のシリアル信号をRS232Cレベルに変換しています。PCとの通信専用です。マイコンのUART端子につながないようにしてください。
 付属の専用のPCケーブルを接続してください。コネクタにRXと書いてある方をRX、TXと書いてある方をTXに接続します。この端子はPCなどでSRAM内部の画像をモニタリングするのに使います。ロボット組み込み後などで、モニタリングの必要がない場合は外してもかまいません。
 シリアル通信ポートが無いPCの場合は、USBシリアルアダプタを経由して接続してもOKです。TXとRXラインしか使用していないので、ほとんどのUSBシリアルアダプタが使用できます。



<シリアル接続での使い方(命令)>


−データ形式−

 マイコンからCMOS-EYEへシリアル通信で命令を出すことにより、内蔵のプログラムを動かすことができます。命令は4〜17バイトの数値データで送られます。バイトサイズ(8ビット)なので、表される数値は0〜255の256種類になります。
 CMOS-EYEはIO電圧が3.3Vですが、シリアル接続のデータ形式は、ロボット神経システムAGB65シリーズ互換になっています。よって、IOを5Vに変換すればAGB65シリーズと同じ通信ラインを供給できます。但し、AGB65シリーズではシンクロバイト以外の[255]の送信を許可していませんが、システム開発中にCMOS-EYEから画像データを転送する場合には値[255]が含まれる場合があります。よって、システム開発中は他のAGB65シリーズは接続しないようにしてください(サーボコントローラのサーボが突然動いてしまうということがありえますので危険です。)

 尚、以下特に記述がない場合は、数値は10進数で表しています。

 −基本形−

 データの基本形は次の通りになります。[ ]内は1バイトを表します。()内は送りえる数値の範囲を表します。

 [シンクロバイト(255)] [ID(98/99)] [送信バイト数(1-14)] [命令(0-254)] [値1] [値2] ...
シンクロバイト データの通信開始を知らせるデータで、常に「255」で始まります。
ID CMOS-EYEに設定された固有のID。 初期値は98で、DIPSWで99に変更可能。
送信バイト数 送信される命令の(バイト)数。 シンクロバイト、ID、送信バイト数は数えません。
命令 CMOS-EYEに動作させたい命令。以下で詳しく説明します。
注)データはキャラクタデータではなく、数値(バイナリ)データで送ります。
例えばマイコンをマスタとし、C言語でプログラムを作る場合に255を送信しようとして(PCや他の言語も考え方は同じ)、

printf("255");

とするのは間違いです。これですとキャラクタデータですので実際には2と5と5を表す3バイトのキャラクタデータが送られてしまいます。数値データに直すと[32][35][35]が送信され(ASCIIコード参照)、[255]ではないことになります。

unsigned char SINC = 255;
printf("%d",SINC);

で、[255]が2バイトだけ送られます。
※お使いのCコンパイラによっては構文がことなるかもしれません(printf関数がないとか、バイトサイズ変数の宣言はcharではなくintやbyteだとか)のでご注意下さい。


例)---撮影命令を送る場合---

フォーマットは次のようになります。

[255] [ID] [長(1)] [命令(10)]

今、CMOS−EYEのIDが98(出荷時設定)になっていたとしますと、プログラムは次のようになります。

unsigned char data[4];
int i;
data[0]=255;
data[1]=98;
data[2]=1;
data[3]=10
for (i=0; i<data[3]+3; i++){
 printf("%d",data[i]);
}


−命令の概要−

※詳細は名称をクリック、モードはBWが白黒特有の命令、COLがカラー特有の命令です。
命令値
名称
モード
概要
  【基本動作、他】
 
 
0 ソフトウェアリセット
CMOS-EYEをリセットします。
2 データ書きこみ
指定したアドレスに、1つのデータを書き込みます。
4 データ読み込み
指定したアドレスを先頭に、指定したバイト数のデータを、指定したシリアル端子から送信させます。
6 四角形書きこみ
SRAM領域に、指定した濃度で四角形を書き込みます。
10 撮影
M0-M2で指定した画面モードで、A0-A18で指定したアドレスを先頭に、撮影を行います。
12 画像コピー
指定した領域の画像データを、別な領域へコピーします。
14 画面反転
撮影時に、画面を上下左右に反転します。
100 画像データ転送
指定した領域の画像データを、232C端子から転送します。※この場合、CMOS-EYEのUART端子は選択できません。通信速度は115200bps固定。
102 自動機能設定
センサの自動露出、オートホワイトバランスのON/OFFを行います。
  【濃度変換】
 
 
20 線形濃度変換
BW
画像データの濃度を変化させます。
22 ガンマ補正
BW
画像データの濃度を変化させます。明るすぎる場合や、暗すぎる場合の調整に適しています。
24 コントラスト強調
BW
画像データのコントラストを改善します。
  【空間フィルタ】
 
 
26 雑音除去フィルタ
BW
画像データの雑音成分を除去します。細かい点などが入ってしまった場合に、ボカすことができます。
28 微分フィルタ
BW
画像データのエッジを検出します。
30 高域強調フィルタ
BW
ボケた画像や、ブレた画像をある程度はっきりさせます。
  【ニ値化画像】
 
 
32 固定しきい値処理
BW
設定したしきい値を境に、画像を白(255)と黒(0)の二値にします。
40 膨張
BW
ニ値化した画像を1ライン膨張させます。
42 収縮
BW
ニ値化した画像を1ライン縮小させます。
44 細線化
BW
ニ値化した画像を、線幅1の線に変形します。
46 境界線ラベリング
BW
ニ値化した画像の境界線を抽出します。
48 領域ラベリング
BW
ニ値化した画像の離れている物体同士に番号をつけます。
50 円形度計算
BW
領域ラベリングした画像のラベル値を指定して、そのラベルの物体がどのぐらい円形に近いかを計算します。
52 特徴点抽出
BW
細線化−>領域ラベリングを行った後、ラベル値を指定して、その線画に存在する端点、交点、交差点の数と位置を抽出します。
54 角点抽出
BW
特徴点抽出を行った後、ラベル値を指定して、その線画にある角点の数、位置、だいたいの角度を抽出します。
  【色処理】
 
 
80 平均色記憶
COL
画面内の範囲を指定して、その場所のRGBそれぞれの平均色濃度を記憶します。
82 色領域判定
COL
RGBそれぞれの上限値と下限値を指定して、画面内にそのピクセルが存在する位置を判定します。(XYで返す)
84 平均色相記憶
COL
画面内の範囲を指定して、その場所の平均色相を角度で記憶します。色相はR=0°、G=約120°、B=約240°のようになります。
86 色相領域判定
COL
色相と、誤差角度を指定して、画面内にそのピクセルが存在する位置を判定します。(XYで返す)
88 色抽出
COL
RGBそれぞれの上限値と下限値を指定して、画面内にその範囲内のピクセルがあればそこを黒(値0)にする画像を作成します。(マスクができる)
90 色相抽出
COL
色相と、誤差角度を指定して、画面内にその範囲のピクセルがあればそこを黒(値0)にする画像を作成します。(マスクができる)
  【動体検知】
 
 
96 動体エリア検知
BW
2画面を比較し、差が大きい領域を判定します。(XYで返す)
98 動体エリア抽出
BW
2画面を比較し、差が大きいピクセルを黒(値0)とする画像を作成します。
  【補助系】
 
 
200 ヒストグラム取得
白黒又はカラー画像のヒストグラムを計算し、SRAMに格納します。
201 ヒストグラム要求
ヒストグラム結果領域を返信します。。
254 セルフチェック
CMOS-EYEが正常動作しているか確認します。
上以外 無視されます
 
 

 アドレス指定は、19ビット幅で指定する必要があるので、アドレス指定には3バイト使用します。3バイトで24ビットになりますが、上位の5ビットは使用しません。上位5ビットにデータが入っていた場合でも、CMOS−EYE側はマスクをかけてこれらのビットを0にしますが、念のため、送信するデータの上位5ビットは0にしてください。アドレスは上位ビットから送ります。

 アドレス指定の計算を10進数で表すと、

  アドレス=(アドレス1x65,536)+(アドレス2x256)+(アドレス3)

 となります。以下、よく使われるであろうと思われるアドレスの3バイトの表記を示します。

実アドレス
2進数値
アドレス1
アドレス2
アドレス3
4800
000 00010010 11000000
0
18
192
9600
000 00100101 10000000
0
37
128
14400
000 00111000 01000000
0
56
64
19200
000 01001011 00000000
0
75
0
24000
000 01011101 11000000
0
93
192
38400
000 10010110 00000000
0
150
0
57600
000 11100001 00000000
0
225
0
76800
001 00101100 00000000
1
44
0
96000
001 01110111 00000000
1
119
0
153600
010 01011000 00000000
2
88
0
230400
011 10000100 00000000
3
132
0
307200
100 10110000 00000000
4
176
0
384000
101 11011100 00000000
5
220
0
460800
111 00001000 00000000
7
8
0
463999
111 00010100 01111111
7
20
127
469000
111 00101000 00001000
7
40
8
471000
111 00101111 11011000
7
47
216
473000
111 00110111 10101000
7
55
168
473100
111 00111000 00001100
7
56
12
476200
111 00111000 01110000
7
56
112
473300
111 00111000 11010100
7
56
212
473400
111 00111001 00111000
7
57
56
※アドレス1は一番目に送るバイト,2は二番目,3は三番目です。上の表では10進表記で表してます。


 このアドレス指定は、撮影後の画像に対するアドレス指定のみとなります。シリアル命令時の撮影先頭アドレスは、CMOS−EYEのアドレス端子をハード的に設定する必要があります。つまり、シリアル通信命令だけを使う場合は、撮影先頭アドレスは固定になります。尚、撮影した後に、その画像を違う領域にコピーすることはできますので、複数画像の処理は可能です。

 画面の座標をXYで指定する場合は、最大値が320x240なので、1バイトで表す255よりも大きなビット幅が必要です。よって、XY座標を指定する命令では、座標位置を2バイトで表します。座標をシリアル通信で送る場合には、上位バイトを先に送ります。同じく、結果がXY座標で得られる命令は、上位バイトが先に格納されます。

  
※Y座標は最大でも240なので、1バイトでもすみそうですが、今後の拡張性を考えて2バイトで表しています。

 アドレスとXY座標を指定する場合は、アドレスは画面の先頭アドレスを示し、XYはその先頭アドレスからの相対位置となります。

  


−もくじへ戻る−



■命令0:ソフトウェアリセット

1)送信フォーマット (マイコン−>CMOS-EYE)

 [255] [ID] [長(1)] [命令(0)]

2)説明

 CMOS-EYEへこの命令を送ると、CMOS-EYEはリセットします。LEDが3回点滅した後にCMOS−EYEが正常に動き始めます。
 ごくまれに、動作中にシリアル命令を送ってしまった場合に、CMOS−EYE内部の設定が変わってしまう場合がありますので、このような時はソフトウェアリセットを行います。
 また、CMOS−EYEの232C端子とマイコンをつないだ状態で、マイコン側のソフトウェアを書き換えた場合にも設定が変わる場合があり、特に、カラーモードで撮影しても、RGB各領域に白黒画像しか入らなくなる(RGB領域にまったく同じデータが入る)時があります。この場合もソフトウェアリセットを行ってください。

−命令の概要へ戻る−



■命令2:データ書き込み

1)送信フォーマット (マイコン−>CMOS−EYE)

 [255] [ID] [長(5)] [命令(2)] [アドレス1] [アドレス2] [アドレス3] [Data]

 ・アドレス:データを書き込むアドレス

 ・Data:書き込むデータ

2)説明

 CMOS−EYEのSRAMに、「アドレス」で指定したアドレスに「Data」で指定した1バイトのデータを書き込みます。
 CMOS−EYEのSRAMのデータにアクセスして計算する場合は、基本的にはバス接続を推奨していますので、この命令はあくまでも簡易的なものです。シリアル通信経由でのSRAMアクセスは、動作スピードの面であまり実用的ではありません。

−命令の概要へ戻る−


■命令4:データ読み込み

※出荷ロットによってはポートをUART端子にした場合に、データが送信されまいものがありました。恐れ入りますが、他の命令は動いて、命令4のUARTが動かなかった場合は商品を浅草ギ研まで着払いでご返送いただくようお願いいたします。

1)送信フォーマット (マイコン−>CMOS−EYE)

  [255] [ID] [長(6)] [命令(4)] [ポート] [データ数] [アドレス1] [アドレス2] [アドレス3]

 ・ポート:返信データを送る端子を指定します。1が232C、2がUARTに指定されます

 ・データ数:読み込むデータ数を指定します。最大値は254となります。

 ・アドレス:読み込む先頭アドレスを指定します。

2)返信フォーマット (CMOS−EYE−>マイコン)

  [255] [ID] [長(6)] [命令(4)] [ポート] [データ数] [アドレス1] [アドレス2] [アドレス3] [data1] [data2] ...

 ・ポート:送信した値と同じポート値が返されます。

 ・データ数:送信したデータ数と同じ値が返されます。

 ・アドレス:読み込むデータの先頭アドレスが返されます。

 ・data1〜:データ数で指定した数のデータが返されます。

3)説明

 送信フォーマットで指定した端子から、指定したアドレスを先頭に、指定した数のデータをシリアル通信で返信させます。CMOS−EYE側は、マイコン側の状態にかかわらず、1)の送信フォーマットを受け取った後は、その命令に従ってすぐにデータを返信します。

−命令の概要へ戻る−


■命令6:四角形書き込み

1)送信フォーマット (マイコン−>CMOS−EYE)

 [255] [ID] [長(14)] [命令(6)] [MODE(0-5)] [アドレス1] [アドレス2] [アドレス3] [濃度] [x1上] [x1下] [y1上] [y1下] [x2上] [x2下] [y2上] [y2下]

※XYはそれぞれ2バイトで1つの値を表します。[x1上]はx1の上位バイト、[x1下]はx1の下位バイトを表します。

 ・MODE:画面モードを指定します。
MODE カラーモード 解像度
0 白黒 80x60
1 白黒 160x120
2 白黒 320x240
3 カラー 80x60
4 カラー 160x120
5 カラー 320x240
※この命令は白黒特有の命令なので、MODE3,4,5に指定するとそれぞれ0,1,2に変換されます。

 ・アドレス:四角形を書き込む”画面の先頭アドレス"の先頭を指定します。

 ・濃度:書き込む四角形の濃度を指定します。0に近いほど黒く、255に近いほど白くなります。

 ・座標XY:XY座標で書き込む四角の大きさを指定します。これは、アドレスで指定したアドレスからの相対位置を指定します。(x1,y1)が左上、(x2,y2)が右下になります。

2)説明

  MODEとアドレスで指定した画面の相対位置(x1,y1)(x2,y2)へ四角形を書き込みます。下の命令で出てくる、画面の領域判定などで取得した結果に基づいて、画面上に計算結果領域を表示するのに便利です。主に画像システム構築中に計算結果を確認するのに使います。

−命令の概要へ戻る−


■命令10:撮影

1)送信フォーマット  (マイコン−>CMOS−EYE)

 [255] [ID] [長(1)] [命令(10)]

2)説明

 CMOS−EYEのアドレス端子で設定したアドレスを先頭に、M0−M2で指定した画面モードで撮影を行います。アドレス端子と、M0−M2の画面モードについては、バス接続の節(上)を参照願います。
 撮影には70〜100mSかかります。撮影終了のタイミングを検知したい場合は、BSY端子を監視してください。BSY端子は通常はHIGHで、撮影中はLOWになります。
 シリアル通信時の先頭アドレスと画面モード指定は、CMOS−EYEの端子を使って行います。シリアル通信でそれぞれを設定することはできません。(モジュール小型化のため、やむおえず、このような仕様になっています。)

−命令の概要へ戻る−


■命令12:画像コピー

1)送信フォーマット  (マイコン−>CMOS−EYE)

 [255] [ID] [長(8)] [命令(12)] [MODE(0-2)] [元アドレス1] [アドレス2] [アドレス3] [先アドレス1] [アドレス2] [アドレス3]

 ・MODE:画面モードを指定します。
MODE カラーモード 解像度
0 白黒 80x60
1 白黒 160x120
2 白黒 320x240

 ・元アドレス:コピー元の先頭アドレスを指定します。

 ・先アドレス:コピー先の先頭アドレスを指定します。

2)説明

 MODEで指定した画像サイズの画像を、元アドレスから先アドレスへコピーします。カラー画像のコピーはRGBそれぞれの濃淡をコピーしてください(コピーを3回する)。

−命令の概要へ戻る−


■命令14:画面反転

1)送信フォーマット  (マイコン−>CMOS−EYE)

 [255] [ID] [長(2)] [命令(14)] [画面反転モード]

 ・画面反転モード:反転を指定します。
MODE 反転方向
0 反転なし
1 上下左右
2 上下
3 左右

2)説明

 撮影時の画面を反転させます。設定後は、再度設定を変えるまで、その反転モードが続きます。電源入り後と、ソフトウェアリセット後はノーマルに設定されています。ノーマルの場合は、FPC(茶色い部分)側が下になります。

−命令の概要へ戻る−


■命令100:画像転送

1)送信フォーマット  (マイコン−>CMOS−EYE)

 [255] [ID] [長(5)] [命令(100)] [MODE(0-5)] [ADD1] [ADD2] [ADD3]


2)返信フォーマット

  [255][ID][長(2)][命令(100)][MODE(0-5)] この後、画像データ...

3)説明

  [ADD1] [ADD2] [ADD3]で設定したアドレスを先頭に、232C端子からシリアル通信で画像データを転送します。

 白黒の場合は指定したモードの画面サイズの分だけデータを転送します。例えば、MODEが0の場合は上記の返信フォーマットのヘッダが送信されたあと、80x60バイトのデータが送信されます。

 カラーの場合は指定したモードの画面サイズx3バイト分のデータ、つまりRとGとBが1画面ずつ送信されます。例えば、MODEが0の場合は上記の返信フォーマットのヘッダが送信されたあと、80x60x3バイト分のデータが送信されます。

 画面データはSRAMに入っているままの順番で送信されます。SRAMに入っている画面の様子は画像フォーマットとメモリ領域を参照願います。

−命令の概要へ戻る−


■命令20:線形濃度変換

1)送信フォーマット  (マイコン−>CMOS−EYE)

 [255] [ID] [長(10)] [命令(20)] [MODE(0-2)] [A] [B] [元アドレス1] [元アドレス2] [元アドレス3] [格納アドレス1] [格納アドレス2] [格納アドレス3]