COUNTER



新BLOG
 
新BBS
MN-BBS
旧BBS
CALENDAR
S M T W T F S
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      
<<  2020 - 11  >>
 
LOGIN
現在モード: ゲストモード
USER ID:
PASS:
CATEGORIES
ARCHIVES
PROFILE
OTHERS
    処理時間 0.336517秒
POWERED BY
POWERED BY
ぶろぐん
DESIGN BY
ブログンサポート
          
---SPINDLEのPWM制御 (基本周波数の変換) (2)---TIMER1の設定
 setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); // 262ms

 の262msは、262msごとに割り込みをかける意味ですが、

 なぜ、262msなのか、意味が分からず、あれこれ調べて

 ました。

 ある本で、

 「PICのクロックを8MHZとすると最長262msのタイマー値を

 得ることができます。」

 の記事を見つけました。

 やっと262msの意味がわかりました。次のように計算します。

 タイマーの基準のとなる時間は、

      (1/クロック周波数)×4

 で求められます。私が、プログラムに使っている16F88の

 クロックは8MHzなので、

      (1/8Mhz)×4=0.5μs

 「1」をカウントするために必要な時間は、0.5μsですが、

 プリスケラ-(分周)との組みあわせで使います。

 プリスケラ-を8とすると、「1」をカウントするための時間は、

       0.5μs×8=4μs

 になります。

 TIMER1には、16ビットのカウンターを使うので、

 最大、

   16進数でFFFF(一桁を表すのに4ビット使うので、
                      4桁で16ビット)

   10進数で65535回

 を数えることができます。

 目一杯数えると、

   4μs(一回カウントするための時間)×65535回
                =262140μs

       262140μs=262.14ms

 ということで、262msの時間がかかります。

 やっと262msの数値がでてきました。



 これを使うにあたっては、カウンターをセットする必要が

 あります。

 次のように、二つのレジスタを使って設定します。

 が、

       TIMER1H=0XFF
       TIMER1L=0XFF

 のように、設定すると最大の0XFFFF(16進数)の65535

 の設定ができます

 アップカウンターなので65535を数えるには、

       TIMER1H=0
       TIMER1L=0
       
 のようにします。

 それでは、目的の数値を設定するには、

 どうすれはいいのでしょうか。

 TIMER1Hには、4桁の数字の上位の2桁を、TIMER1Lには、

 4桁の数字の下位2桁をセットしますので、上位2桁と

 下位2桁を取り出す必要があります。

 たとえば、10進数で、8546の85を取り出すには、

       8546÷100

 をやって、小数以下を切り捨ててしまえば、目的の「85」

 の数値を取り出せます。

 これと同じことを、ビットをずらすという命令を使って実現し

 ます。ビットをずらす命令は、2進数で考えますので、

 4桁の数値を2進数にすると16桁になります。

   ○○○○ ○○○○ ○○○○ ○○○○

 赤が目的の数値ですので、右に8こずらすと、

   ○○○○ ○○○○ ○○○○ ○○○○
   
 となり、ずらした後には、0が挿入されますの、これで目的

 の上位2桁を取り出せます。これをするには。

         8546 >> 8

 とします。つまり、85をTIMER1Hにセットするには、

       TIMER1H=(8546 >> 8)

 とすればいいわけです。

 では、下位2桁を取り出すにはどうすればどうすればいいで

 しょうか。

      8546-8500

 をすれば、46の数値がとりだせます。これを実現するのに、

 やはり2進数で考えます。マスクをかけるというような言い方

 をしたりしますが、「and」という演算をします。二つの数値を

 比べて、次のような出力になりますから、

    0と0は0
    1と0は0
    0と1は0
    1と1は1
 
 次のように、16進数で「OOFF」(2進数で0000000011111111)

 とのAND演算をします。

  
 
 すると上位2桁が0になって目的の下位2桁の数値が取り

 出せます。実際は、次のようにします。

     TIMER1H=(8546 & OX00FF)

 これで、下位2桁の「46」をセットすることができます。

 8546回数えさせるためには、

    TIMER1H=(8546 >> 8)
    TIMER1L=(8546 & OX00FF)

 と言うように、2行に分けて、記述します。

 
 難しかったです。ここまで理解するのに、3日ぐらいかかり

 ました。Webはくしゅ

| mabo52 | 08:20 | comments (0) | trackback (0) | DIY:: -PWM |
コメント

コメントする









この記事のトラックバックURL
http://mabo52.sakura.ne.jp/tb.php/806
トラックバック

こんな物欲しいな
CLOCK
部分痩せ
NEW ENTRIES
COMMENTS
    ---SPINDLEのPWM制御 (その2) (7)
  • TR >06.18
    ---番外編---
  • TR >06.02
    ---SPINDLEのPWM制御 (その2) (5)
  • mabo >05.30
保留中コメント:10件
LINKS
    相互リンクさせていただいてます。
  • The Rider
Search Box
名言集
メール
   
連絡は下記から
名前:

メールアドレス:

件名:

メッセージ(必須):