PIC16F84電子遊戯(92)
最終更新日:2003年1月1日
マップメータJr.「一万分の一」 (1ページ) (2ページ) (3ページ)へ

マップメータJr.「一万分の一」の基本仕様
1)エンコーダーの回転を距離数に換算してデジタル表示します。表示最小単位は「0.1km」とします。(誤差はそれなりにあると思います。)
2)距離を測定する地図は「一万分の一」の縮尺のものとします。
3)計測表示距離は「65.5km」maxとします。それ以上はゼロに戻ります。
4)SW1を押せば表示は「0.0km」に初期化されます。
難しいところはありませんね。
マップメータJr.「一万分の一」のエンコーダー詳細
さてエンコーダーについて詳しく調べてみましょう。今回マウスから取り出したエンコーダーは1回転に18回のクリックを持っていて、クリックごとにエンコーダー内部のスイッチがON/OFFを繰り返しています。前回記載の回路図に照らし合わせて入力波形を考えると次のようになります。
(クリックポイントと入力波形)
クリックがあるたびごとに入力信号が変化することになります。
この変化の数を捉えて、距離に換算します。
では1クリックがどれほどの距離になるか計算しましょう。
このエンコーダーのローラー直径は約22.5mmでしたので、円周は22.5x3.14159=70.6858mmとなります。
この長さの中に18クリックありますから1クリックについて約3.9mmとなります。
地図上では一万倍して39mとなります。
従って、距離測定は入力信号が変化するごとに39mずつ加算していけば良いことになります。
案外簡単でしたね。
マップメータJr.「一万分の一」の距離表示
クリックごとに39m(16進では27h)加算したデータは10進に変換してから表示します。
最小表示が0.1km(100m)ですので10進変換した5桁の内、上位から3桁分のみ表示します。加算するデータ長は16ビットしかありませんので、10進にすると65.5kmまでの表示となります。
(上位3桁を表示)
マップメータJr.「一万分の一」のポート割付
ポート名 入出力 機能
RA0 OUT NC
RA1 OUT NC
RA2 OUT NC
RA3 IN SW1
RA4 IN エンコーダー入力
RB0 OUT 7セグ駆動
RB1 OUT 7セグ駆動
RB2 OUT 7セグ駆動
RB3 OUT 7セグ駆動
RB4 OUT 0.1km選択
RB5 OUT 1km選択
RB5 OUT 100km選択
RB7 OUT NC
マップメータJr.「一万分の一」のメインルーチンのフロー
入力信号の変化を読み取り、距離表示する部分の概要フローチャートです。
簡単ですので、すぐ理解可能ですね。
(概要フローチャートです)
マップメータJr.「一万分の一」の主要RAM説明
内容的には簡単ですが、主要RAMの説明です。
in_check 入力判定用
kyori_l 入力加算用(下位)
kyori_h 入力加算用(上位)
入力の変化があるたびに入力加算用(kyori_l,kyori_h)に27hを加算して行きます。
入力判定用(in_check)は今の入力ポートの状態を保存して、前回と状態が変わったことを判定するのに使用します。詳しくは後ページのソースを参照下さい。
data_s1 データ変換用(上位)
data_s0 データ変換用(下位)
入力加算用(kyori_l,kyori_h)データを10進に変換するために、一度データ変換用(data_s1,data_s0)にデータを入れ直します。
hen_5〜hen_1 変換後の10進データ
sub_count 変換時のカウンタ
sub_amari 変換時の余り
16進>10進変換に使用するRAMです。
n1_data 1桁目の表示データ
n2_data 2桁目の表示データ
n3_data 3桁目の表示データ
10進に変換したデータは一度表示用RAMに移動します。
7セグメントの表示ルーチンではこのRAMの内容を常時表示しています。
いかがでしたか、今回の製作は全体的に簡単ですね。ということで、今回はここまでとしておきましょう。
これからも益々面白くなる「PIC16F84電子遊戯」をよろしくお願いいたします。

不明点などあればメールお願いいたします。nonchansoft@nifty.com