FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PIC タイマー0 割り込み 神田祭!»

コメント

コメントの投稿













管理者にだけ表示を許可する

PIC タイマー0


今回はタイマーの勉強をしてみました。

さて、タイマーとは。 ずばり時間を計るものです。

今使用しているPIC16F84Aにはタイマー0というタイマーが備わっています。
0というからには1とかもあるんですが、このPICには0しか入ってません。
pic_timer0-1.jpg
↑がタイマー0の中身の詳細です。
といっても、何がなんだかわかりませんね。 先にタイマーの使い方の簡単な説明を。

まず、PICの点滅の時に説明したようにPICが時間を数える時は、クロックの周波数をベースにしています。タイマー0で時間を数えるのにも当然クロックがベースになります。
ここでクロックなんですが、PICにつけたセラロック(今回は20MHz)を使用してた内部クロックでもいいですし、外部に別のクロックを設けてもかまいません。
先ほどの図の左を見ると
Fosc/4 というのと RA4/T0CKI というのがあります。
Foscというのが内部クロック RA4/T0CKIが外部クロックです。
ちなみにFosc/4となっているので セラロックのクロックの1/4のクロックをベースにするということになります。今回で言えば5MHzをベースにするって事ですね。

もっとよく見るとRA4/T0CKIの後に何かあって、T0SEというものと合わせられています。
これが何かというと、外部のクロックの場合は入力するクロックの波が立ち上がる時に1カウントとするか、波が下がる時に1カウントとするかを選択するためのものです。

タイマー0は8ビットのタイマーです。
これがどういう意味かというと、2進数で8桁のタイマーだということです。
これがどういう意味かというと、00000000~11111111まで数えられることだということです。
これを10進数で言うと、0~255までの256を数えられるということです。
11111111の次は何になるかというと、100000000になるわけですが、8ビットのタイマーなので
9ビット目は認識できません。つまり00000000に戻ってしまいます。

タイマーはクロックを基準にしているので、波が1つ送られてくるたびにカウントアップします。
波1つ目:00000001
波2つ目:00000010
波3つ目:00000011
      ・
      ・
      ・
波255 :11111111
波256 :00000000   といった具合です。

今回は内部クロックを採用することにしました。つまり20MHz/4 = 5MHz なので
一つの波の波長は1/5000000 = 0.0000002[S] = 0.0002[mS] = 0.2[μS]
ということは、0.2μS×256 = 51.2μS しか数えられません。
人間の感覚だと短すぎですね。なんとかもうちょっとがんばってたくさん数えてほしい・・・

そんな時に活躍してくれるのがプリスケーラーさんです。
このお方が何をしてくれるのかというと、時間をゆっくり数えてくれるのです
プリスケーラにはあらかじめ決まった倍数を設定することが出来、
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256を選択できます。

例として1:4を選択した場合を見てみましょう。
このプリスケーラーは内部クロックの波が4つ入力された時に初めて1つの波を吐き出します。
そしてプリスケーラが出力した波をタイマーに渡してあげれば、4倍の長さの波が送られてきたことになります。つまり4倍ゆっくり数えられるのです。
という事は、51.2[μS]×4 = 204.8[μS]まで数えられます。
ただ、4つ波が来ないと出力しないので数えられる細かさが落ちたことになりますね。
スケールを1:256にしてやれば
51.2[μS]×256=13107.2[μS] = 13.1[mS]まで数えられるようになります。

話がとんでしまいますが、ポートAやBを入力モードにするか出力モードにするか等の設定をする時に、レジスタというものを用いました。ポートAの時はTRISAレジスタでしたね。
タイマー0の設定にも当然レジスタを使用します。
タイマー0に関係するレジスタには
・OPTION_REG
・INTCON
・TMR0

があります。

まずOPTIONレジスタを見てみましょう。混乱をさけるためタイマー0に直接関係するところだけ説明します。







76543210

RBPU

INTEDGT0CST0SEPSAPS2PS1PS0


T0CS : タイマー0のクロックの選択
      上の図のT0CSを見てみると外部のクロックと内部のクロックの信号が台形の図形に
      接続されて一本になって出てきます。
      T0CSはどちらのクロックを使うかを選択する機能があります。
      図を見るとわかるようにT0CSに0を入れると外部クロック、1を入れると内部クロックになります。
T0SE : 外部クロックのエッジ選択
     クロックの立ち上がりを基準にするか立下りを基準にするか選択します。
     0で立ち上がりエッジ
     1で立ち下がりエッジ

PSA :プリスケーラ切り替え指定
    プリスケーラをウォッチドックタイマに使うかタイマー0に使うか選べます。
    ウォッチドックタイマについてはまた今度でw
    0でタイマー0
    1でウォッチドックタイマ
    図を見るとわかるように、1を設定した場合はクロックが直接タイマーに入力されます。

PS2 PS1 PS0 :プリスケーラのスケール値
            PS2 PS1 PS0     TMR0
             0  0  0       1:2
             0  0  1       1:4
             0  1  0       1:8
             0  1  1       1:16
             1  0  0       1:32
             1  0  1       1:64
             1  1  0       1:128
             1  1  1       1:256


以上が基本的なタイマー0の使い方です。
といっても具体的にやってみないとわからないですよねぇ。
長くなったのでまた次回で!


クリックお願いします
スポンサーサイト

PIC タイマー0 割り込み 神田祭!»

コメント

コメントの投稿













管理者にだけ表示を許可する


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。