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万回ループだけ異様に時間が掛かります。
謎です。
センサー入力にアナログで入力することはできますか?
とても知りたいので、お返事お願いします。
ごめんなさい。
もう解決しちゃったのかもしれませんが・・・
AVRのチップでアナログ入力のあるものは、アナログ入力ができます。
私が持っているものだと、ATMEGA88とATtiny26はアナログ入力があります。
ATtiny2313はアナログ入力がありません。