E-TTL2のストロボ制御と制御部分のクラス化を実施。
E-TTL2での光通信
発光パターンに関しては、EOS ストロボ光通信1にあるので割愛する。
パルスをビットパターンで表すと、以下のような形になった。
- プリ発光パラメータ
0b110000110001000XXXXX - 本発光パラメータ
0b110011110001010XXXXX
最後のXXXXXは、発光量を数値化したものをLSBファーストしたパターンが格納される。
上のはプリ発光パラメータのパターンなのだが、発光量は18となる。
実装
githubにアップしておいた。
今後も改良していくと思うので、今回の実装した部分に関してVer5というタグ付けをしておいた。
次に、実際のプログラムの中身について。
今回IREosStrobeというクラスを作成し、このクラス内で赤外線の発光管理をすることにした。
setメソッドで、送信種別(マニュアル、E-TTL2プリ発光、E-TTL2本発光)の指定、光量の指定が可能になっている。
実際の赤外線の発光は、sendParameter、flashを順に呼び出すことで実現するようにしている。
これらの扱いは、main関数内を参照。
sendParameterでは送信用データを作成するため、光量の指定がLSBファーストの理由から、「E-TTL2での光通信」で記述しているパラメータのビットパターンの逆順にして実装している。
その他
E-TTL2のプリ、本発光の代わりに、マニュアル発光をE-TTL2と同じタイミングで発光させたら、E-TTL2と同じようなストロボの発光が確認できた。
早めの発光指示でも対応できていたようだ。
また、E-TTL2プリ発光で18以外の光量を指定した場合も、指定された値でストロボが発光されたのも確認できた。
プログラム作成の初期段階では、ストロボがうまく発光してくれなくて、理由を探るのにロジックアナライザでIOの状態を何度も確認する状態が続いた。
ロジックアナライザを買っておいてよかった。
コメント