前者は 18 ピンで後者は 8 ピンである。ピン数の少ないほうが簡単?と言うこともないだろうが、とりあえず PIC12C509A を使ってみることにした。
ごく最近小黒さんに作ってもらったデジカメ用電子シャッタに PIC12C509A という PIC マイコンが使われている。そこで自分で仕様を決めて電子シャッタをプログラムしてみようという試みである。
小黒さんは機体発見ブザーのプログラムを一部変更して電子シャッタを実現したという。しかしソースは公開されていない。聞いたところでわかるはずもない。一からの勉強だ。
まず仕様を決めなければならない。 PIC の電源は BEC 出力の 5V を利用する。送信機から送られてくる信号のパルス幅が設定値を超えたら、シャッタに出力する。 Futaba 受信機の出力パルス振幅は 3V (0-p) なので、 PIC のドライブ電圧に合わせるためトランジスタを介してレベルコンバートする。その結果 PIC へ入力は負論理となる。出力はトランジスタを介してホトカプラをドライブする。まあこんな仕様になるだろうか。とりあえず発光ダイオードを光らせる回路でテストしてみる。
8 ピンの PIC12C509A は電源に 2 ピンを使い、残りは全部を入出力ポートとして使えるということだ。ではどうやって入力とか出力とかを決めるのか。
TRIS レジスタというのがこのあたりのことに関わっているようだ。マニュアルによると「TRIS レジスタは「ライト専用」レジスタで、リセットと同時にセットされます(出力ドライバはディセーブル)」と書いてある。何もしなければ 6 個すべてのポートは入力用 (0011 1111) に設定されているようだ。出力用に使うポートは '0' を書き込む必要がある。たとえば 5 番ピン (GP2) を出力に使いたければ (0011 1011) に設定する。設定の方法は内部にある W レジスタというものを通して TRIS レジスタに書き込む。つまり
MOVLW | 0x20 | ;020H としても B'00100000' としてもいいようだ |
TRIS | GPIO | ;GPIO は 8 ビットの I/O レジスタで下位 6 ビットのみが使われる |
次にどうやってパルス幅の判定をするかである。パルスの周期は Futaba PPM 受信機で約 44Hz 、PCM 受信機で約 70Hz である。パルスは約 1.5msec を中心に±0.6msec ほどの幅で変化する。そこで 入力( 4 番ピン)へのパルス幅が 1.9msec 以上になったら GP2 ( 5 番ピン)を High にするように設定する。
電源が立ち上がったあと、パルスの有無を確認し、パルスの立ち下がりを検出したらとりあえず 0.8msec 後に Low であるかをチェック。さらに 1.1msec 後にパルスがまだ Low であるかをチェックし、延べ 1.9msec の間 Low が続いたら GP2 を High にする。
いろいろネットで集めた情報から試行錯誤してとりあえずソースを書いてみた、が全く自信がない。 PIC12C509A をライタにセットしてプログラムを書き込んでみた。早速 8 ピンソケットにセットして受信機に接続し、送信機のスイッチでパルスを切り替えてみた。発光ダイオードが光ることを期待したが全く反応なし。
PIC12C509A はキットに付属してきたもののほかに 10 個買ってあるのでまだ大丈夫。とりあえず 1 個はご臨終。気を取り直してプログラムソースを見直し、次にこんなソースを書いてみた。自分では精一杯がんばって書いたつもりだが、初心者レベルなので見られたものではないだろう(誰も見ないか)。このソースをコンパイルして書き込んだ PIC をセットしなおし、受信機に繋いで送信機のレバーを操作してみた。今度は発光ダイオードが見事点灯!感動の一瞬である。これがその空中配線。
久々に胸のときめく感動を味わうことができ、 PIC プログラミングの第一歩を踏み出すことができた。