アプリ版:「スタンプのみでお礼する」機能のリリースについて

PIC16F84Aを使用してスピードメーターを自作することを目指しているのですが、
まだ初心者なのでどういったプログラムを組めばよいのかが分からないのですが自分なりに方法を考えてみました。
それは、

車速パルス間の時間をタイマーで計測し、その結果に応じてあらかじめ用意した表示用のデータを出力する。
データを出力したら次のパルス間の計測結果が出るまで表示を続け、次の計測結果が出たらそれを新たに出力する。

というものです。
一般的なメーターもこういう原理なのかも知れませんが・・・。

「Timer0」「プリスケーラ」「割り込み」というものを使用したりするようですが、
正直言ってこれらの具体的な使用方法が分かりませんのでとりあえずスピードメーターを簡素化?したものを学習用として作ることにしました。

それは
PICのピンにタクトスイッチを取り付け(チャタリング対策もする)、入力用にする(割り込みが出来るRA4でいいのかな?)。
RBのポートを7セグ表示用のICへ繋ぐ。
という回路で、
電源を入れるとタイマーが計測をはじめ、タクトスイッチを押すと押すまでの時間に応じて結果をポートBに出力する。

電源ON→スイッチ1回目→結果を出力すると同時に2回目までの計測を開始→スイッチ2回目→結果を出力すると同時に3回目までの計測を開始・・・と続く。

この回路での計測結果と出力データの関係は以下のようにします。(適当に考えたものですが)

計測結果が
10秒以上・・・00を表示(2桁はダイナミック点灯で表示)
9~10秒・・・01を表示(厳密には9秒以上10秒未満)
8~9秒・・・・02を表示(厳密には8秒以上9秒未満、以下同じ)
7~8秒・・・・03を表示
6~7秒・・・・04を表示
5~6秒・・・・05を表示
4~5秒・・・・06を表示
3~4秒・・・・07を表示
2~3秒・・・・08を表示
1~2秒・・・・09を表示
0~1秒・・・・10を表示

というものを試しに作ってみようと思います。
アセンブリ言語を使ってプログラムを作るのですが、
Timer0やプリスケーラ、割り込みをプログラムの流れの中でどのように利用すればよいでしょうか?

出来たらソースを作って頂いてそれで詳しく説明を書いていただけると非常に助かります。

A 回答 (1件)

アセンブラは書けないので考え方だけ。



スイッチを押したときだけ更新入れるのなら、とりあえずRA4の割り込みで
・時間取得
・前回時間との比較
・比較結果に応じた出力
を処理するだけです。Timer不要。

なんとなく、パルスを使うなら「一定時間で入力回数を使って速度算出・更新」の方がいいのかなという気はします。でないと例えば完全停止してるにも関わらずパルスが入らないため表示が0にならないなんて結果になってしまいますし。

そんな訳で、RA4割り込みでは入力回数のみカウントしてTimer割り込みで
・入力回数からの速度算出
・算出した速度の表示
・入力回数リセット
とやると多少それらしくなるかと思います。

Prescalerは?と思われるかもしれませんが、これはTimerのカウンタとソースクロックの関係を決定するためのもので、1クロックごとにTimerをカウントするのでは短すぎる場合に何クロックごとにTimerをカウントするかを設定します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!