復活のCLE
製作編
元の回路の修理はかなり難しそうであるという結論に達したわけですが,後幕の係止を手で押さえてから先幕の係止を手で外し,しばらくしてから後幕の指を離すと「ぱしゃっ」とシャッターが閉じる,という一連の動作を何度かやっていると,やはりなんとしてもCLEを復活させたいなあと思うようになりました。
CLEを中古で買い直すことも考えたのですが,もはや修理が出来ずに困っている個体がある中で,壊れたらはいオシマイ,というカメラに10万円近い値段はどうやっても出せません。(後日36000円でCLEを見つけたので驚きましたが)
ある肌寒い日に風呂につかってぼーっと幸せを満喫していると,
「考えてみればカメラなんて先幕を開けて一定時間カウントし,その後後幕を閉じればいいだけの機械だよなあ・・・それを今時抵抗とコンデンサでやっている回路を苦労して修理するなんてあほらしいよなあ・・・」
などと考えていました。続けて,
「シャッターの駆動回路は既にわかっている,ソレノイドも断線してないし,もちろんメカもちゃんと動いてそう。今復活に必要になっているタイミング生成なんてPICマイコンでやりゃいいんじゃないのか・・・」
と閃いたのです。この閃きは,諦めずにCLEを復活させる一条の光であると共に,苦しい検討生活への逆戻りも意味していて,何となく複雑な思いがありました。
問題はちょっと考えただけでも山積していることがわかります。どうやってその時々に必要とされたシャッター速度をPICマイコンに指示するのか,消費電流が大きくなりすぎて電池がすぐになくなってしまわないか,既存の機構をそのまま流用できるのかどうか,そもそも露光時間の制御がきちんと出来るのか,すべてが未経験の世界ですから,全くの未知数です。
しかし,露出計は動いています。レベルメータICの端子はLEDの点灯によってLowレベルになることがXGの回路図からわかっていますから,これをPICマイコンで読み取ってやれば,なんと絞り優先AEだって可能になるじゃないですか。むむ,これはもうやるしかないです。
まず,本当にシャッターが制御できるのかバラックで試してみなくては始まりません。
先幕と後幕のソレノイド駆動回路を作ってから,これを使い慣れているPIC16F84AのGPIOにつなぎ,後幕ソレノイドをONにしてから先幕ソレノイドをONにして,0.5秒後に後幕ソレノイドをOFFにするようプログラムを組んでみました。
これで試してみると,見事に0.5秒だけシャッターが開いてくれます。気をよくしていろいろな時間をプログラムしてみると,それぞれある程度の精度でシャッターが開いているようです。高速側はかなり怪しいようですが,とりあえずこの方法で何とかなりそうという感触はつかめました。
余談ですが実はこの時,某巨大掲示板に「CLEが復活できそう」と書き込んだところ,荒らしの方に「諦めろ」と煽られてしまったのです。ちょっとがっかりしたのですが,既に基礎検討でシャッター制御の目処は立っており,普通なら諦めなくてはならないところを,私なら諦めずに済むのだと思うと俄然やる気が出てきました。
実機への搭載を見越して,仕様決めを始めます。
図が最終的な回路です。レベルメータICからシャッター速度をもらうため,12本のGPIOがレベルメータに繋がります。LEDはLowレベルで点灯するので,LEDが点灯していないときに確実にHighになるように100kΩでプルアップしておきます。
マニュアルモードのシャッター速度の可変は,ダイアルが可変抵抗になっていることを利用して,回転角によって出てくる電圧の大小をAD変換して読み取り,シャッター速度を設定します。消費電流を押さえるため,一応ダイアルにかける電圧をGPIOで入り切りするようにしてあったのですが,露出計と同時に電源を入れれば済むことだと後で分かり,この機能を使うことはありませんでした。
AEとマニュアルの切り替えはGPIOで検出します。Lowでマニュアルモードになるようにするのですが,果たしてそんな信号が取り出せるのかどうか・・・まあ後で考えることにしましょう。
クロックは結局6MHzで十分という結論になりました。低速シャッターでの誤差が大きくなるため,けちらず水晶発振子を使うことにしました。組み込みを考えなくてはならないので,小さいものを探すのに苦労しました。
電源スイッチをONするとPICマイコンに電源が入ります。しかし露出計には半押しをしないと電源が入らないようになっているので,電源の切り忘れがあっても余計な電池の消費が防げます。一定時間経過したらスリープモードに入るような仕組みも入れるべきだったかも知れませんが,これはなにかと面倒なので実装しませんでした。
厳密に言うとレベルメータに電源が入っていない状態でプルアップがなされているため,最悪レベルメータICが壊れてしまうこともあり得るのですが,100kΩと大きめのプルアップですのでたぶん大丈夫だろうと,横着しました。
電源スイッチを反対側にスライドさせるとセルフタイマーモードになります。この位置でLowになる接点がありましたので,GPIOにそのまま突っ込みます。Lowでセルフタイマーモードです。
バッテリチェックは元のスイッチを生かすため,Highでチェックモードです。ボタンを押している間0.5秒周期でLEDが点滅します。電源ONの時にも1回だけ点滅が起こるようにしてあります。ただバッテリチェックといいつつ,PICマイコンが動作しているかどうかを確かめるだけのものに過ぎず,厳密な意味でのバッテリチェック機能ではありません。
あと,やっぱりバグも出すだろうし,シャッター速度の微調整もプログラムの変更で行うことにしましたから,インサーキットプログラムが出来るようにしないといけません。そのつもりで書き込みに使うRB6とRB7の2つの端子には何も割り当てないでおきましたが,RB3についてはオープンになっていると通常の動作が不安定になってしまうことがわかり,プルアップしてあります。
いきなりですが,プログラムは恥ずかしいので非公開です。このくらいのプログラムなら,この回路が理解できる人ならさくっと組めてしまうでしょう。それに私の個体に合わせたプログラムでもありますし,そのままでは他の個体で動作することはないでしょう。
やっていることはとても単純で,シャッターボタンが押されたら後幕のソレノイドをONにして先幕のソレノイドをON,一定時間経過後に先幕と後幕のソレノイドをOFFにするだけです。割り込みなども使わず,ループの中でシャッターボタンをポーリングし,押されたら所定の動作をするだけです。タイミングの生成もNOP命令をぐるぐる回して1msと0.67μsを作り,これを何回繰り返すかでトータルの時間を作るという原始的なものです。幸いないことに,この程度のカメラの処理というのはリアルタイム処理は必要なく,順番に処理をしていけば事足ります。
また,連写されても困るので(実際には巻き上げされてないので連写は出来ませんが)ボタンが一度離されないとポーリングされません。
マニュアルモードのシャッター速度ダイアルの位置ですが,ダイアルから出てくる電圧をAD変換し,それによってループカウンタの値を変えてタイミングを作っています。AD変換についても,16F877は10bit精度のADコンバータを持っていますが,たかだか12段階かそこらの判別が出来ればいいだけですので8bit精度でしか使っていません。PICマイコンの場合,こうすると値の読み出しが楽なのです。
セルフタイマーはシャッターボタンが押されてから10秒のタイマをまわし,1秒に一度LEDを点滅させて10秒経ったら通常の処理をするという処理だけです。一応実機に似せて,最後の1秒は早く点滅するようにしてあります。
もう1つ,最初は秋月電子で手に入れることが出来るPIC16F877A(このAが重要)のQFPを使うつもりでいました。一方で基礎検討はPIC16F877のDIPで進めていたため,実機バージョンではプログラムを変更する必要がありました。しかしついうっかり16F877AのQFPを買い忘れてしまい,万が一のために買ってあった16F877のQFPをDIPとして扱える基板から外して使わざるを得ませんでした。幸いだったのはAバージョン用にプログラムの書き換えをする必要が全くなく,そこでのトラブルを全く心配する必要がなかったことです。(後日Aバージョン用にプログラムを移植しましたが,どういうわけだかビルドは通っても動作しませんでした・・・)
実機への組み込みが一番大変でした。自分が作った回路が人工臓器だとして,これを実機に組み込むというのはその人工臓器をきちんと機能するよう人体につないでやり,かつ拒絶反応が出ないようにしてやることと同じです。
人の体のすべてが解明されていないのと同じように,私もCLEのすべてを解明したわけではありません。影響がないと思われた改造が副作用を出して動かなくなったり,おかしな電圧がかかって長い時間をかけて壊れてしまう事だってあるでしょう。そのあたりはもう経験則でやっていくしかなく,まさに外科医の気分です。
組み込み時の問題点は,以下のような感じです。
どうしても実機と接続がわからず,割り切った点もあります。
と,ここまでで一応実機内部に組み込むことも出来るようになりました。ただし,スペースの関係もあり空中配線ですので,とても戦場には持って行けません。このあたりが素人の工作レベルです。
まあそんなことをいっていても始まりませんので,元の通り組み立て直し,シャッター速度の測定を始めました。
[測定・調整編に進む]