goo blog サービス終了のお知らせ 

Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

AVRねた その31 タイマーの謎

2009-08-11 | AVRねた

私がよく使っているAVRマイコンのATmega88には、タイマーが3つあります。

タイマー0と2が8ビットタイマーで、タイマー1が16ビットタイマーです。

基本的には、同じように使えるハズなのですが・・・

これまで、単純に時間待ちタイマーとして使用する場合には、タイマー0を使って10msを計測していました。

しかし、次項のPWMを実験するにあたり、PWM用にタイマー0を使用する関係上、時間待ちをタイマー0以外で実現する必要があります。

#include <avr/io.h>

#define LED_SET  DDRD  |=  0b01000000
#define LED_ON   PORTD |=  0b01000000
#define LED_OFF  PORTD &= ~0b01000000

void wait( long t )     // 10ms単位での時間待ち
   {
   TCNT0 = 0;
   while( t-- > 0 )
      {
      while( TCNT0 < 78 );
      TCNT0 = 0;
      }
   }

int main( void )
   {
   LED_SET;
   TCCR0B = 0x05;            // プリスケーラ1024分周

   LED_ON;
   wait( 100 );
   LED_OFF;
   }

このプログラムでPD6ポートに接続したLEDを1秒間だけ光らせるのですが・・・

このプログラムの TCNT0とTCCR0Bをそれぞれ、TCNT1とTCCR1Bに変更すると、それでも1秒間LEDが光ります。

しかし、TCNT2とTCCR2Bに変更すると、LEDが一瞬だけ光って終わってしまいます。 待ち時間を多くしてみると、タイマー0や1に比べて7倍くらいの速さ(短さ)になってしまっているようです。

私の何がいけないの?

タイマー2をタイマー0と同じように使用する方法を誰か教えてください。

コメント (2)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« AVRねた その30 カラーセン... | トップ | AVRねた その32 Step-up DC... »
最新の画像もっと見る

2 コメント(10/1 コメント投稿終了予定)

コメント日が  古い順  |   新しい順
こんばんわ、ぽよこまだんなです。 (ぽよこまだんな)
2009-08-11 22:31:59
こんばんわ、ぽよこまだんなです。

>待ち時間を多くしてみると、タイマー0や1に比べて7倍くらいの速さ(短さ)になってしまっているようです。

タイマ0,1とタイマ2では分周器に設定する値が変わります。
タイマ0,1で1024分周にするには0x05ですが
タイマ2では0x07になります。
(0x05だと、128分周ですので、ちょうど1/8位ですね)
返信する
ぽよこまだんな様 こんにちは (M&Y父)
2009-08-12 23:21:20
ぽよこまだんな様 こんにちは

確かに、データシートを見ると、0x05だと128分周ですね。
単に私自身の確認不足でした。
ご教授ありがとうございました。
返信する

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。
ブログ作成者から承認されるまでコメントは反映されません。

AVRねた」カテゴリの最新記事