ハードウェアが完成して
ぐだぐだなソフトウェア編へ突入ですが。
ありていにいうと
タイマー割り込みで30秒置きにシャッター切るのは
出来上がってます。
あとは、これを可変にして、入力で変えられるようにするだけ・・・
・・・・ですが。
その前にLCDを動かなさいといけないわけで。
なんか、4月入るまで、あまり時間が取れない・・・・予定。
とりあえず、またもやフォントなのよ。
このLCD用にフォント変換してやんないと
使えん。
はぁ・・・
それにしても、みんなどうやって写真撮ってるんだろw
理屈が分かったので、考えは大体まとまった。
要は、一定時間ごとに、スイッチ押したのと同じ状態になればいいのさ。
・・・当然かw
とりあえず、AVRと小さな表示機を選定。
表示機は、SPI制御が出来て、バックライトがある奴。
当然グラフィック表示。
またもやaitendoで128×64ドットのちっこい液晶、しかもSPI制御という
ぴったりのAD-12864を買ってきた。
AVRは適当。
多分そんなに容量いらないんだけど、
表示用にFONTを積むと思えば、大きいに越したことは無い。
かと言ってピン数が少ないのも困る。
よく調べもせず、秋月電子の店頭で見つけたATmega328あたりにしようと思ったんだけど
ウチの書き込みソフトが対応してないっぽくて
イロイロやって、結局書けなくなっちゃいました(てへっ
とりあえず、今は手元にあったATmega8で作ってるけど
8KBは少ないべ。ASCIIを背負ったら2KBはいるしね。
とりあえず、その辺は後で考えよう。
あとは、実際のスイッチはPhotoMosで。
これならマイコンからも駆動できるし、電気的にも問題にならんだろう。
極性のあるフォトカプラとは違うのだよw
(ダイオードが入ってたことを考えると、フォトカプラの方がいいのか?)
あとは、末端のコネクタだね。
これは今も調査中。
ZHRかと思ったら違ってた。
とりあえず今回は、ぶった切っていつものコネクタに付け替えたけど。
ということで。
つづく(笑
とりあえず、リモコンをバラしてみた。
写真は差し控えますが(笑)
ひどい。
こんなの部品点数的には両手以下の数だし、なんかの基板と兼用だし。
1600円だって高いわ(笑
まあ、いいか。
恐らく韓国メーカーのを輸入販売してるだけだから。
で、サクっと解析。
結局、2段押しのスイッチがあるだけ。
逆流防止機構搭載!とか謳ってる割には、ダイオード入ってるだけだし(笑
一番恐れてたのは、3線で高度なシリアル通信とかしてたらどうしようってとこだが
それもなさそう。
感心したのは、ケーブルと基板がちゃんとコネクタ使ってること。
これのおかげで基板とケーブルの切り離しが確実にできる。
機能的なものさえ間違えなければ、本体側のピン配置は関係ない。
基板側のコネクタのピン番号だけで済む。
まあ、このリモコンが使えない系列(EOS Kiss系)とか、他社カメラへの対応を考えると
コストアップになったとしても、これはアリだね。
そんな感じで。
リクツは分かった。
つづく(笑)
三脚つながりで、場外乱闘中(謎)
いきなり、ケーブルがないのは何故かって?(笑
先日の、MTM4で、とある方が出してた「マルチインターバルタイマリモコン」というものに
えらく感動したので、いろいろ考えていたのですが。
あちらは赤外線リモコンの代用品ですが、EOS40Dには赤外線ポートは無いので
(当然、そのリモコンは使えないわけで)
とりあえず、同等のことをしようと思って
純正品を調べると
むやみに高い。
単純に言うと、シャッターボタンをケーブルで外に出すだけなのに
平気で5500円とかする。
タイマー機能付だとさらに倍以上。
ついでに、10mの延長ケーブルが9800円(ぉぃぉぃ・・・
とはいえ、本体を見ると
コネクタは3ピン。
たいそうな機能がついてるとも思えない。
じゃあ、互換品を探してバラすしか。
とりあえず、コネクタの仕様を調べるところから、と思って
検索したら、1600円ぐらいで出てきたので
手始めにソレを買ってみました。
つづく(笑
長い前フリでしたが(?)
やっと本題。
絵が出たので、次は文字列ですかね。
そーいうわけで、FONTファイルを探してたのですが
結局SJISの$FONTX2形式しか見つからなかったので
UnicodeからSJISへ変換しながら使うか、
それとも
フォントファイルをUnicodeで再構成してしまうか、ですが。
その前に、過去の経験からの話。
家庭用ゲーム機と呼ばれるものは、パソコンとは違って性能は
基本的に一定なわけです。
当然、使えるメモリサイズも一度決まってしまえば変わりませんね。
ここでは、各機の詳細は抜きで書きますけど
CPUから見えるメモリー範囲は一定であり、その時々によって中身が書き換わって、
ゲーム機のプログラムってのは動いています。
CD-ROMから読み込む、っていうのが、その書き換え行為そのものなのですが。
メモリが限られているわけですから、当然持てるデータが限られます。
たとえばRPGで、メッセージを出すために、すべてのフォントデータを常に丸ごと
メモリに置いてるか、といえば、そんなはずはありませんよね。
そのマップで、そのシーンで、必要な最低限をメモリにロードします。
メッセージ(文字列)は、開発過程で確定しますので、必要な文字はどれとどれか、ってのは
既に決まってるのです。
だから、そのフォントデータを抜き出して、番号を振りなおして、決まった場所に置いて、
メッセージはその再生順序を示すコードの列に置き換えられています。
たとえば
に 1
わ 2
に 1
は 3
に 1
わ 2
、 4
に 1
わ 2
と 5
り 6
が 7
い 8
る 9(振りなおした番号)
14文字が、9文字分のデータに圧縮されます。
このデータをメッセージ表示の際に再生すれば、この文字列は再現できるわけです。
さて。
今回やってるマイコンでの画面表示ですが。
マイコンでも、同じようにメモリサイズは決まってますし、ROMサイズも決まっています。
ただ救いなのは、CD-ROMよりも大容量な(!)MicroSDが味方についてます。
たとえば、作ろうとしているものが、MP3プレイヤーだとしたら。
プレイリストをPC上で作らせて、その際にタグを解析して必要な文字列を全部洗い出して
必要な文字のフォントだけを集めて再構成し、文字列も全部プレイリストの中に持ってしまうのが
おそらく一番レスポンスよく動いてくれると思います。
その代わり、リストにないファイルについては、表示できなくなります。
まあ、最終的にどこを目指すかによるけど、とりあえずは、そうではなく。
もっと一般的に文字列を表示することを考えます。
そうすると、先の
Unicodeでフォントファイルを再構成する、という案が浮上してくるのです。
問題なのは、コードが飛び飛びになってること。
その辺をうまく使って、ファイルを分割するようにすれば、多少は速くなるんじゃないかと
思ったりもするのですが。
書き方次第、かな。
とりあえず、$FONTX2は、いつか来た道、なので。
まずはFONTの再編成から。
と、言うわけで(?)
書き込みコマンドの使い方も分かったので
とりあえず、画像でも出してみますか。
まあ、ここに載せるにあたり、人様の著作物を無断で使うわけには行かないので
自分の写真から何枚か。
当然、こんなデカイデータ、ROMにもRAMにも入りませんから、
MicroSDとFatFsを使っています。
元画像はJPEGですけど、とりあえず24bitカラーのBMPに変換してからトリミング、
最終的には16bitカラーBMPに変換しています。
その割には、ここに貼ってる写真はトリミングしてねーじゃないかってのは
突っ込んじゃダメですからね。
ROMから再生するためにデータ変換してBMPのヘッダ削ってC言語の配列にして・・・なんて
やってましたが、さすがに飽きたので(笑
FatFsを有効にして、とりあえずファイル名はテーブルに持って。
BMPファイルは、いつか来た道ですから。
画像サイズの情報を取り出して矩形を設定後、
1ラインづつ読み出して一度RGBに分解。
フェードイン/アウトの演算後、Gのみ6ビット、あとは5ビットの計16bitフォーマットに再構成、
バッファに書き戻した後でバースト転送。
やろうと思えば、24bitカラーでも変換しながら描けるんですけどね~
ちなみに、16bitカラーのBMPってのは規格外ですからね。
BMPの仕様には正式に含まれていないらしいです。
まずは、予定通りバックライトのPWM制御を。
適当にタイマー割り込みにPWM動作の設定をして、カウントアウト時に
割り込み処理内で次のPWM時間の値を更新する。
メインループ側では、とりあえず一定時間経過ごとにカウンタを更新してみる。
・・・・動画もあるのだが、昔のデジカメで取ったのでは小さすぎて
何がなんだか分からないので割愛。
挙句の果てに携帯電話のカメラの方が解像度も高いし焦点距離も短いので
ここ最近の接写は全部携帯電話ですわ。
次。
フェードイン/フェードアウトをソフトウェアで。
データに演算をして輝度が変わったように見せかける。
さすがにリアルタイムで全画面書き換えるほどの能力はないらしい。
まあ、これはCPUの問題なので、クロックとI/Oポートの性能によってしまう。
したがって、今のATmega128では限界ということで。
・・・・動画は(以下略 なので省略。
最後に、表示コマンドの仕様について。
他では、だれも何も書いてくれないようなんだけど。
内部バッファに於けるカレントのRow Address と Column Address を設定するコマンドと
メモリーに書き込むコマンドがあるけど、
この3つって、よくよく仕様を見ると、そんなに自由じゃないのね。
というか、カレントのアドレスを設定する、っていうより
転送先の矩形を設定するって感じかな。
アドレスといってるけど、実際は座標だし
要は左上座標と右下座標を設定するコマンドなわけ。
その上で書き込みコマンドは
「設定された矩形にデータを書き込む」感じ。
だから、矩形を満たすだけのデータを送らないと
次の書き込みコマンドを受け付けない。
最初に自分が書いたコードが動かないのは、ここに理由があって
毎回 コマンド→データ のセットで書いてた。
サンプル見ると、バースト転送してるわけだから
そりゃ気づくよな。
こんな仕様になってるメリットを考えてるんだけど・・・・
文字とかアニメーションのように、決まった矩形領域を書くときには、
こっちのほうが有利なのか?ぐらい・・・かな。
イメージは、カーソルのある位置に文字を書く、って感じ。
うーん。
とりあえず、他の記事を参考にしつつ(横着)
必要最低限のコマンドを。。。
・・・・・・・・・・・・・動かんw
じゃあ、aitendoにあったサンプルを・・・
・・・なんでこんなに設定が必要なんだ??
まあいい。あとで削ってみよう。
動いた。
ハード的には問題なさそう。
データ形式は16bitカラーで。
みんな、あっさり動いたみたいに書いてるけど、
実際は違うね。
コマンドの出すタイミングで、描けたり描けなかったりする。
でも、誰もそれに触れてない。
とりあえず、画像を転送する余裕はないので
カウントまわして書いたBOXでしばらく実験しよう。
いろんなところで記事になっているので、
今更の気もするけど、とりあえず、やらなきゃならんので。
LCDはaitendoにあったZY-FGD1442701V1。
いろいろ探し回ったが、単一電源で厚さが3mm前後のモジュールがなかなかなくて。
OLEDもいいんだけど、小さいし、電圧いるしで今回は見送り。
LCDのバックライトはいづれPWM制御するつもりで、いつも使ってるスイッチICで切り離し。
CPUがATmega128なので、外部メモリにぶら下げる気満々で考えてたんだけど、
最終的にはXMEGA64A4あたりにするつもりなので
そこまで想定してI/Oポート経由の接続に直してある。
このモジュールの動作電圧について、いろいろ情報があるけど
中に載ってるコントローラーが3.3Vで平気なんだから、その外側から3Vしか入れちゃいけないなんていう
理由がどこにもないと思うがね。
追加部品はコンデンサぐらいしか必要ないんだから。
MicroSDも、画像データ用に搭載。
VS10xxの時に苦労したので。
いづれは、フォントファイルを背負い込むことになるだろうから
今のうちに大容量を確保。
あとは、ALPSのジョグスイッチ。
思い切って電即納で買ってみた。
面実装用なので、運良く手元にあったシール基板で貼り付けてある。
最終的なシステム全体で必要な要素はこれで全部。。。かな。
正直、表示装置でここまでマトモに試作してるのって、かなり久々。
もともとVGAやビデオ信号で遊んでたのだが、
その辺のって表示装置が汎用で、デカくて
基板単独じゃ完結できないモノだったけど
これはユニバーサル基板で収まっちゃった。
というか、CPUのバスインターフェースで直接扱える表示装置って
はじめてかも。
・・・・・・・・今回はバス接続ぢゃないですけどね。
さて。
つらつらとコントローラの資料読みでもしますかね。。。
一応、まとめておこう。
1.データを送りつけるだけではだめだ、ということ。
2.データのビットレートにあわせて、転送タイミング、転送サイズを調整する必要がある。
3.VS10xx側のバッファは32byte程度しかない。
4.ストリームモードも、あまり使いやすくはない。
5.RC発振器の校正はちゃんとやろう(爆
・・・・・5.は冗談としても、思ったよりいろいろ考えないといけないようだ。
誰だよ、転送すりゃ鳴るなんて言ったのは!(笑