ちょっと一服してあまり手がかからないものを作って一休みしました。
本文はトランジスタ技術2000年7月号特集の第8章p.235に記載
別件の簡易オシロスコープはまだ、電源をどうするか悩み中ですすまず。気分を変えてちょっと小さいものを作ってみました。気晴らしといっては聞こえが悪いかもしれませんが、なるべくはんだ付けの少なく済む物を選びました。
詳細は本誌に譲りますが、部品として厄介なのはCR2032の電池ホルダーぐらいでしょう。あまり気に入るものが見つからないので・・・。
製作し始めてはんだ付け・結線などはかなり順調に進んできたのですが、ソフトを実装する際に困りました。私は16F84Aは単価が高かったこともあり、基本的に使っていないので手持ちの16F628Aで作ることになりました。そこで16F84Aとの差をソフトで書き換えてやらなければなりません。そのまま使えるのであればトランジスタ技術のサイトのダウンロードサービスで落としてきたHEXファイルをそのまま書き込めば済む話なのですが、デバイスが違うので差異を変更して書き換えてやらなければなりません。
16F84Aと16F648Aは主として以下の変更が必要です。
- 汎用メモリアドレスが異なる(84Aは0CHから628Aは20Hからが汎用レジスタ)
- メモリマップが異なり、SFRのアドレス配置が異なる
- PORTAの機能にアナログ入力が増えた
- TMR0以外にTMR1,TMR2がある
- VREF,コンパレータ,USARTなどのモジュールが追加された
コンフィギュレーションビットの構成
これらをデバイスにあわせてソースを書き直さなければなりません。しかし、著者の使用しているアセンブラが秋月のPAであるため、MPLABのMPASM書式と異なり、まずこの部分で書き換えが必要です。さらに、上記のようなデバイス依存になる部分の初期化などを追加します。
16F628Aはアナログ入力機能が増えていますが、リセット後のPORTAの入力時の設定がアナログ入力でデバイスが設定されます。すべてデジタル入力になるように設定しなければなりません。また消費電力を落とすためにCR発振モードになっているのですが、追加されたモジュールをディスエーブルにしなければそのモジュールに電力が供給されるのでオフにしてやる必要があります。TMR1,TMR2,CCP,VREF,コンパレータなどのモジュールをオフにします。
書き換えたソースのアセンブルが通っても書き換え時の勘違いや間違い、PA依存のMPASMとの差などがあるので、なかなかデバイスにプログラムを書き込んでもちゃんと稼動しませんでした。処理系とデバイスの同時移植は大変です。
実際の動作は、起動時に3回タイミング指標のサンプルが再生されます。そのタイミングにほぼあった形で手拍子などのリズムを感知すると内蔵の曲からランダムに選択された曲が再生されて、どこにあるかがわかる仕掛けです。タカチのTB-50に入れましたが、同社から発売されているキーリングホルダーCR-20を追加する予定です。
一応、ケースのままで使っていますが、これのお世話になるようなことは今のところありません(笑)。難点といえば感度が高すぎて音楽をかけた程度でも反応してタイミングエラーの「ピッ!」という音が聞こえてくることでしょうか。もう少し増幅度をさげるかすればOKなのかもしれませんが、下げすぎると今度は本当に見つけたいときに反応しなくなってしまい、悩ましいところです。