Re: The history of "M&Y"

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

AVRねた その40 70万ループの謎

2009-08-28 | AVRねた

Yの夏休みの宿題で、ATTiny2313の基本的なプログラムをテストしていたときのことです・・・

時間待ちをするのに、普通ならタイマーなどを使いますが、さすがにYにそれを期待するのはかわいそうなので、単純なループで時間待ちを作ることにしました。

0.1秒(100ms)の時間待ちループを作れば、あとはそれを何回か繰り返せば、5秒だって10秒だってできちゃいます。

ということで、Yは、0.1秒ループを作成するために、ストップウォッチを片手に、その単純ループを100回繰り返すと10秒になるループ回数を試行錯誤して調査していきました。

こんな感じのプログラムなのですが・・・

#include <avr/io.h>

void wait( int t )
   {
   long i;
   while( t-- > 0 )
      for( i=0 ; i<700000L ; i++);
   }

int main(void)
   {
   DDRB = 0b00011111;
   while( 1 )
      {
      PORTB |=  0b00010000; // LED ON
      wait( 100 );
      PORTB &=  ~0b00010000; // LED OFF
      wait( 100 );
      }
   }

これで、LEDが点灯している時間、消灯している時間を計ります。

で、上の wait関数の forループの中の定数を変化させて実験していました。

690000Lの時に9秒くらいだったので、じゃあもうちょっと増やそうということで、700000Lにすると14秒くらいになります。 あれ、増やしすぎたかなぁ。

710000Lにすると、10秒くらいになりました。 えっ、700000Lと逆転?

なぜか、70万回ループだけ異様に時間が掛かります。



謎です。

コメント (3)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« NXTねた その35 NXT2.0 | トップ | 30周年記念 »
最新の画像もっと見る

3 コメント

コメント日が  古い順  |   新しい順
AVRのことでききたいことがあるのですが、 (Moon Nao)
2009-08-28 23:16:02
AVRのことでききたいことがあるのですが、
センサー入力にアナログで入力することはできますか?
とても知りたいので、お返事お願いします。
返信する
まちがえました。 (Moon Nao)
2009-08-28 23:17:37
まちがえました。
ごめんなさい。
返信する
Moon Nao様 (M&Y父)
2009-08-28 23:31:07
Moon Nao様
もう解決しちゃったのかもしれませんが・・・
AVRのチップでアナログ入力のあるものは、アナログ入力ができます。
私が持っているものだと、ATMEGA88とATtiny26はアナログ入力があります。
ATtiny2313はアナログ入力がありません。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

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